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.