This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Segmentation fault building libg++ without named returns


> The rtl at -O3 has no calls to Fix::~Fix(void), even in Fix.cc.00.rtl.
> There is also no definition for Fix::~Fix(void) in the assemble output.

If I specify `-fno-inline', the weak defines are output at -O3 in the
implementation object module.  It seems a runtime callable version of
an inline function is not being output when the function isn't static.  
For modules which include Fix.h but don't have `#pragma implementation',
it appears the functions defined in the interface are not being inlined
and a runtime callable version must exist.

I tried `-fkeep-inline-functions' but this results in the following errors:

In file included from /usr/include/math.h:348,
                 from ../../../../libstdc++/cmath:7,
		 from ../../../../libg++/src/builtin.h:33,
	 	 from ../../../../libg++/src/Fix.h:15,
	  	 from ../../../../libg++/src/Fix.cc:25:
/usr/include/bits/mathinline.h:583: output number 0 not directly addressable
...

This is the define that causes the problem in mathinline.h:

#define __lrint_code \
  long int __lrintres;                                                        \
  __asm__ __volatile__                                                        \
    ("fistpl %0"                                                              \
     : "=m" (__lrintres) : "t" (__x) : "st");                                 \
  return __lrintres
__MATH_INLINE long int
lrintf (float __x)
{
   __lrint_code;
}
...

Dave
-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]