the following test-case:

#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
typedef __builtin_va_list __gnuc_va_list;
#endif

triggers the following ICE:

% /arm-none-linux-eabi/libexec/gcc/arm-none-linux-eabi/4.5.2/cc1 -v
./test-case.c -g -femit-struct-debug-baseonly -o ./test-case.o
ignoring nonexistent directory
"/arm-none-linux-eabi/arm-none-linux-eabi//sys-root/x-tools/arm-none-linux-eabi/arm-none-linux-eabi//sys-root/include"
ignoring duplicate directory
"/data/src/toolchain/build/x-tools/arm-none-linux-eabi/arm-none-linux-eabi//sys-root/usr/include"
#include "..." search starts here:
#include <...> search starts here:                            
 /arm-none-linux-eabi/lib/gcc/arm-none-linux-eabi/4.5.2/include     
 /arm-none-linux-eabi/lib/gcc/arm-none-linux-eabi/4.5.2/include-fixed           

/arm-none-linux-eabi/lib/gcc/arm-none-linux-eabi/4.5.2/../../../../arm-none-linux-abi/include
End of search list.
In file included from ./test-case.c:1:0:
/arm-none-linux-eabi/lib/gcc/arm-none-linux-eabi/4.5.2/include/stdarg.h:40:1:
internal compiler error: Segmentation fault
Please submit a full bug report,       
with preprocessed source if appropriate.           
See <http://gcc.gnu.org/bugs.html> for instructions.

The stack trace is the following:

Program received signal SIGSEGV, Segmentation fault.
0x08358433 in should_emit_struct_debug ()
Current language:  auto; currently asm
#0  0x08358433 in should_emit_struct_debug ()
#1  0x08201a26 in gen_struct_or_union_type_die ()
#2  0x08202338 in gen_type_die_with_usage ()
#3  0x08202390 in gen_type_die ()    
#4  0x081f3f0f in modified_type_die ()
#5  0x081fda5f in add_type_attribute ()
#6  0x08201ed4 in gen_typedef_die () 
#7  0x08202fe6 in gen_decl_die ()    
#8  0x08203916 in dwarf2out_decl ()  
#9  0x08203324 in dwarf2out_type_decl ()
#10 0x0835bd65 in rest_of_decl_compilation ()
#11 0x080d265c in finish_decl ()     
#12 0x08133677 in c_parser_declaration_or_fndef ()
#13 0x08133153 in c_parser_external_declaration ()
#14 0x08132e08 in c_parser_translation_unit ()
#15 0x08141d23 in c_parse_file ()    
#16 0x08126063 in c_common_parse_file ()
#17 0x08426ae9 in compile_file ()    
#18 0x08428973 in do_compile ()
#19 0x08428a38 in toplev_main ()
#20 0x0814a172 in main ()

dump of should_emit_struct_debug():
0x08358410 <should_emit_struct_debug+101>:      lea    -0x1c(%ebp),%edx
0x08358413 <should_emit_struct_debug+104>:      mov    %eax,0x4(%esp)
0x08358417 <should_emit_struct_debug+108>:      mov    %edx,(%esp)
0x0835841a <should_emit_struct_debug+111>:      call   0x8581c07
<expand_location>
0x0835841f <should_emit_struct_debug+116>:      sub    $0x4,%esp
0x08358422 <should_emit_struct_debug+119>:      movzbl -0x10(%ebp),%eax
0x08358426 <should_emit_struct_debug+123>:      test   %al,%al
0x08358428 <should_emit_struct_debug+125>:      je     0x8358430
<should_emit_struct_debug+133>
0x0835842a <should_emit_struct_debug+127>:      movb   $0x1,-0x31(%ebp)
0x0835842e <should_emit_struct_debug+131>:      jmp    0x8358461
<should_emit_struct_debug+182>
0x08358430 <should_emit_struct_debug+133>:      mov    -0xc(%ebp),%eax
0x08358433 <should_emit_struct_debug+136>:      mov    0x10(%eax),%eax
^^^ crash above ^^^
0x08358436 <should_emit_struct_debug+139>:      lea    -0x2c(%ebp),%edx
0x08358439 <should_emit_struct_debug+142>:      mov    %eax,0x4(%esp)
0x0835843d <should_emit_struct_debug+146>:      mov    %edx,(%esp)
0x08358440 <should_emit_struct_debug+149>:      call   0x8581c07
<expand_location>
0x08358445 <should_emit_struct_debug+154>:      sub    $0x4,%esp
0x08358448 <should_emit_struct_debug+157>:      mov    -0x2c(%ebp),%eax
0x0835844b <should_emit_struct_debug+160>:      mov    %eax,(%esp)
0x0835844e <should_emit_struct_debug+163>:      call   0x8358335
<matches_main_base>
0x08358453 <should_emit_struct_debug+168>:      test   %eax,%eax
0x08358455 <should_emit_struct_debug+170>:      je     0x835845d
<should_emit_struct_debug+178>
0x08358457 <should_emit_struct_debug+172>:      movb   $0x1,-0x31(%ebp)
0x0835845b <should_emit_struct_debug+176>:      jmp    0x8358461
<should_emit_struct_debug+182>
0x0835845d <should_emit_struct_debug+178>:      movb   $0x0,-0x31(%ebp)
0x08358461 <should_emit_struct_debug+182>:      movzbl -0x31(%ebp),%eax
0x08358465 <should_emit_struct_debug+186>:      leave
0x08358466 <should_emit_struct_debug+187>:      ret

and registers:
(gdb) info registers
eax            0x0      0
[...]

C source matching is left to the reader  :)

In case that help, this compiler was build with the latest GMP/MPC/MPFR.

Compilers from the same code tree, but built for PowerPC or Sparc target, run
fine.


-- 
           Summary: ICE with `-g -femit-struct-debug-baseonly'
           Product: gcc
           Version: 4.5.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: lacombar at gmail dot com
 GCC build triplet: i686-pc
  GCC host triplet: i686-pc
GCC target triplet: arm-none-linux-eabi


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45447

Reply via email to