]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR preprocessor/69126: avoid comparing ad-hoc and non-ad-hoc locations
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 23 Feb 2016 17:44:28 +0000 (17:44 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 23 Feb 2016 17:44:28 +0000 (17:44 +0000)
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

gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/pr69126-2-long.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr69126-2-short.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr69543-1.c
libcpp/ChangeLog
libcpp/line-map.c

index 96007ce3217597d367d510352826def92f95b742..d6aa9fa82d2f06960f4b9f055aa68374fa9e42ae 100644 (file)
@@ -1,3 +1,11 @@
+2016-02-23  David Malcolm  <dmalcolm@redhat.com>
+
+       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.
+
 2016-02-23  David Malcolm  <dmalcolm@redhat.com>
 
        PR preprocessor/69126
diff --git a/gcc/testsuite/c-c++-common/pr69126-2-long.c b/gcc/testsuite/c-c++-common/pr69126-2-long.c
new file mode 100644 (file)
index 0000000..f4f1964
--- /dev/null
@@ -0,0 +1,11 @@
+/* { 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();
+}
diff --git a/gcc/testsuite/c-c++-common/pr69126-2-short.c b/gcc/testsuite/c-c++-common/pr69126-2-short.c
new file mode 100644 (file)
index 0000000..aee43e5
--- /dev/null
@@ -0,0 +1,11 @@
+/* { 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();
+}
index bfb52705d764b670726d535f7da5751ceab2b861..bbf4759368b60c04ce11feea06d53bf1598d3a58 100644 (file)
@@ -3,8 +3,6 @@
 /* Verify disabling a warning, where the _Pragma is within
    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   \
     _Pragma ("GCC diagnostic push") \
     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
@@ -16,6 +14,6 @@ void test (char yylval)
 {
   char *yyvsp;
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail { c++ } } } */
+  *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
index a5cef17df458a4735ee1c6d959ebac4be8ab83fc..1dfcf8dbb72109bd6148075658aecdd4e8b0bf68 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        PR preprocessor/69664
index e9175dfa307017c81307ec46b365878677fc2e21..c05a001dcc429a33d930b596088c9875e3d3796c 100644 (file)
@@ -1328,9 +1328,9 @@ linemap_compare_locations (struct line_maps *set,
   source_location l0 = pre, l1 = post;
 
   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))
-    l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
+    l1 = get_location_from_adhoc_loc (set, l1);
 
   if (l0 == l1)
     return 0;
@@ -1365,6 +1365,11 @@ linemap_compare_locations (struct line_maps *set,
       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;
 }