[Sarah Hoffmann]
On Fri, 1 Aug 2003, Michael Hohmuth wrote:
Sarah Hoffmann sh18@os.inf.tu-dresden.de writes:
I was able to reproduce the bug with on SUSE 7.3. For some reason functions that are declared 'inline NOEXPORT' won't get compiled at all. [...]
This could also be a problem with `preprocess' or the Perl interpreter it uses. Could you try the following:
Preprocess output is fine. The problem lies in how gcc 2.95.3 handles inlined member functions. Obviously they are automaticly 'inline extern' so if the function can't be inlined there is still no code generated. With the standard gcc 2.95.3 this was not a problem because it always respects the inline directive. SuSEs gcc is a bit more picky and refuses to inline some functions because they are too big.
Actually, the old gcc version is behaving correctly in this sense. If you specify 'extern inline' the function will *only* be used for inlining, even if you make an explicit address reference to it. Such address references become external references. If the compiler handles such usage the way you "expect it" it is only by accident (the gcc documentation clearly says that it shouldn't work this way), and the corresponding code should be fixed.
BTW, it might happen that gcc-3 generates code which does not respect the 'extern inline' directive. It will then generate separate functions located in '.gnu.linkonce.t.*' sections. One can avoid this behaviour by playing around with the '--inline-limit' option, though.
eSk