Hi,

I'm trying to migrate from gcc4.5.2 to gcc4.7.3. 

Here are a part of my makefile to build gcc (same config used with gcc4.5.2 and 
gcc4.7.3) :

cd $(GCC_OBJDIR); CFLAGS="-g -O0" $(GCC_SRCDIR)/configure 
        -quiet 
        --prefix=$(INSTALLDIR) 
        --target=$(TARGET) 
        --enable-languages=c,c++,ada 
        --disable-nls 
        --disable-decimal-float 
        --disable-fixed-point 
        --disable-libmudflap 
        --disable-libffi 
        --disable-libssp 
        --disable-shared 
        --disable-threads 
        --without-headers
        --disable-libada 
        --enable-version-specific-runtime-lib 
        --enable-checking=release

make -C $(GCC_OBJDIR) all-gcc

make -C $(GCC_OBJDIR) install-gcc



The c++ (and not c) compiler produced segmentation fault on very small source 
only when I use default option -O0

cmd : pgcc test.cpp -S

src :
extern void bar(int *);
void toto () {
  int tmp;
  bar (&tmp);
}

Looking at the dumps I noticed in test.cpp.152r.rtl_eh that a bad RTL SET is 
generated inside a bunch of rtl dealing with exception.

(insn 19 20 12 5 (set (reg:SI 131)
        (reg:SI -1)) -1                                        <<<--- REG -1 is 
invalid
     (nil))

(insn 12 19 13 5 (set (reg/f:SI 130 [ D.1841 ])
        (reg:SI 131)) -1
     (nil))

(insn 13 12 14 5 (set (reg:SI 4 $C4)
        (reg/f:SI 130 [ D.1841 ])) -1
     (nil))

(call_insn 14 13 15 5 (parallel [
            (call (mem:SI (symbol_ref:SI ("_Unwind_Resume") [flags 0x41]  
<function_decl 0x2b1caf9cfd00 __builtin_unwind_resume>) [0 
__builtin_unwind_resume S4 A32])
                (const_int 0 [0]))
            (clobber (reg:SI 1 $C1))
        ]) -1


I don't want need/want exceptions on my port and it seems that -00 always 
produce some extra code to handle exception in c++. That was not the normal 
behaviour of gcc4.5.2. 

I don't see any good configure option but I tried --enable-sjlj-exceptions to 
see the result. The segmentation fault disappears but extra code to call 
_Unwind_SjLj_Register is produced (with a save of all registers in function 
prologue ...), that's not what I wanted.  Configure using 
--disable-sjlj-exceptions produce the same segmentation described above.

I also tried to compile my test with -fno-exceptions. It produces the result I 
expected with no error and no extra code equivalent to the gcc4.5.2 without 
options.

Something new in gcc4.7.3 has to be configured to disable exceptions by default 
?


I noticed a change of behaviour on -fomit-frame-pointer between 4.5.2 & 4.7.3 
(described in my previous post). gcc4.5.2 behaviour was exactly what I wanted 
(fomit-frame-pointer & fno-exceptions by default) how to obtain that with 4.7.3 
 ?

Regards,

Selim


Reply via email to