gcc/libcpp
David Malcolm 1f5c80883e libcpp: fix ICE comparing macro locations without column info [PR96391]
PR preprocessor/96391 describes an ICE in the C++ frontend on:

  #define CONST const
  #define VOID void
  typedef CONST VOID *PCVOID;

where the typedef line occurs after enough code has been compiled
that location_t values are beyond LINE_MAP_MAX_LOCATION_WITH_COLS,
and hence no column numbers are available.

The issue occurs in linemap_compare_locations when comparing the
locations of the "const" and "void" tokens.
Upon resolving the LRK_MACRO_EXPANSION_POINT, both have the same
location_t, the line of the "typedef" (with no column), and so
the l0 == l1 clause is triggered, but they are not from the
same macro expansion, leading first_map_in_common to return NULL
and triggering the "abort" condition.

This patch fixes the issue by checking when the two macro expansion
point location_t values are equal that the value
<= LINE_MAP_MAX_LOCATION_WITH_COLS and thus has column information,
fixing the issue.

gcc/testsuite/ChangeLog:
	PR preprocessor/96391
	* g++.dg/plugin/location-overflow-test-pr96391.c: New test.
	* g++.dg/plugin/plugin.exp (plugin_test_list): Add it,
	using the location_overflow_plugin.c from gcc.dg/plugin.

libcpp/ChangeLog:
	PR preprocessor/96391
	* line-map.c (linemap_compare_locations): Require that
	the location be <= LINE_MAP_MAX_LOCATION_WITH_COLS when
	treating locations as coming from the same macro expansion.
2021-02-10 14:33:10 -05:00
..
include c++: Implement C++23 P0330 - Literal Suffixes for ptrdiff_t and size_t. 2021-02-03 12:12:31 -05:00
po Daily bump. 2021-02-06 00:16:39 +00:00
aclocal.m4 libcpp: Enable Intel CET on Intel CET enabled host for jit 2020-05-12 09:17:45 -07:00
ChangeLog Daily bump. 2021-02-05 00:16:23 +00:00
ChangeLog.jit
charset.c Update copyright years. 2021-01-04 10:26:59 +01:00
config.in
configure Require CET support only for the final GCC build 2020-07-30 05:36:24 -07:00
configure.ac libcpp, libdecnumber: configure and substitute AR 2020-05-23 21:59:02 +00:00
directives.c Update copyright years. 2021-01-04 10:26:59 +01:00
errors.c Update copyright years. 2021-01-04 10:26:59 +01:00
expr.c c++, libcpp: Use make_signed_t<size_t> in the 1z diagnostics 2021-02-04 18:30:45 +01:00
files.c Update copyright years. 2021-01-04 10:26:59 +01:00
generated_cpp_wcwidth.h libcpp: Update cpp_wcwidth() to Unicode 13.0.0 2020-11-07 09:36:43 -05:00
identifiers.c Update copyright years. 2021-01-04 10:26:59 +01:00
init.c c++: Implement C++23 P0330 - Literal Suffixes for ptrdiff_t and size_t. 2021-02-03 12:12:31 -05:00
internal.h Update copyright years. 2021-01-04 10:26:59 +01:00
lex.c libcpp: Fix up -fdirectives-only preprocessing [PR98882] 2021-02-03 23:18:05 +01:00
line-map.c libcpp: fix ICE comparing macro locations without column info [PR96391] 2021-02-10 14:33:10 -05:00
location-example.txt
macro.c Update copyright years. 2021-01-04 10:26:59 +01:00
Makefile.in Update copyright years. 2021-01-04 10:26:59 +01:00
makeucnid.c Update copyright years. 2021-01-04 10:26:59 +01:00
mkdeps.c preprocessor: Make quoting : [PR 95253] 2021-01-15 08:56:20 -08:00
pch.c Update copyright years. 2021-01-04 10:26:59 +01:00
symtab.c Update copyright years. 2021-01-04 10:26:59 +01:00
system.h Update copyright years. 2021-01-04 10:26:59 +01:00
traditional.c Update copyright years. 2021-01-04 10:26:59 +01:00
ucnid.h Update copyright years. 2021-01-04 10:26:59 +01:00
ucnid.tab Update copyright years. 2021-01-04 10:26:59 +01:00