Libre Office 3.5.3 compiles fine for me with Gcc 4.7 on x86_64 but on i686 the build dies with this error: Making: all_uno-skeletonmaker.dpobj Compiling: unodevtools/source/skeletonmaker/skeletonmaker.cxx Compiling: unodevtools/source/skeletonmaker/skeletoncommon.cxx /home/andy/save/sources/extras/libreoffice-core-3.5.3.2/unodevtools/source/skeletonmaker/skeletoncommon.cxx: In function 'void skeletonmaker::checkDefaultInterfaces(boost::unordered::unordered_set<rtl::OString, rtl::OStringHash>&, const boost::unordered::unordered_set<rtl::OString, rtl::OStringHash>&, const rtl::OString&)': /home/andy/save/sources/extras/libreoffice-core-3.5.3.2/unodevtools/source/skeletonmaker/skeletoncommon.cxx:317:1: internal compiler error: in force_move_args_size_note, at combine-stack-adj.c:419 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. The "internal compiler error" and the request for a bug report to be sent to gcc makes it look like a bug in Gcc 4.7. The actual code that causes the problem looks like this: void checkDefaultInterfaces( boost::unordered_set< OString, OStringHash >& interfaces, const boost::unordered_set< OString, OStringHash >& services, const OString & propertyhelper) { if ( services.empty() ) { if (interfaces.find("com.sun.star.lang.XServiceInfo") != interfaces.end()) interfaces.erase("com.sun.star.lang.XServiceInfo"); } else { if (interfaces.find("com.sun.star.lang.XServiceInfo") == interfaces.end()) interfaces.insert("com.sun.star.lang.XServiceInfo"); } if ( propertyhelper.equals("_") ) { if (interfaces.find("com.sun.star.beans.XPropertySet") != interfaces.end()) interfaces.erase("com.sun.star.beans.XPropertySet"); if (interfaces.find("com.sun.star.beans.XFastPropertySet") != interfaces.end()) interfaces.erase("com.sun.star.beans.XFastPropertySet"); if (interfaces.find("com.sun.star.beans.XPropertyAccess") != interfaces.end()) interfaces.erase("com.sun.star.beans.XPropertyAccess"); } } Googling on the error found this bug report at Ubunut: https://bugs.launchpad.net/ubuntu/+source/gcc-4.7/+bug/1007616 But sadly they have no solution. I have previously built Libre Office 3.5.3 on i686 with Gcc 4.7, what was different this time was that I used an svn pull of the Gcc 4.7 branch (r188021). Ie, Gcc had changes that had been checked into the Gcc 4.7 branch since gcc-4.7.0 was released. Looking at http://gcc.gnu.org/bugs/#detailed it seems that I'm supposed to provide the output of something like: gcc -v -save-temps all-your-options source-file Sadly I have no clue how gcc was called by the Libre Office dmake system (I am completely unfamiliar with dmake). If someone could guide me on how to find out how gcc was called I would appreciate it. Another problem with debugging this is that I can only reproduce this on a 32 bit system and all my 32 bit computers are old and slow. Compiling Libre office takes about 20 hours but fortunately the error occurs only about 4 hours into the build
Yeah, preprocessed source plus g++ options are needed. I don't know the libreoffice build system either, as last resort solution you could try mkdir ~/bin cat > ~/bin/g++ <<\EOF #!/bin/sh mkdir -p /tmp/cmdlines/ 2>/dev/null echo cwd is `pwd` cmdline "$@" >> /tmp/cmdlines/$$ exec /usr/bin/g++ "$@" and run the build under PATH=~/bin:$PATH CXX=~/bin/g++ or so, then just grep for the source file in question. If you hit it already once, supposedly another make invocation wouldn't recompile everything, just a few sources and ICE again.
Genius idea! Unfortunately the preprocessor output skeletoncommon.ii is more than 2MB and so I can't attach it to this bug. I've put it here http://benton.eu.com/skeletoncommon.ii The command that produced it was: andy@router:~$ cd /home/andy/libreoffice-core-3.5.4.2/unodevtools/source/skeletonmaker andy@router:~/libreoffice-core-3.5.4.2/unodevtools/source/skeletonmaker$ g++ -v -save-temps -fmessage-length=0 -c -Os -I. -I../../unxlngi6.pro/inc/uno-skeletonmaker -I../inc -I../../inc -I../../unx/inc -I../../unxlngi6.pro/inc -I. -I/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/stl -I/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/external -I/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc -I/home/andy/libreoffice-core-3.5.4.2/solenv/inc/unxlngi6 -I/home/andy/libreoffice-core-3.5.4.2/solenv/inc -I/home/andy/libreoffice-core-3.5.4.2/res -I/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/udkapi -I/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/offapi -I/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/oovbaapi -I. -I../../res -I. -pipe -mtune=pentiumpro -fvisibility-inlines-hidden -std=c++0x -Wno-deprecated-declarations -Wall -Wextra -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -DLINUX -DUNX -DVCL -DGCC -DINTEL -DGLIBC=2 -D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DHAVE_GCC_VISIBILITY_FEATURE -DX86 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -DGXX_INCLUDE_PATH=/usr/include/c++/4.7.1 -DSUPD=350 -DPRODUCT -DNDEBUG -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DGSTREAMER -DHAVE_THREADSAFE_STATICS -fexceptions -fno-enforce-eh-specs -DEXCEPTIONS_ON -o ../../unxlngi6.pro/obj/skeletoncommon.o /home/andy/libreoffice-core-3.5.4.2/unodevtools/source/skeletonmaker/skeletoncommon.cxx g++: warning: -pipe ignored because -save-temps specified Using built-in specs. COLLECT_GCC=g++ Target: i686-pc-linux-gnu Configured with: ../gcc-4.7-30-05-12/configure --prefix=/usr --enable-shared --enable-languages=c,c++ --enable-threads=posix --enable-__cxa_atexit --enable-cloog-backend=isl --enable-clocale=gnu --disable-multilib --disable-bootstrap --disable-static --with-system-zlib Thread model: posix gcc version 4.7.1 20120530 (prerelease) (GCC) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-fmessage-length=0' '-c' '-Os' '-I' '.' '-I' '../../unxlngi6.pro/inc/uno-skeletonmaker' '-I' '../inc' '-I' '../../inc' '-I' '../../unx/inc' '-I' '../../unxlngi6.pro/inc' '-I' '.' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/stl' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/external' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc' '-I' '/home/andy/libreoffice-core-3.5.4.2/solenv/inc/unxlngi6' '-I' '/home/andy/libreoffice-core-3.5.4.2/solenv/inc' '-I' '/home/andy/libreoffice-core-3.5.4.2/res' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/udkapi' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/offapi' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/oovbaapi' '-I' '.' '-I' '../../res' '-I' '.' '-pipe' '-mtune=pentiumpro' '-fvisibility-inlines-hidden' '-std=c++11' '-Wno-deprecated-declarations' '-Wall' '-Wextra' '-Wendif-labels' '-Wshadow' '-Wno-ctor-dtor-privacy' '-Wno-non-virtual-dtor' '-D' 'LINUX' '-D' 'UNX' '-D' 'VCL' '-D' 'GCC' '-D' 'INTEL' '-D' 'GLIBC=2' '-D' '_PTHREADS' '-D' '_REENTRANT' '-D' 'NEW_SOLAR' '-D' '_USE_NAMESPACE=1' '-D' 'HAVE_GCC_VISIBILITY_FEATURE' '-D' 'X86' '-D' '__DMAKE' '-D' 'UNIX' '-D' 'CPPU_ENV=gcc3' '-D' 'GXX_INCLUDE_PATH=/usr/include/c++/4.7.1' '-D' 'SUPD=350' '-D' 'PRODUCT' '-D' 'NDEBUG' '-D' 'OSL_DEBUG_LEVEL=0' '-D' 'OPTIMIZE' '-D' 'GSTREAMER' '-D' 'HAVE_THREADSAFE_STATICS' '-fexceptions' '-fno-enforce-eh-specs' '-D' 'EXCEPTIONS_ON' '-o' '../../unxlngi6.pro/obj/skeletoncommon.o' '-shared-libgcc' '-march=pentiumpro' /usr/libexec/gcc/i686-pc-linux-gnu/4.7.1/cc1plus -E -quiet -v -I . -I ../../unxlngi6.pro/inc/uno-skeletonmaker -I ../inc -I ../../inc -I ../../unx/inc -I ../../unxlngi6.pro/inc -I . -I /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/stl -I /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/external -I /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc -I /home/andy/libreoffice-core-3.5.4.2/solenv/inc/unxlngi6 -I /home/andy/libreoffice-core-3.5.4.2/solenv/inc -I /home/andy/libreoffice-core-3.5.4.2/res -I /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/udkapi -I /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/offapi -I /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/oovbaapi -I . -I ../../res -I . -D_GNU_SOURCE -D LINUX -D UNX -D VCL -D GCC -D INTEL -D GLIBC=2 -D _PTHREADS -D _REENTRANT -D NEW_SOLAR -D _USE_NAMESPACE=1 -D HAVE_GCC_VISIBILITY_FEATURE -D X86 -D __DMAKE -D UNIX -D CPPU_ENV=gcc3 -D GXX_INCLUDE_PATH=/usr/include/c++/4.7.1 -D SUPD=350 -D PRODUCT -D NDEBUG -D OSL_DEBUG_LEVEL=0 -D OPTIMIZE -D GSTREAMER -D HAVE_THREADSAFE_STATICS -D EXCEPTIONS_ON /home/andy/libreoffice-core-3.5.4.2/unodevtools/source/skeletonmaker/skeletoncommon.cxx -mtune=pentiumpro -march=pentiumpro -std=c++11 -Wno-deprecated-declarations -Wall -Wextra -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -fmessage-length=0 -fvisibility-inlines-hidden -fexceptions -fno-enforce-eh-specs -Os -fpch-preprocess -o skeletoncommon.ii ignoring nonexistent directory "/usr/local/include" ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../i686-pc-linux-gnu/include" ignoring nonexistent directory "../../unxlngi6.pro/inc/uno-skeletonmaker" ignoring nonexistent directory "../inc" ignoring nonexistent directory "../../unx/inc" ignoring duplicate directory "." ignoring nonexistent directory "/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/stl" ignoring nonexistent directory "/home/andy/libreoffice-core-3.5.4.2/solenv/inc/unxlngi6" ignoring nonexistent directory "/home/andy/libreoffice-core-3.5.4.2/res" ignoring duplicate directory "." ignoring nonexistent directory "../../res" ignoring duplicate directory "." #include "..." search starts here: #include <...> search starts here: . ../../inc ../../unxlngi6.pro/inc /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/external /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc /home/andy/libreoffice-core-3.5.4.2/solenv/inc /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/udkapi /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/offapi /home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/oovbaapi /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1 /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/i686-pc-linux-gnu /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/backward /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/include /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/include-fixed /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-fmessage-length=0' '-c' '-Os' '-I' '.' '-I' '../../unxlngi6.pro/inc/uno-skeletonmaker' '-I' '../inc' '-I' '../../inc' '-I' '../../unx/inc' '-I' '../../unxlngi6.pro/inc' '-I' '.' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/stl' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/external' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc' '-I' '/home/andy/libreoffice-core-3.5.4.2/solenv/inc/unxlngi6' '-I' '/home/andy/libreoffice-core-3.5.4.2/solenv/inc' '-I' '/home/andy/libreoffice-core-3.5.4.2/res' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/udkapi' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/offapi' '-I' '/home/andy/libreoffice-core-3.5.4.2/solver/unxlngi6.pro/inc/oovbaapi' '-I' '.' '-I' '../../res' '-I' '.' '-pipe' '-mtune=pentiumpro' '-fvisibility-inlines-hidden' '-std=c++11' '-Wno-deprecated-declarations' '-Wall' '-Wextra' '-Wendif-labels' '-Wshadow' '-Wno-ctor-dtor-privacy' '-Wno-non-virtual-dtor' '-D' 'LINUX' '-D' 'UNX' '-D' 'VCL' '-D' 'GCC' '-D' 'INTEL' '-D' 'GLIBC=2' '-D' '_PTHREADS' '-D' '_REENTRANT' '-D' 'NEW_SOLAR' '-D' '_USE_NAMESPACE=1' '-D' 'HAVE_GCC_VISIBILITY_FEATURE' '-D' 'X86' '-D' '__DMAKE' '-D' 'UNIX' '-D' 'CPPU_ENV=gcc3' '-D' 'GXX_INCLUDE_PATH=/usr/include/c++/4.7.1' '-D' 'SUPD=350' '-D' 'PRODUCT' '-D' 'NDEBUG' '-D' 'OSL_DEBUG_LEVEL=0' '-D' 'OPTIMIZE' '-D' 'GSTREAMER' '-D' 'HAVE_THREADSAFE_STATICS' '-fexceptions' '-fno-enforce-eh-specs' '-D' 'EXCEPTIONS_ON' '-o' '../../unxlngi6.pro/obj/skeletoncommon.o' '-shared-libgcc' '-march=pentiumpro' /usr/libexec/gcc/i686-pc-linux-gnu/4.7.1/cc1plus -fpreprocessed skeletoncommon.ii -quiet -dumpbase skeletoncommon.cxx -mtune=pentiumpro -march=pentiumpro -auxbase-strip ../../unxlngi6.pro/obj/skeletoncommon.o -Os -Wno-deprecated-declarations -Wall -Wextra -Wendif-labels -Wshadow -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -std=c++11 -version -fmessage-length=0 -fvisibility-inlines-hidden -fexceptions -fno-enforce-eh-specs -o skeletoncommon.s GNU C++ (GCC) version 4.7.1 20120530 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.7.1 20120530 (prerelease), GMP version 5.0.4, MPFR version 3.1.0, MPC version 0.9 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C++ (GCC) version 4.7.1 20120530 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.7.1 20120530 (prerelease), GMP version 5.0.4, MPFR version 3.1.0, MPC version 0.9 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: a3f5e158f4bae53c28ca78d37dcc6e13 /home/andy/libreoffice-core-3.5.4.2/unodevtools/source/skeletonmaker/skeletoncommon.cxx: In function ‘void skeletonmaker::checkDefaultInterfaces(boost::unordered::unordered_set<rtl::OString, rtl::OStringHash>&, const boost::unordered::unordered_set<rtl::OString, rtl::OStringHash>&, const rtl::OString&)’: /home/andy/libreoffice-core-3.5.4.2/unodevtools/source/skeletonmaker/skeletoncommon.cxx:317:1: internal compiler error: in force_move_args_size_note, at combine-stack-adj.c:419 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. I hope that makes sense to someone...
Remember that you can always compress it.
Created attachment 27580 [details] skeletoncommon.ii preprocessor output compressed (In reply to comment #3) > Remember that you can always compress it. Doh!
Created attachment 27581 [details] pr53602.ii Slightly reduced testcase for -m32 -Os -std=c++11.
Started with http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=186018
We end up with: (insn 38 73 40 5 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 12 [0xc]))) (clobber (reg:CC 17 flags)) ]) pr53602.ii:359 251 {*addsi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_ARGS_SIZE (const_int 0 [0]) (nil)))) (insn 40 38 41 5 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int -12 [0xfffffffffffffff4]))) (clobber (reg:CC 17 flags)) ]) pr53602.ii:64 251 {*addsi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_ARGS_SIZE (const_int 12 [0xc]) (nil)))) (insn 41 40 42 5 (set (mem/f:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A32]) (mem/f/c:SI (plus:SI (reg/f:SI 6 bp) (const_int -12 [0xfffffffffffffff4])) [3 D.3489.pData+0 S4 A32])) pr53602.ii:64 43 {*pushsi2} (expr_list:REG_ARGS_SIZE (const_int 16 [0x10]) (nil))) before csa and csa obviously merges the two into sp += 0 that it wants to delete. force_move_args_size is called with prev == NULL (as it is at the start of a bb). But apparently cleanup_cfg at the start of csa pass jump threaded the call sequence starting at insn 41, so the two stack adjustments that cancel each other end up the only insns in a bb. So we trigger: /* ??? We *must* have a place, lest we ICE on the lost adjustment. Options are: dummy clobber insn, nop, or prevent the removal of the sp += 0 insn. Defer that decision until we can prove this can actually happen. */ I guess if we proved that all the predecessors of the bb have the same current REG_ARGS_SIZE, or all the successor have the same current REG_ARGS_SIZE, we could avoid the note altogether. Or do one of the things the comment talks about. Richard, can you please handle this?
Or perhaps just handle this particular case for now, when there has been jump threading right after the sp adjustment sequence that cancelled each other. Thus, if we reach end of bb after the insn without seeing a CALL or or throwing insn and the bb has a single fallthru successor only, keep looking in the successor bb.
Mine.
Author: rth Date: Sat Jun 9 06:14:27 2012 New Revision: 188356 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188356 Log: PR c++/53602 * combine-stack-adj.c (force_move_args_size_note): Add ARGS_SIZE note to a clobber insn when no other insn is available. Added: branches/gcc-4_7-branch/gcc/testsuite/g++.dg/torture/pr53602.C Modified: branches/gcc-4_7-branch/gcc/ChangeLog branches/gcc-4_7-branch/gcc/combine-stack-adj.c
Author: rth Date: Sat Jun 9 06:17:12 2012 New Revision: 188357 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188357 Log: PR c++/53602 * combine-stack-adj.c (force_move_args_size_note): Add ARGS_SIZE note to a clobber insn when no other insn is available. Modified: trunk/gcc/ChangeLog trunk/gcc/combine-stack-adj.c
Author: rth Date: Sat Jun 9 06:18:38 2012 New Revision: 188358 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188358 Log: PR c++/53602 Added: trunk/gcc/testsuite/g++.dg/torture/pr53602.C
Author: rth Date: Sat Jun 9 16:27:52 2012 New Revision: 188360 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188360 Log: PR c++/53602 * cfgcleanup.c (execute_jump): Rename from rest_of_handle_jump2. (pass_jump): Rename from pass_jump2. (execute_jump2, pass_jump2): New. * combine-stack-adj.c (rest_of_handle_stack_adjustments): Don't perform cfg cleanup here. Move the test of PUSH_ROUNDING and ACCUMULATE_OUTGOING_ARGS test... (gate_handle_stack_adjustments): ... here. * passes.c (init_optimization_passes): Update for pass_jump2 rename. Place new pass_jump2 after pass_stack_adjustments. * tree-pass.h (pass_jump): Declare. Modified: trunk/gcc/ChangeLog trunk/gcc/cfgcleanup.c trunk/gcc/combine-stack-adj.c trunk/gcc/passes.c trunk/gcc/tree-pass.h
Many thanks, Libre Office now compiles as expected. Should this bug be marked as fixed?
Not yet, because it hasn't been fixed on the 4.7 branch yet.
Yes it is fixed on the 4.7 branch.
Oops, right you are.
*** Bug 53644 has been marked as a duplicate of this bug. ***