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

Reply via email to