rfg@MCC.COM (Ron Guilmette) (06/17/89)
As the following program demonstrates, g++ 1.35.0/sun3 handles inlining
of member functions (whose bodies are contained within their containing
class declaration) in a bass-akwards way. Specifically, if a given
class declaration contains two member functions, and if one of these
member functions is "inline" and if the other member function contains
a call to the "inline" function, the call will *only* be inlined if
the "inline" function appears *** after *** the body of the calling
function!!!!!!!
enilni
The reason for this "enilni" feature has to do with the order in which
g++ parses and compiles member functions. Apparently, member functions
are "processed" by g++ in a "right-to-left" ordering, so that if you
want a member function inlined everywhere, you should put it *last*
in your class declaration, or better yet, place the body outside of
the class declaration altogether.
I have no idea how to fix this problem right now, but I hope that it
will be fixed so that "inlining" will take place "as expected", i.e.
in a top-to-bottom fashion, rather than in the current "bottom-to-top"
fashion.
// Ron Guilmette - MCC - Experimental Systems Kit Project
// 3500 West Balcones Center Drive, Austin, TX 78759 - (512)338-3740
// ARPA: rfg@mcc.com
// UUCP: {rutgers,uunet,gatech,ames,pyramid}!cs.utexas.edu!pp!rfg
----------------------------------------------------------------------
struct C {
// If you reverse the order of the following two declarations,
// you will get what you really wanted.
inline void member_1 () { }
inline void member_2 () { member_1 (); }
};
main ()
{
C c;
c.member_2 ();
}
------------------------------------------------------------------------
#NO_APP
gcc_compiled.:
.text
.even
_member_1_PSC:
link a6,#0
movel a6@(8),d0
L4:
unlk a6
rts
.even
.globl _main
_main:
link a6,#-4
moveml #0x3800,sp@-
movel a6,d2
subql #2,d2
movel d2,d3
movel a6,d0
subql #2,d0
movel d3,d4
movel d4,sp@-
jbsr _member_1_PSC <=== inlining failed here
addqw #4,sp
L6:
L5:
moveml a6@(-16),#0x1c
unlk a6
rts