https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81219
Bug ID: 81219 Summary: [8 regression] SEGV in linemap_location_from_macro_expansion_p Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: bootstrap Assignee: unassigned at gcc dot gnu.org Reporter: ro at gcc dot gnu.org CC: mpolacek at gcc dot gnu.org Target Milestone: --- Target: i386-pc-solaris2.12, i686-pc-linux-gnu, sparc-sun-solaris2.12 Between 20170625 (r249632) and 20170626 (r249656), bootstrap broke on several targets. E.g on i686-pc-linux-gnu and sparc-sun-solaris2.12, building stage2 libstdc++: In file included from /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/bits/char_traits.h:39:0, from /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/string:40, from /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/bits/locale_classes.h:40, from /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/bits/ios_base.h:41, from /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/streambuf:41, from /vol/gcc/src/hg/trunk/local/libstdc++-v3/src/c++98/streambuf.cc:29: /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/bits/stl_algobase.h: In static member function âstatic bool std::__equal<_BoolType>::equal(_II1, _II1, _II2)â: /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/bits/stl_algobase.h:801:20: internal compiler error: Segmentation Fault return false; ^ 0x15201ff crash_signal /vol/gcc/src/hg/trunk/local/gcc/toplev.c:338 0x20c3ea0 linemap_location_from_macro_expansion_p(line_maps const*, unsigned int) /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1254 0x20c3e6b linemap_location_from_macro_expansion_p(line_maps const*, unsigned int) /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1252 cc1plus -quiet -nostdinc++ -v -I /vol/gcc/src/hg/trunk/local/libstdc++-v3/../libgcc -I /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include/sparc-sun-solaris2.12 -I /var/gcc/regression/trunk/12-gcc/build.bad/sparc-sun-solaris2.12/libstdc++-v3/include -I /vol/gcc/src/hg/trunk/local/libstdc++-v3/libsupc++ -iprefix /var/gcc/regression/trunk/12-gcc/build.bad/gcc/../lib/gcc/sparc-sun-solaris2.12/8.0.0/ -isystem /var/gcc/regression/trunk/12-gcc/build.bad/./gcc/include -isystem /var/gcc/regression/trunk/12-gcc/build.bad/./gcc/include-fixed -D__sparcv8 -D _GLIBCXX_SHARED -D PIC -D _GLIBCXX_SHARED -isystem /vol/gcc/sparc-sun-solaris2.12/include -isystem /vol/gcc/sparc-sun-solaris2.12/sys-include /vol/gcc/src/hg/trunk/local/libstdc++-v3/src/c++98/streambuf.cc -quiet -dumpbase streambuf.cc -mcpu=v9 -auxbase-strip streambuf.o -g -O2 -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -std=gnu++98 -version -fno-implicit-templates -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -frandom-seed=streambuf.lo -fPIC -o streambuf.s Thread 2 received signal SIGSEGV, Segmentation fault. [Switching to Thread 1 (LWP 1)] 0x020c3ea0 in linemap_location_from_macro_expansion_p (set=0xfbbf6000, location=4209776568) at /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1254 1254 & MAX_SOURCE_LOCATION].locus; (gdb) where #0 0x020c3ea0 in linemap_location_from_macro_expansion_p (set=0xfbbf6000, location=4209776568) at /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1254 #1 0x00cb2e78 in warn_for_multistatement_macros (body_loc=4209776568, next_loc=72017509, guard_loc=72005218, keyword=RID_FOR) at /vol/gcc/src/hg/trunk/local/gcc/c-family/c-warn.c:2431 #2 0x009e72c4 in cp_parser_already_scoped_statement (parser=0xfac27e98, if_p=0x0, guard_tinfo=...) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12452 #3 0x009e6348 in cp_parser_iteration_statement (parser=0xfac27e98, if_p=0x0, ivdep=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12113 #4 0x009e1b34 in cp_parser_statement (parser=0xfac27e98, in_statement_expr=0x0, in_compound=true, if_p=0x0, chain=0x0, loc_after_labels=0x0) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:10696 #5 0x009e3264 in cp_parser_statement_seq_opt (parser=0xfac27e98, in_statement_expr=0x0) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:11165 #6 0x009e30f0 in cp_parser_compound_statement (parser=0xfac27e98, in_statement_expr=0x0, bcs_flags=0, function_body=true) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:11119 #7 0x009fed84 in cp_parser_function_body (parser=0xfac27e98, in_function_try_block=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:21573 #8 0x009ff048 in cp_parser_ctor_initializer_opt_and_function_body ( parser=0xfac27e98, in_function_try_block=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:21609 #9 0x00a0bc24 in cp_parser_function_definition_after_declarator ( parser=0xfac27e98, inline_p=true) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26417 #10 0x00a0f424 in cp_parser_late_parsing_for_member (parser=0xfac27e98, member_function=0xfaeb6618) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:27299 #11 0x00a01c90 in cp_parser_class_specifier_1 (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:22463 #12 0x00a01dbc in cp_parser_class_specifier (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:22489 #13 0x009f11f0 in cp_parser_type_specifier (parser=0xfac27e98, flags=1, decl_specs=0xffbfda38, is_declaration=true, declares_class_or_enum=0xffbfd9a8, is_cv_qualifier=0xffbfd9a7) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:16574 #14 0x009e9e80 in cp_parser_decl_specifier_seq (parser=0xfac27e98, flags=1, decl_specs=0xffbfda38, declares_class_or_enum=0xffbfdab4) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:13482 #15 0x00a0d184 in cp_parser_single_declaration (parser=0xfac27e98, checks=0x0, member_p=false, explicit_specialization_p=false, friend_p=0xffbfdb23) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26787 #16 0x00a0be50 in cp_parser_template_declaration_after_parameters ( parser=0xfac27e98, parameter_list=0xfaec1338, member_p=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26482 #17 0x00a0cf88 in cp_parser_explicit_template_declaration (parser=0xfac27e98, member_p=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26714 #18 0x00a0d014 in cp_parser_template_declaration_after_export ( parser=0xfac27e98, member_p=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26732 #19 0x009ecfb0 in cp_parser_template_declaration (parser=0xfac27e98, member_p=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:14823 #20 0x009e78b0 in cp_parser_declaration (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12597 #21 0x009e7534 in cp_parser_declaration_seq_opt (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12524 #22 0x009f5f00 in cp_parser_namespace_body (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:18405 #23 0x009f5e78 in cp_parser_namespace_definition (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:18384 #24 0x009e7a8c in cp_parser_declaration (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12628 #25 0x009e7534 in cp_parser_declaration_seq_opt (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12524 #26 0x009d0024 in cp_parser_translation_unit (parser=0xfac27e98) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:4378 #27 0x00a3ce5c in c_parse_file () at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:38599 #28 0x00c62730 in c_common_parse_file () at /vol/gcc/src/hg/trunk/local/gcc/c-family/c-opts.c:1104 #29 0x015208c8 in compile_file () at /vol/gcc/src/hg/trunk/local/gcc/toplev.c:468 #30 0x01524804 in do_compile () at /vol/gcc/src/hg/trunk/local/gcc/toplev.c:2021 #31 0x01524c60 in toplev::main (this=0xffbfe286, argc=53, argv=0xffbfe2ec) at /vol/gcc/src/hg/trunk/local/gcc/toplev.c:2155 #32 0x020400c8 in main (argc=53, argv=0xffbfe2ec) at /vol/gcc/src/hg/trunk/local/gcc/main.c:39 (gdb) p set->location_adhoc_data_map.data[location& MAX_SOURCE_LOCATION].locus Cannot access memory at address 0xaa7f1b80 or i386-pc-solaris2.12: cc1plus -quiet -nostdinc++ -v -I /var/gcc/regression/trunk/12-gcc/build/prev-i386-pc-solaris2.12/libstdc++-v3/include/i386-pc-solaris2.12 -I /var/gcc/regression/trunk/12-gcc/build/prev-i386-pc-solaris2.12/libstdc++-v3/include -I /vol/gcc/src/hg/trunk/local/libstdc++-v3/libsupc++ -I . -I . -I /vol/gcc/src/hg/trunk/local/gcc -I /vol/gcc/src/hg/trunk/local/gcc/. -I /vol/gcc/src/hg/trunk/local/gcc/../include -I /vol/gcc/src/hg/trunk/local/gcc/../libcpp/include -I /vol/gcc/include -I /vol/gcc/include -I /vol/gcc/include -I /vol/gcc/src/hg/trunk/local/gcc/../libdecnumber -I /vol/gcc/src/hg/trunk/local/gcc/../libdecnumber/dpd -I ../libdecnumber -I /vol/gcc/src/hg/trunk/local/gcc/../libbacktrace -I /vol/gcc/include -iprefix /var/gcc/regression/trunk/12-gcc/build/prev-gcc/../lib/gcc/i386-pc-solaris2.12/8.0.0/ -isystem /var/gcc/regression/trunk/12-gcc/build/./prev-gcc/include -isystem /var/gcc/regression/trunk/12-gcc/build/./prev-gcc/include-fixed -MMD cgraphbuild.d -MF ./.deps/cgraphbuild.TPo -MP -MT cgraphbuild.o -D IN_GCC -D HAVE_CONFIG_H /vol/gcc/src/hg/trunk/local/gcc/cgraphbuild.c -quiet -dumpbase cgraphbuild.c -mtune=generic -march=pentium4 -auxbase-strip cgraphbuild.o -g -O2 -Wextra -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wsuggest-attribute=format -Woverloaded-virtual -Wpedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -version -fno-PIE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -fno-common -o cgraphbuild.s Thread 2 hit Breakpoint 1, fancy_abort ( ---Type <return> to continue, or q <return> to quit--- file=0x888e398 "/vol/gcc/src/hg/trunk/local/libcpp/line-map.c", line=1013, function=0x888e804 <linemap_macro_map_lookup(line_maps*, unsigned int)::__FUNCTION__> "linemap_macro_map_lookup") at /vol/gcc/src/hg/trunk/local/gcc/diagnostic.c:1475 1475 { (gdb) where #0 fancy_abort ( file=0x888e398 "/vol/gcc/src/hg/trunk/local/libcpp/line-map.c", line=1013, function=0x888e804 <linemap_macro_map_lookup(line_maps*, unsigned int)::__FUNCTION__> "linemap_macro_map_lookup") at /vol/gcc/src/hg/trunk/local/gcc/diagnostic.c:1475 #1 0x098d1717 in linemap_macro_map_lookup (line=725574588, set=<optimized out>) at /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1013 #2 linemap_lookup (set=0xfaffa000, line=<optimized out>) at /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:947 #3 0x098d24ea in linemap_location_in_system_header_p (set=0xfaffa000, location=725574588) at /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1218 #4 0x08b8305b in warn_for_multistatement_macros (body_loc=725574588, next_loc=2147099523, guard_loc=596680834, keyword=RID_FOR) at /vol/gcc/src/hg/trunk/local/gcc/c-family/c-warn.c:2436 #5 0x08a1dbf2 in cp_parser_already_scoped_statement ( parser=parser@entry=0xf8b6cb58, if_p=if_p@entry=0x0, guard_tinfo=...) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12450 #6 0x08a1ddd7 in cp_parser_iteration_statement ( parser=parser@entry=0xf8b6cb58, if_p=if_p@entry=0x0, ivdep=ivdep@entry=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12113 #7 0x089f7dbd in cp_parser_statement (parser=parser@entry=0xf8b6cb58, in_statement_expr=in_statement_expr@entry=0x0, in_compound=<optimized out>, in_compound@entry=true, if_p=0x0, chain=0x0, loc_after_labels=0x0) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:10696 #8 0x089f8f7c in cp_parser_statement_seq_opt (parser=parser@entry=0xf8b6cb58, in_statement_expr=in_statement_expr@entry=0x0) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:11165 #9 0x089f9053 in cp_parser_compound_statement ( parser=parser@entry=0xf8b6cb58, in_statement_expr=in_statement_expr@entry=0x0, bcs_flags=bcs_flags@entry=0, function_body=true) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:11119 #10 0x08a10f0b in cp_parser_function_body (in_function_try_block=false, parser=0xf8b6cb58) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:21571 #11 cp_parser_ctor_initializer_opt_and_function_body ( parser=parser@entry=0xf8b6cb58, in_function_try_block=in_function_try_block@entry=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:21609 #12 0x08a13842 in cp_parser_function_definition_after_declarator ( parser=parser@entry=0xf8b6cb58, inline_p=inline_p@entry=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26416 #13 0x08a1448d in cp_parser_function_definition_from_specifiers_and_declarator (declarator=<optimized out>, attributes=0x0, decl_specifiers=0xfeffcd30, parser=0xf8b6cb58) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:26328 #14 cp_parser_init_declarator (parser=parser@entry=0xf8b6cb58, decl_specifiers=decl_specifiers@entry=0xfeffcd30, checks=checks@entry=0x0, function_definition_allowed_p=true, member_p=false, declares_class_or_enum=0, function_definition_p=0xfeffccd4, maybe_range_for_decl=0x0, init_loc=0xfeffccc8, auto_result=0xfeffcda8) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:19293 #15 0x08a1b543 in cp_parser_simple_declaration ( parser=parser@entry=0xf8b6cb58, function_definition_allowed_p=<optimized out>, maybe_range_for_decl=maybe_range_for_decl@entry=0x0) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12925 #16 0x08a1c45f in cp_parser_block_declaration (parser=parser@entry=0xf8b6cb58, statement_p=statement_p@entry=false) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12750 #17 0x08a21ef5 in cp_parser_declaration (parser=parser@entry=0xf8b6cb58) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12648 #18 0x08a22336 in cp_parser_declaration_seq_opt ( parser=parser@entry=0xf8b6cb58) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:12524 #19 0x08a22611 in cp_parser_translation_unit (parser=0xf8b6cb58) at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:4378 #20 c_parse_file () at /vol/gcc/src/hg/trunk/local/gcc/cp/parser.c:38599 #21 0x08b54c4a in c_common_parse_file () at /vol/gcc/src/hg/trunk/local/gcc/c-family/c-opts.c:1104 #22 0x0901f1dd in compile_file () at /vol/gcc/src/hg/trunk/local/gcc/toplev.c:468 #23 0x09021b2e in do_compile () at /vol/gcc/src/hg/trunk/local/gcc/toplev.c:2021 #24 toplev::main (this=0xfeffcffe, argc=<optimized out>, argv=<optimized out>) at /vol/gcc/src/hg/trunk/local/gcc/toplev.c:2155 #25 0x0988b461 in main (argc=85, argv=0xfeffd060) at /vol/gcc/src/hg/trunk/local/gcc/main.c:39 (gdb) up #1 0x098d1717 in linemap_macro_map_lookup (line=725574588, set=<optimized out>) at /vol/gcc/src/hg/trunk/local/libcpp/line-map.c:1013 1013 linemap_assert (line >= LINEMAPS_MACRO_LOWEST_LOCATION (set)); (gdb) p line $1 = 725574588 It seems very likely that this commit is the culprit: PR c/80116 * c-common.h (warn_for_multistatement_macros): Declare. * c-warn.c: Include "c-family/c-indentation.h". (warn_for_multistatement_macros): New function. * c.opt (Wmultistatement-macros): New option. * c-indentation.c (guard_tinfo_to_string): No longer static. Change the parameter type to "enum rid". Handle RID_SWITCH. * c-indentation.h (guard_tinfo_to_string): Declare. * c-parser.c (c_parser_if_body): Set the location of the body of the conditional after parsing all the labels. Call warn_for_multistatement_macros. (c_parser_else_body): Likewise. (c_parser_switch_statement): Likewise. (c_parser_while_statement): Likewise. (c_parser_for_statement): Likewise. (c_parser_statement): Add a default argument. Save the location after labels have been parsed. (c_parser_c99_block_statement): Likewise. * parser.c (cp_parser_statement): Add a default argument. Save the location of the expression-statement after labels have been parsed. (cp_parser_implicitly_scoped_statement): Set the location of the body of the conditional after parsing all the labels. Call warn_for_multistatement_macros. (cp_parser_already_scoped_statement): Likewise. * doc/invoke.texi: Document -Wmultistatement-macros. * c-c++-common/Wmultistatement-macros-1.c: New test. * c-c++-common/Wmultistatement-macros-2.c: New test. * c-c++-common/Wmultistatement-macros-3.c: New test. * c-c++-common/Wmultistatement-macros-4.c: New test. * c-c++-common/Wmultistatement-macros-5.c: New test. * c-c++-common/Wmultistatement-macros-6.c: New test. * c-c++-common/Wmultistatement-macros-7.c: New test. * c-c++-common/Wmultistatement-macros-8.c: New test. * c-c++-common/Wmultistatement-macros-9.c: New test. * c-c++-common/Wmultistatement-macros-10.c: New test. * c-c++-common/Wmultistatement-macros-11.c: New test. In fact, I *can* bootstrap successfully at r249641. Rainer