Commit 196440f8 by David Malcolm Committed by David Malcolm

PR preprocessor/69126: avoid comparing ad-hoc and non-ad-hoc locations

gcc/testsuite/ChangeLog:
	PR preprocessor/69126
	PR preprocessor/69543
	* c-c++-common/pr69126-2-long.c: New test.
	* c-c++-common/pr69126-2-short.c: New test.
	* c-c++-common/pr69543-1.c: Remove xfail.

libcpp/ChangeLog:
	PR preprocessor/69126
	PR preprocessor/69543
	* line-map.c (linemap_compare_locations): At the function top,
	replace inlined bodies of get_location_from_adhoc_loc with calls
	to get_location_from_adhoc_loc.  Add a pair of calls to
	get_location_from_adhoc_loc at the bottom of the function, to
	avoid meaningless comparisons of ad-hoc and non-ad-hoc locations.

From-SVN: r233638
parent 1d3121af
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
PR preprocessor/69126 PR preprocessor/69126
PR preprocessor/69543 PR preprocessor/69543
* c-c++-common/pr69126-2-long.c: New test.
* c-c++-common/pr69126-2-short.c: New test.
* c-c++-common/pr69543-1.c: Remove xfail.
2016-02-23 David Malcolm <dmalcolm@redhat.com>
PR preprocessor/69126
PR preprocessor/69543
PR preprocessor/69558 PR preprocessor/69558
* c-c++-common/pr69126.c (MACRO_1, test_1): New. * c-c++-common/pr69126.c (MACRO_1, test_1): New.
(f): Rename to... (f): Rename to...
......
/* { dg-options "-Wdeprecated-declarations" } */
/* The macro's name is >= 32 characters long, and hence its location
requires an ad-hoc location. */
#define IGNORE_WHERE_MACRO_IS_LONGER_THAN_31_CHARS _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
__attribute__((deprecated)) void f();
int main() {
IGNORE_WHERE_MACRO_IS_LONGER_THAN_31_CHARS
f();
}
/* { dg-options "-Wdeprecated-declarations" } */
/* IGNORE_SHORT_MACRO is < 32 characters long, and hence its location
can be stored without needing an ad-hoc location. */
#define IGNORE_SHORT_MACRO _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
__attribute__((deprecated)) void f();
int main() {
IGNORE_SHORT_MACRO
f();
}
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
/* Verify disabling a warning, where the _Pragma is within /* Verify disabling a warning, where the _Pragma is within
a macro, but the affected code is *not* in a macro. */ a macro, but the affected code is *not* in a macro. */
/* TODO: XFAIL: why does g++ still emit a warning here? (works for C). */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
...@@ -16,6 +14,6 @@ void test (char yylval) ...@@ -16,6 +14,6 @@ void test (char yylval)
{ {
char *yyvsp; char *yyvsp;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail { c++ } } } */ *++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END YY_IGNORE_MAYBE_UNINITIALIZED_END
} }
2016-02-23 David Malcolm <dmalcolm@redhat.com>
PR preprocessor/69126
PR preprocessor/69543
* line-map.c (linemap_compare_locations): At the function top,
replace inlined bodies of get_location_from_adhoc_loc with calls
to get_location_from_adhoc_loc. Add a pair of calls to
get_location_from_adhoc_loc at the bottom of the function, to
avoid meaningless comparisons of ad-hoc and non-ad-hoc locations.
2016-02-08 David Malcolm <dmalcolm@redhat.com> 2016-02-08 David Malcolm <dmalcolm@redhat.com>
PR preprocessor/69664 PR preprocessor/69664
......
...@@ -1328,9 +1328,9 @@ linemap_compare_locations (struct line_maps *set, ...@@ -1328,9 +1328,9 @@ linemap_compare_locations (struct line_maps *set,
source_location l0 = pre, l1 = post; source_location l0 = pre, l1 = post;
if (IS_ADHOC_LOC (l0)) if (IS_ADHOC_LOC (l0))
l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus; l0 = get_location_from_adhoc_loc (set, l0);
if (IS_ADHOC_LOC (l1)) if (IS_ADHOC_LOC (l1))
l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus; l1 = get_location_from_adhoc_loc (set, l1);
if (l0 == l1) if (l0 == l1)
return 0; return 0;
...@@ -1365,6 +1365,11 @@ linemap_compare_locations (struct line_maps *set, ...@@ -1365,6 +1365,11 @@ linemap_compare_locations (struct line_maps *set,
return i1 - i0; return i1 - i0;
} }
if (IS_ADHOC_LOC (l0))
l0 = get_location_from_adhoc_loc (set, l0);
if (IS_ADHOC_LOC (l1))
l1 = get_location_from_adhoc_loc (set, l1);
return l1 - l0; return l1 - l0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment