[Bug c++/122349] ICE: Segmentation fault

qingren2hxb at gmail dot com gcc-bugzilla@gcc.gnu.org
Tue Apr 14 13:50:46 GMT 2026


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122349

--- Comment #1 from Xingbang He <qingren2hxb at gmail dot com> ---
The segmentation fault is caused by an AddressSanitizer-detected
stack-buffer-underflow. it also reproduces on gcc trunk
(https://godbolt.org/z/5Ga8ET7os).


```
test.C: In function 'int main()':
test.C:13:14: error: initializer-string for 'char [268435456]' is too long
[-fpermissive]
   13 |     A a1 = { "", NULL, NULL };
      |              ^~
=================================================================
==48==ERROR: AddressSanitizer: stack-buffer-underflow on address 0x7f857c800000
at pc 0x7f857ef4942e bp 0x7ffcce9e0a30 sp 0x7ffcce9e01d8
READ of size 4026531841 at 0x7f857c800000 thread T0
    #0 0x7f857ef4942d in memcpy
../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc:115
    #1 0x2f94d71 in memcpy
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:29
    #2 0x2f94d71 in build_string(unsigned int, char const*)
/workspace/src/gcc/gcc/tree.cc:2630
    #3 0xf3f2f5 in digest_init_r /workspace/src/gcc/gcc/cp/typeck2.cc:1389
    #4 0xf43e3c in massage_init_elt /workspace/src/gcc/gcc/cp/typeck2.cc:1666
    #5 0xf41c76 in process_init_constructor_record
/workspace/src/gcc/gcc/cp/typeck2.cc:1909
    #6 0xf41c76 in process_init_constructor
/workspace/src/gcc/gcc/cp/typeck2.cc:2204
    #7 0xf41c76 in digest_init_r /workspace/src/gcc/gcc/cp/typeck2.cc:1494
    #8 0xf43f22 in digest_init_flags(tree_node*, tree_node*, int, int)
/workspace/src/gcc/gcc/cp/typeck2.cc:1540
    #9 0xf44044 in store_init_value(tree_node*, tree_node*, vec<tree_node*,
va_gc, vl_embed>**, int) /workspace/src/gcc/gcc/cp/typeck2.cc:946
    #10 0x9b9665 in check_initializer /workspace/src/gcc/gcc/cp/decl.cc:8661
    #11 0x9c644e in cp_finish_decl(tree_node*, tree_node*, bool, tree_node*,
int, cp_decomp*) /workspace/src/gcc/gcc/cp/decl.cc:9931
    #12 0xcdc8ea in cp_parser_init_declarator
/workspace/src/gcc/gcc/cp/parser.cc:26380
    #13 0xce4dd9 in cp_parser_simple_declaration
/workspace/src/gcc/gcc/cp/parser.cc:18081
    #14 0xce5fde in cp_parser_block_declaration
/workspace/src/gcc/gcc/cp/parser.cc:17900
    #15 0xce6174 in cp_parser_declaration_statement
/workspace/src/gcc/gcc/cp/parser.cc:16937
    #16 0xc54e1f in cp_parser_statement
/workspace/src/gcc/gcc/cp/parser.cc:14444
    #17 0xc55611 in cp_parser_statement_seq_opt
/workspace/src/gcc/gcc/cp/parser.cc:15014
    #18 0xc55d3e in cp_parser_compound_statement
/workspace/src/gcc/gcc/cp/parser.cc:14861
    #19 0xcd7e81 in cp_parser_function_body
/workspace/src/gcc/gcc/cp/parser.cc:28845
    #20 0xcd7e81 in cp_parser_ctor_initializer_opt_and_function_body
/workspace/src/gcc/gcc/cp/parser.cc:28896
    #21 0xcd999b in cp_parser_function_definition_after_declarator
/workspace/src/gcc/gcc/cp/parser.cc:36123
    #22 0xcdb1a9 in
cp_parser_function_definition_from_specifiers_and_declarator
/workspace/src/gcc/gcc/cp/parser.cc:36038
    #23 0xcdb1a9 in cp_parser_init_declarator
/workspace/src/gcc/gcc/cp/parser.cc:26044
    #24 0xce4dd9 in cp_parser_simple_declaration
/workspace/src/gcc/gcc/cp/parser.cc:18081
    #25 0xce5fde in cp_parser_block_declaration
/workspace/src/gcc/gcc/cp/parser.cc:17900
    #26 0xd1919b in cp_parser_declaration
/workspace/src/gcc/gcc/cp/parser.cc:17701
    #27 0xd176bb in cp_parser_toplevel_declaration
/workspace/src/gcc/gcc/cp/parser.cc:17722
    #28 0xd20a16 in cp_parser_translation_unit
/workspace/src/gcc/gcc/cp/parser.cc:5596
    #29 0xd20a16 in c_parse_file() /workspace/src/gcc/gcc/cp/parser.cc:57505
    #30 0x106c0cf in c_common_parse_file()
/workspace/src/gcc/gcc/c-family/c-opts.cc:1430
    #31 0x2440a75 in compile_file /workspace/src/gcc/gcc/toplev.cc:455
    #32 0x2449c7c in do_compile /workspace/src/gcc/gcc/toplev.cc:2225
    #33 0x2449c7c in toplev::main(int, char**)
/workspace/src/gcc/gcc/toplev.cc:2389
    #34 0x61847c9 in main /workspace/src/gcc/gcc/main.cc:39
    #35 0x7f857e8531c9  (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId:
8e9fd827446c24067541ac5390e6f527fb5947bb)
    #36 0x7f857e85328a in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId:
8e9fd827446c24067541ac5390e6f527fb5947bb)
    #37 0x7bd9f4 in _start
(/opt/gcc-san/6f5a97f5a3bf/libexec/gcc/x86_64-pc-linux-gnu/16.0.1/cc1plus+0x7bd9f4)
(BuildId: 537fd124eadf3a51928c35d6213ad701faaa244e)

Address 0x7f857c800000 is located in stack of thread T0 at offset 0 in frame
    #0 0x618472e in main /workspace/src/gcc/gcc/main.cc:35

  This frame has 1 object(s):
    [32, 34) 'toplev' (line 36) <== Memory access at offset 0 partially
underflows this variable
HINT: this may be a false positive if your program uses some custom stack
unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-underflow
../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc:115
in memcpy
Shadow bytes around the buggy address:
  0x7f857c7ffd80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7f857c7ffe00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7f857c7ffe80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7f857c7fff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7f857c7fff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x7f857c800000:[f1]f1 f1 f1 02 f3 f3 f3 f5 f5 f5 f5 f5 f5 f5 f5
  0x7f857c800080: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x7f857c800100: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x7f857c800180: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x7f857c800200: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x7f857c800280: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==48==ABORTING
```


More information about the Gcc-bugs mailing list