Very simple testcase test.cpp #include <math.h> int main() { return 0; } g++-3.3.6 -o t -ffast-math test.cpp In file included from /usr/include/math.h:424, from test.cpp:1: /usr/include/bits/math-finite.h:177: error: syntax error before `double' /usr/include/bits/math-finite.h:186: error: syntax error before `float' /usr/include/bits/math-finite.h:196: error: syntax error before `long' /usr/include/bits/math-finite.h:210: error: syntax error before `double' /usr/include/bits/math-finite.h:219: error: syntax error before `float' /usr/include/bits/math-finite.h:229: error: syntax error before `long' /usr/include/bits/math-finite.h:307: error: syntax error before `double' /usr/include/bits/math-finite.h:310: error: `__d' was not declared in this scope /usr/include/bits/math-finite.h:310: error: `__local_signgam' was not declared in this scope /usr/include/bits/math-finite.h:311: error: syntax error before `return' /usr/include/bits/math-finite.h:314: error: syntax error before `float' /usr/include/bits/math-finite.h:317: error: conflicting types for `float __res' /usr/include/bits/math-finite.h:310: error: previous declaration as `double __res' /usr/include/bits/math-finite.h:317: error: `__d' was not declared in this scope /usr/include/bits/math-finite.h:317: error: `__local_signgam' was not declared in this scope /usr/include/bits/math-finite.h:318: error: syntax error before `return' /usr/include/bits/math-finite.h:322: error: syntax error before `long' /usr/include/bits/math-finite.h:325: error: conflicting types for `long double __res' /usr/include/bits/math-finite.h:317: error: previous declaration as `float __res' /usr/include/bits/math-finite.h:325: error: `__d' was not declared in this scope /usr/include/bits/math-finite.h:325: error: `__local_signgam' was not declared in this scope /usr/include/bits/math-finite.h:326: error: syntax error before `return' The root of problem is simple: in this case macros __extern_always_inline not defined. Also, the problem is observed only with g++, not gcc.
Please use newer version of g++. The 3.3.6 version is now deprecated.
Actually that is not the case. GCC 3.3.6 isn't supported for building of glibc itself, still, compiling with GCC 3.3.6 your own programs against glibc headers and linking against it is supported.
Conditioning these definitions on __extern_always_inline being defined is probably the appropriate fix.
Mine.
Should be fixed by b7bfe116.