https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88257
--- Comment #6 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Author: dmalcolm Date: Fri Nov 30 15:57:37 2018 New Revision: 266671 URL: https://gcc.gnu.org/viewcvs?rev=266671&root=gcc&view=rev Log: Fix ICE in substring locations from macros in header files (PR preprocessor/88257) PR preprocessor/88257 reports an ICE on gcc.dg/format/pr78304.c when compiled using g++: void test (const char *msg) { printf ("size: %" PRIu32 "\n", msg); } due to mismatching files (and line maps) between linemap_resolve_location and expand_location_to_spelling_point when PRIu32 is defined in a system header. The root cause is that expand_location_to_spelling_point stops unwinding locations when it reaches a system header, whereas linemap_resolve_location can resolve into a system header, which can lead to locations within get_substring_ranges_for_loc getting out of sync, and using the wrong line map. This patch fixes the issue by checking that the files are the same. gcc/ChangeLog: PR preprocessor/88257 * input.c (get_substring_ranges_for_loc): Fix indentation. Bulletproof against getting a different files back from linemap_resolve_location and expand_location_to_spelling_point. gcc/testsuite/ChangeLog: PR preprocessor/88257 * c-c++-common/Wformat-pr88257.c: New test. * c-c++-common/Wformat-pr88257.h: New test header. * c-c++-common/empty.h: New test header. Added: trunk/gcc/testsuite/c-c++-common/Wformat-pr88257.c trunk/gcc/testsuite/c-c++-common/Wformat-pr88257.h trunk/gcc/testsuite/c-c++-common/empty.h Modified: trunk/gcc/ChangeLog trunk/gcc/input.c trunk/gcc/testsuite/ChangeLog