Boot OpenSolaris 2008.11 (64 bit OS) in 32 bit mode. Configure gcc this way:
# gcc/xgcc -v Using built-in specs. Target: i386-pc-solaris2.11 Configured with: ../gcc_trunk/configure --enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --enable-shared --disable-static --enable-decimal-float --with-long-double-128 --enable-nls --with-included-gettext --enable-gather-detailed-mem-stats --with-stabs --enable-debug --enable-largefile --enable-symvers --without-system-zlib --enable-gtk-cairo --enable-gconf-peer --enable-xmlj --enable-gtk-peer --enable-qt-peer --enable-plugin --enable-tool-wrappers --enable-local-sockets --enable-gjdoc --enable-java-awt=gtk,xlib,qt,x --enable-gc-debug --enable-libgcj-debug --enable-objc-gc --enable-libstdcxx-debug --disable-stage1-checking --enable-checking=release --without-system-libunwind --with-gnu-as --with-as=/usr/local/bin/as --with-gnu-ld --with-ld=/usr/local/bin/ld Thread model: posix gcc version 4.4.0 20090117 (experimental) [trunk revision 143454] (GCC) Build and then grep your log. # gmake 2>&1 | tee made_log.txt (wait until libffi is built both 32 and 64 bit) # ggrep --colour size\ of\ long\ double made_log.txt made_log.txt:checking size of long double... 12 made_log.txt:checking size of long double... 16 Load all the files into editor: # gedit i386-pc-solaris2.11/libffi/config.log # gedit i386-pc-solaris2.11/amd64/libffi/config.log # gedit /usr/share/src/gcc_trunk/libffi/configure The _32_ bit 'libffi/config.log' shows: ... configure:12455: checking size of long double configure:12778: /usr/share/src/gcc_build/./gcc/xgcc -B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/ -B/usr/local/i386-pc-solaris2.11/lib/ -isystem /usr/local/i386-pc-solaris2.11/include -isystem /usr/local/i386-pc-solaris2.11/sys-include -o conftest -g -O2 conftest.c >&5 configure:12781: $? = 0 configure:12783: ./conftest configure:12786: $? = 0 configure:12811: result: 12 ... The _64_ bit 'libffi/config.log' shows: ... configure:12455: checking size of long double configure:12485: /usr/share/src/gcc_build/./gcc/xgcc -B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/ -B/usr/local/i386-pc-solaris2.11/lib/ -isystem /usr/local/i386-pc-solaris2.11/include -isystem /usr/local/i386-pc-solaris2.11/sys-include -m64 -c -g -O2 conftest.c >&5 configure:12491: $? = 0 configure:12495: test -z || test ! -s conftest.err configure:12498: $? = 0 configure:12501: test -s conftest.o configure:12504: $? = 0 configure:12526: /usr/share/src/gcc_build/./gcc/xgcc -B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/ -B/usr/local/i386-pc-solaris2.11/lib/ -isystem /usr/local/i386-pc-solaris2.11/include -isystem /usr/local/i386-pc-solaris2.11/sys-include -m64 -c -g -O2 conftest.c >&5 conftest.c: In function 'main': conftest.c:70: error: size of array 'test_array' is negative configure:12532: $? = 1 configure: failed program was: | /* confdefs.h. */ (MANY more lines, and failed tests) configure:12708: $? = 0 configure:12689: /usr/share/src/gcc_build/./gcc/xgcc -B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/ -B/usr/local/i386-pc-solaris2.11/lib/ -isystem /usr/local/i386-pc-solaris2.11/include -isystem /usr/local/i386-pc-solaris2.11/sys-include -m64 -c -g -O2 conftest.c >&5 configure:12695: $? = 0 configure:12699: test -z || test ! -s conftest.err configure:12702: $? = 0 configure:12705: test -s conftest.o configure:12708: $? = 0 configure:12689: /usr/share/src/gcc_build/./gcc/xgcc -B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/ -B/usr/local/i386-pc-solaris2.11/lib/ -isystem /usr/local/i386-pc-solaris2.11/include -isystem /usr/local/i386-pc-solaris2.11/sys-include -m64 -c -g -O2 conftest.c >&5 configure:12695: $? = 0 configure:12699: test -z || test ! -s conftest.err configure:12702: $? = 0 configure:12705: test -s conftest.o configure:12708: $? = 0 configure:12811: result: 16 ... The "Bug": The ./configure script "calculates" that 'long doubles' are size 12 for the 32 bit program that was _tested_. The ./configure script _guesses_ that 'long doubles' are size 16 for the 64 bit program that was never ran in 32 bit boot mode. Thanks, Rob -- Summary: gcc 4.4.0 20090117 - libffi guesses sizeof 'long double' incorrectly (32bit/64bit) Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: bootstrap AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rob1weld at aol dot com GCC build triplet: i386-pc-solaris2.11 GCC host triplet: i386-pc-solaris2.11 GCC target triplet: i386-pc-solaris2.11 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38893