Hi,

today I noticed quite a few additional places where we can exploit declarator->id_loc, the below are the first bits. Tested x86_64-linux.

Thanks, Paolo.

//////////////////////

/cp
2018-10-30  Paolo Carlini  <paolo.carl...@oracle.com>

        * decl.c (grokdeclarator): Use declarator->id_loc in diagnostic
        about flexible array members.

/testsuite
2018-10-30  Paolo Carlini  <paolo.carl...@oracle.com>

        * g++.dg/cpp1z/has-unique-obj-representations1.C: Test location too.
        * g++.dg/ext/flexarray-mangle-2.C: Likewise.
        * g++.dg/ext/flexarray-mangle.C: Likewise.
        * g++.dg/ext/flexarray-subst.C: Likewise.
        * g++.dg/ext/flexary10.C: Likewise.
        * g++.dg/ext/flexary11.C: Likewise.
        * g++.dg/ext/flexary14.C: Likewise.
        * g++.dg/ext/flexary16.C: Likewise.
        * g++.dg/ext/flexary26.C: Likewise.
        * g++.dg/ext/flexary27.C: Likewise.
        * g++.dg/ext/flexary7.C: Likewise.
        * g++.dg/ext/pr71290.C: Likewise.
Index: cp/decl.c
===================================================================
--- cp/decl.c   (revision 265616)
+++ cp/decl.c   (working copy)
@@ -12210,7 +12223,7 @@ grokdeclarator (const cp_declarator *declarator,
                  /* Do not warn on flexible array members in system
                     headers because glibc uses them.  */;
                else if (name)
-                 pedwarn (input_location, OPT_Wpedantic,
+                 pedwarn (declarator->id_loc, OPT_Wpedantic,
                           "ISO C++ forbids flexible array member %qs", name);
                else
                  pedwarn (input_location, OPT_Wpedantic,
Index: testsuite/g++.dg/cpp1z/has-unique-obj-representations1.C
===================================================================
--- testsuite/g++.dg/cpp1z/has-unique-obj-representations1.C    (revision 
265616)
+++ testsuite/g++.dg/cpp1z/has-unique-obj-representations1.C    (working copy)
@@ -9,7 +9,7 @@ struct V { int i : INTB * 3 / 4; int j : INTB / 4
 struct W {};
 struct X : public W { int i; void bar (); };
 struct Y {
-  char a[3]; char b[];   // { dg-warning "forbids flexible array member" }
+  char a[3]; char b[];   // { dg-warning "19:ISO C\\+\\+ forbids flexible 
array member" }
 };
 struct Z { int a; float b; };
 struct A { int i : INTB * 2; int j; };                 // { dg-warning 
"exceeds its type" }
Index: testsuite/g++.dg/ext/flexarray-mangle-2.C
===================================================================
--- testsuite/g++.dg/ext/flexarray-mangle-2.C   (revision 265616)
+++ testsuite/g++.dg/ext/flexarray-mangle-2.C   (working copy)
@@ -4,7 +4,7 @@
 
 struct A {
   int n;
-  char a[];   // { dg-warning "forbids flexible array member" }
+  char a[];   // { dg-warning "8:ISO C\\+\\+ forbids flexible array member" }
 };
 
 // Declare but do not define function templates.
Index: testsuite/g++.dg/ext/flexarray-mangle.C
===================================================================
--- testsuite/g++.dg/ext/flexarray-mangle.C     (revision 265616)
+++ testsuite/g++.dg/ext/flexarray-mangle.C     (working copy)
@@ -4,7 +4,7 @@
 
 struct A {
   int n;
-  char a[];   // { dg-warning "forbids flexible array member" }
+  char a[];   // { dg-warning "8:ISO C\\+\\+ forbids flexible array member" }
 };
 
 // Declare but do not define function templates.
Index: testsuite/g++.dg/ext/flexarray-subst.C
===================================================================
--- testsuite/g++.dg/ext/flexarray-subst.C      (revision 265616)
+++ testsuite/g++.dg/ext/flexarray-subst.C      (working copy)
@@ -5,7 +5,7 @@
 
 struct A {
   int n;
-  char a[];   // { dg-warning "forbids flexible array member" }
+  char a[];   // { dg-warning "8:ISO C\\+\\+ forbids flexible array member" }
 };
 
 template <class>
Index: testsuite/g++.dg/ext/flexary10.C
===================================================================
--- testsuite/g++.dg/ext/flexary10.C    (revision 265616)
+++ testsuite/g++.dg/ext/flexary10.C    (working copy)
@@ -4,7 +4,7 @@
 
 struct A {
   int n;
-  int a[];  // { dg-warning "forbids flexible array member" }
+  int a[];  // { dg-warning "7:ISO C\\+\\+ forbids flexible array member" }
 };
 
 struct A foo (void)
Index: testsuite/g++.dg/ext/flexary11.C
===================================================================
--- testsuite/g++.dg/ext/flexary11.C    (revision 265616)
+++ testsuite/g++.dg/ext/flexary11.C    (working copy)
@@ -4,7 +4,7 @@
 
 struct A {
   int n;
-  char a[];   // { dg-error "forbids flexible array member" }
+  char a[];   // { dg-error "8:ISO C\\+\\+ forbids flexible array member" }
 };
 
 void f ()
Index: testsuite/g++.dg/ext/flexary14.C
===================================================================
--- testsuite/g++.dg/ext/flexary14.C    (revision 265616)
+++ testsuite/g++.dg/ext/flexary14.C    (working copy)
@@ -10,7 +10,7 @@ struct A<T[]> { typedef int X; };
 template <class T> int foo (T&, typename A<T>::X = 0) { return 0; }
 
 struct B {
-  int n, a[];     // { dg-error "forbids flexible array member" }
+  int n, a[];     // { dg-error "10:ISO C\\+\\+ forbids flexible array member" 
}
 };
 
 void bar (B *b)
Index: testsuite/g++.dg/ext/flexary16.C
===================================================================
--- testsuite/g++.dg/ext/flexary16.C    (revision 265616)
+++ testsuite/g++.dg/ext/flexary16.C    (working copy)
@@ -12,7 +12,7 @@ struct container
 
   struct incomplete {
     int x;
-    elem array[];  // { dg-warning "forbids flexible array member" }
+    elem array[];  // { dg-warning "10:ISO C\\+\\+ forbids flexible array 
member" }
   };
 };
 
@@ -27,7 +27,7 @@ struct D: container<T>
 {
   struct S {
     int x;
-    typename container<T>::elem array[];  // { dg-warning "forbids flexible 
array member" }
+    typename container<T>::elem array[];  // { dg-warning "33:ISO C\\+\\+ 
forbids flexible array member" }
   };
 };
 
Index: testsuite/g++.dg/ext/flexary26.C
===================================================================
--- testsuite/g++.dg/ext/flexary26.C    (revision 265616)
+++ testsuite/g++.dg/ext/flexary26.C    (working copy)
@@ -2,8 +2,8 @@
 // { dg-do compile }
 // { dg-options "-Wpedantic" }
 
-struct S { const char *a; char b[]; }; // { dg-warning "forbids flexible array 
member" }
-struct T { int a; int b[]; };  // { dg-warning "forbids flexible array member" 
}
+struct S { const char *a; char b[]; }; // { dg-warning "32:ISO C\\+\\+ forbids 
flexible array member" }
+struct T { int a; int b[]; };  // { dg-warning "23:ISO C\\+\\+ forbids 
flexible array member" }
 #if __cplusplus >= 201103L
 S c[] { "", "" };              // { dg-error "initialization of flexible array 
member in a nested context" "" { target c++11 } }
                                // { dg-warning "initialization of a flexible 
array member" "" { target c++11 } .-1 }
Index: testsuite/g++.dg/ext/flexary27.C
===================================================================
--- testsuite/g++.dg/ext/flexary27.C    (revision 265616)
+++ testsuite/g++.dg/ext/flexary27.C    (working copy)
@@ -1,8 +1,8 @@
 // PR c++/81922
 // { dg-do compile }
 
-struct S { const char *a; char b[]; }; // { dg-error "forbids flexible array 
member" }
-struct T { int a; int b[]; };  // { dg-error "forbids flexible array member" }
+struct S { const char *a; char b[]; }; // { dg-error "32:ISO C\\+\\+ forbids 
flexible array member" }
+struct T { int a; int b[]; };  // { dg-error "23:ISO C\\+\\+ forbids flexible 
array member" }
 #if __cplusplus >= 201103L
 S c[] { "", "" };              // { dg-error "initialization of flexible array 
member in a nested context" "" { target c++11 } }
                                // { dg-error "initialization of a flexible 
array member" "" { target c++11 } .-1 }
Index: testsuite/g++.dg/ext/flexary7.C
===================================================================
--- testsuite/g++.dg/ext/flexary7.C     (revision 265616)
+++ testsuite/g++.dg/ext/flexary7.C     (working copy)
@@ -5,7 +5,7 @@
 
 struct FlexChar {
     int n;
-    char a[];       // { dg-warning "forbids flexible array member" }
+    char a[];       // { dg-warning "10:ISO C\\+\\+ forbids flexible array 
member" }
 };
 
 struct FlexChar ac =
@@ -18,7 +18,7 @@ typedef __WCHAR_TYPE__ wchar_t;
 
 struct FlexWchar {
     int n;
-    wchar_t a[];    // { dg-warning "forbids flexible array member" }
+    wchar_t a[];    // { dg-warning "13:ISO C\\+\\+ forbids flexible array 
member" }
 };
 
 struct FlexWchar awc =
@@ -27,7 +27,7 @@ struct FlexWchar awc =
 
 struct FlexInt {
     int n;
-    int a[];        // { dg-warning "forbids flexible array member" }
+    int a[];        // { dg-warning "9:ISO C\\+\\+ forbids flexible array 
member" }
 };
 
 // Verify that no warning is issued for the case when a flexible array
@@ -48,7 +48,7 @@ struct FlexInt ai2 =
 template <class T>
 struct FlexT {
     int n;
-    T a[];          // { dg-warning "forbids flexible array member" }
+    T a[];          // { dg-warning "7:ISO C\\+\\+ forbids flexible array 
member" }
 };
 
 struct FlexT<char> atc =
Index: testsuite/g++.dg/ext/pr71290.C
===================================================================
--- testsuite/g++.dg/ext/pr71290.C      (revision 265616)
+++ testsuite/g++.dg/ext/pr71290.C      (working copy)
@@ -1,17 +1,17 @@
 // PR c++/71290 - [6/7 Regression] Flexible array member is not diagnosed
 // with -pedantic
 
-// { dg-do compile }s
+// { dg-do compile }
 // { dg-options "-Wall -Wpedantic" }
 
 struct A
 {
   int i;
-  int arr[];   // { dg-warning "forbids flexible array member .arr." }
+  int arr[];   // { dg-warning "7:ISO C\\+\\+ forbids flexible array member 
.arr." }
 };
 
 template <class T>
 struct B {
   T n;
-  T a[];       // { dg-warning "forbids flexible array member .a." }
+  T a[];       // { dg-warning "5:ISO C\\+\\+ forbids flexible array member 
.a." }
 };

Reply via email to