aboutsummaryrefslogtreecommitdiff
path: root/gcc/multiple_target.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2018-10-29 23:58:34 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2018-10-29 23:58:34 +0000
commit3d0a5393466ef5d2755dd0dc8e8c10750e9bb4b9 (patch)
treefe13868d9238eb20dea3293cffca6f47e0d55a92 /gcc/multiple_target.c
parent7e2de6df10b532be4e66025e318f68a0ebf2c408 (diff)
downloadgcc-3d0a5393466ef5d2755dd0dc8e8c10750e9bb4b9.zip
gcc-3d0a5393466ef5d2755dd0dc8e8c10750e9bb4b9.tar.gz
gcc-3d0a5393466ef5d2755dd0dc8e8c10750e9bb4b9.tar.bz2
Fix ICE in get_substring_ranges_for_loc on __FILE__ (PR c++/87721)
PR c++/87721 reports a crash in get_substring_ranges_for_loc introduced by r265271, my fix for PR 87562. The new issue occurs when attempting to get a location with a string literal inside a macro in which the first token is __FILE__ (formed via concatenation). Attempting to get the spelling location of __FILE__ fails, leading to NULL for start_ord_map and final_ord_map, and thus a NULL pointer dereference. Given that our "on-demand" substring locations approach reparses the string literals, there isn't a good way to access the locations inside such string literals: attempting to reparse __FILE__ fails with a "missing open quote". This patch applies the easy fix by gracefully rejecting the case where the spelling locations for the start or finish give us NULL maps. gcc/ChangeLog: PR c++/87721 * input.c (get_substring_ranges_for_loc): Detect if linemap_resolve_location gives us a NULL map, and reject this case. gcc/testsuite/ChangeLog: PR c++/87721 * c-c++-common/substring-location-PR-87721.c: New test. * gcc.dg/plugin/diagnostic-test-string-literals-1.c: Add test for PR 87721. * gcc.dg/plugin/diagnostic_plugin_test_string_literals.c (test_string_literals): Fold the index arguments before checking for INTEGER_CST. From-SVN: r265611
Diffstat (limited to 'gcc/multiple_target.c')
0 files changed, 0 insertions, 0 deletions