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

            Bug ID: 88974
           Summary: [9 Regression] ICE: Segmentation fault (in
                    linemap_resolve_location)
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Keywords: error-recovery, ice-on-invalid-code
          Severity: normal
          Priority: P3
         Component: preprocessor
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---

gcc-9.0.0-alpha20190120 snapshot (r268107) ICEs when compiling the following
snippet derived from test/Frontend/rewrite-includes-invalid-hasinclude.c from
the clang 7.0.1 testsuite:

#if __has_include__ (<bar.h)
#endif

% MALLOC_PERTURB_=1 MALLOC_CHECK_=3 gcc-9.0.0-alpha20190120 -c ruc8wen6.c
ruc8wen6.c:1:29: error: missing terminating > character
    1 | #if __has_include__ (<bar.h)
      |                             ^

ruc8wen6.c:1: internal compiler error: Segmentation fault
    1 | #if __has_include__ (<bar.h)
      | 
0xd701df crash_signal
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/toplev.c:326
0x17202bb linemap_resolve_location(line_maps*, unsigned int,
location_resolution_kind, line_map_ordinary const**)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/line-map.c:1540
0x16e6c21 diagnostic_report_current_module(diagnostic_context*, unsigned int)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/diagnostic.c:598
0xdcd3a1 diagnostic_report_current_function(diagnostic_context*,
diagnostic_info*)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/tree-diagnostic.c:39
0xdcd400 default_tree_diagnostic_starter
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/tree-diagnostic.c:48
0x16e5697 diagnostic_report_diagnostic(diagnostic_context*, diagnostic_info*)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/diagnostic.c:1016
0x87a3ea c_cpp_diagnostic(cpp_reader*, cpp_diagnostic_level,
cpp_warning_reason, rich_location*, char const*, __va_list_tag (*) [1])
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/c-family/c-common.c:6318
0x17114fc cpp_diagnostic
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/errors.c:75
0x17116ee cpp_error(cpp_reader*, cpp_diagnostic_level, char const*, ...)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/errors.c:89
0x1712955 parse_has_include
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/expr.c:2242
0x1716058 eval_token
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/expr.c:1159
0x1716058 _cpp_parse_expr
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/expr.c:1328
0x170dd61 do_if
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/directives.c:2008
0x170f5b0 _cpp_handle_directive
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/directives.c:543
0x171e664 _cpp_lex_token
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/lex.c:2609
0x17264c7 cpp_get_token_1
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/libcpp/macro.c:2703
0x88f241 c_lex_with_flags(tree_node**, unsigned int*, unsigned char*, int)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/c-family/c-lex.c:405
0x8189c0 c_lex_one_token
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/c/c-parser.c:249
0x844e6d c_parser_peek_token(c_parser*)
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/c/c-parser.c:436
0x844e6d c_parse_file()
       
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190120/work/gcc-9-20190120/gcc/c/c-parser.c:19828

I suspect the issue is GC-related but I've failed to find a way to expose it w/
Valgrind or using small ggc-min-* parameters, so glibc-based environment is
necessary to reproduce it for now.

Reply via email to