Jan,
I was wondering if you could help me figure out how to fix the tests
g++.old-deja/g++.other/static14.C and g++.old-deja/g++.other/static20.C
which started failing on IA64 HP-UX at version 138150 when you checked
in the C++ inlining change. Here is a minimal test:
struct basic_string { ~basic_string() {} };
struct Side { void name() { static basic_string sname; } };
int main () { Side x; }
Before your checkin this would compile and link correctly,
now it gives me an undefined symbol for Side::name()::sname.
This bug only occurs when no optimization is used.
The difference is that before your change, the C++ cleanup function
_tcf_0 was not output (and was not called). After the change this
cleanup function is output (though there are still no calls to it) and
it contains a reference to Side::name()::sname but the variable sname
is not output. Interestingly, before and after the change, even though
the variable Side::name()::sname was not output, the guard variable for
it is output in a comdat.
If the test is optimized at all then the problem goes away because the
optimizer recognizes that _tcf_0 is not needed and doesn't output it and
thus the reference to Side::name()::sname goes away.
I don't see this problem on IA64 Linux where the _tcf_0 function
is not output even when no optimization is done. I am not sure
why there is this difference between IA64 Linux and HP-UX.
Any help or advice you could give me would be appreciated.
Steve Ellcey
[EMAIL PROTECTED]