]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
/cp
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Oct 2019 11:29:33 +0000 (11:29 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Oct 2019 11:29:33 +0000 (11:29 +0000)
2019-10-14  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (check_tag_decl): Use DECL_SOURCE_LOCATION.

/testsuite
2019-10-14  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/constexpr-union5.C: Test location(s) too.
* g++.dg/diagnostic/bitfld2.C: Likewise.
* g++.dg/ext/anon-struct1.C: Likewise.
* g++.dg/ext/anon-struct6.C: Likewise.
* g++.dg/ext/flexary19.C: Likewise.
* g++.dg/ext/flexary9.C: Likewise.
* g++.dg/template/error17.C: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@276958 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C
gcc/testsuite/g++.dg/diagnostic/bitfld2.C
gcc/testsuite/g++.dg/ext/anon-struct1.C
gcc/testsuite/g++.dg/ext/anon-struct6.C
gcc/testsuite/g++.dg/ext/flexary19.C
gcc/testsuite/g++.dg/ext/flexary9.C
gcc/testsuite/g++.dg/template/error17.C

index 187935d5e7e043b5862c37ea3ace324bc34c0ce0..286410717579af9bf2b5caf169f7ac07a7efbac1 100644 (file)
@@ -1,3 +1,7 @@
+2019-10-14  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (check_tag_decl): Use DECL_SOURCE_LOCATION.
+
 2019-10-14  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/92084
index 6f4c589b4b14d672a71075fc15136fd5010968c7..a9ff4275a6707ae1c0f04a47b67025473ebda863 100644 (file)
@@ -4990,9 +4990,9 @@ check_tag_decl (cp_decl_specifier_seq *declspecs,
       /* Anonymous unions are objects, so they can have specifiers.  */;
       SET_ANON_AGGR_TYPE_P (declared_type);
 
-      if (TREE_CODE (declared_type) != UNION_TYPE
-         && !in_system_header_at (input_location))
-       pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
+      if (TREE_CODE (declared_type) != UNION_TYPE)
+       pedwarn (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (declared_type)),
+                OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
     }
 
   else
index 093bd174d2b973e71fadc5821607e27d8502f23e..13988f87736f5712f899b08db16378bbc2bdc35f 100644 (file)
@@ -1,3 +1,13 @@
+2019-10-14  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/constexpr-union5.C: Test location(s) too.
+       * g++.dg/diagnostic/bitfld2.C: Likewise.
+       * g++.dg/ext/anon-struct1.C: Likewise.
+       * g++.dg/ext/anon-struct6.C: Likewise.
+       * g++.dg/ext/flexary19.C: Likewise.
+       * g++.dg/ext/flexary9.C: Likewise.
+       * g++.dg/template/error17.C: Likewise.
+
 2019-10-14  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/92084
index 57796664e01a6de183fc69e9ca89f288315a75b7..53182e6506312ebbcd1133559a72b63c62550aaa 100644 (file)
@@ -23,16 +23,16 @@ SA((a.i == 42));
 
 struct B
 {
-  struct {
+  struct {                     // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
     int h;
-    struct {
+    struct {                   // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" }
       union {
        unsigned char i;
        int j;
       };
       int k;
-    };                         // { dg-warning "anonymous struct" }
-  };                           // { dg-warning "anonymous struct" }
+    };
+  };
   int l;
 
   constexpr B(): h(1), i(2), k(3), l(4) {}
index 46d5ee2ab784fb17c4ab446f3b426224609ff89e..88e7ebf77ab78b0b4b6204cb33c2910c9b078e32 100644 (file)
@@ -6,4 +6,4 @@ template<int> struct A
   struct {} : 2;   // { dg-error "expected ';' after struct" "expected" }
 };
 // { dg-error "ISO C.. forbids declaration" "declaration" { target *-*-* } 6 }
-// { dg-error "ISO C.. prohibits anonymous" "anonymous" { target *-*-* } 6 }
+// { dg-error "10:ISO C.. prohibits anonymous" "anonymous" { target *-*-* } 6 }
index 0a682db1ae231cf11dced5e0b0a3e64fd3d581c8..ceeb8e177c1dde2fe98c14cf21ce14241f91e17b 100644 (file)
@@ -19,7 +19,7 @@ char testD[sizeof(C::D) == sizeof(A) ? 1 : -1];
 
 /* GNU extension.  */
 struct E {
-  struct { char z; };          /* { dg-error "prohibits anonymous structs" } */
+  struct { char z; };          /* { dg-error "10:ISO C\\+\\+ prohibits anonymous structs" } */
   char e;
 };
 
@@ -45,6 +45,6 @@ char testH[sizeof(H) == 2 * sizeof(A) ? 1 : -1];
 
 /* Make sure __extension__ gets turned back off.  */
 struct I {
-  struct { char z; };          /* { dg-error "prohibits anonymous structs" } */
+  struct { char z; };          /* { dg-error "10:ISO C\\+\\+ prohibits anonymous structs" } */
   char i;
 };
index 360f25027a310b0572af71d536f811286703f221..fad508a5d2fc7fac0ef50fd000e4f013ae68625e 100644 (file)
@@ -3,8 +3,8 @@
 struct A
 {
   struct
-  {
+  { // { dg-error "3:ISO C\\+\\+ prohibits anonymous structs" }
     struct { static int i; }; // { dg-error "prohibits anonymous structs|non-static data members|unnamed class" }
     void foo() { i; } // { dg-error "public non-static data" }
-  }; // { dg-error "prohibits anonymous structs" }
+  };
 };
index 5eaf11b064dcbf44ca0cde053780c592f4ae5f9a..abfbc43028afb0389cc79ba29b4cd808aacdb947 100644 (file)
@@ -146,13 +146,13 @@ struct S16
 {
   int i;
 
-  struct {          // { dg-warning "invalid use" }
+  struct {          // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" }
     // A flexible array as a sole member of an anonymous struct is
     // rejected with an error in C mode but emits just a pedantic
     // warning in C++.  Other than excessive pedantry there is no
     // reason to reject it.
     int a[];
-  };                // { dg-warning "anonymous struct" }
+  };
 };
 
 struct S17
@@ -177,9 +177,9 @@ struct S19
 {
   int i;
 
-  struct {          // { dg-warning "invalid use" }
+  struct {          // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" }
     int j, a[];     // { dg-message "declared here" }
-  };                // { dg-warning "anonymous struct" }
+  };
 };
 
 struct S20
@@ -198,10 +198,10 @@ struct S21
   static int i;
   typedef int A[];
 
-  struct {          // { dg-warning "invalid use" }
+  struct {          // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" }
     int j;
     A a;            // { dg-message "declared here" }
-  };                // { dg-warning "anonymous struct" }
+  };
 };
 
 struct S22
@@ -215,11 +215,11 @@ struct S22
 
 struct S23
 {
-  struct {
+  struct {          // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
     static int i;   // { dg-error "static data member" }
 
     int a[];        // { dg-error "in an otherwise empty" }
-  };                // { dg-warning "anonymous struct" }
+  };
 };
 
 struct S24
@@ -296,11 +296,11 @@ union A
 
 union B
 {
-  struct {
-    struct {        // { dg-warning "invalid use" }
+  struct {          // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
+    struct {        // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct|invalid use" }
       int i, a[];   // { dg-message "declared here" }
-    };              // { dg-warning "anonymous struct" }
-  };                // { dg-warning "anonymous struct" }
+    };
+  };
   int j;
 };
 
index 5ebcdf507575f6341a138d5a59606c9373b0ad67..b31e84b5fce81760a1ef208728d67273b0f86837 100644 (file)
@@ -282,64 +282,64 @@ struct S_S_S_x {
 
 struct Anon1 {
   int n;
-  struct {                  // { dg-warning "invalid use \[^\n\r\]* with a zero-size array" }
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use \[^\n\r\]* with a zero-size array" }
     int good[0];            // { dg-warning "forbids zero-size array" }
-  };                        // { dg-warning "anonymous struct" }
+  };
 };
 
 ASSERT_AT_END (Anon1, good);
 
 struct Anon2 {
-  struct {                  // { dg-warning "invalid use" }
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" }
     int n;
-    struct {
+    struct {                // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" }
       int good[0];          // { dg-warning "zero-size array" }
-    };                      // { dg-warning "anonymous struct" }
-  };                        // { dg-warning "anonymous struct" }
+    };
+  };
 };
 
 ASSERT_AT_END (Anon2, good);
 
 struct Anon3 {
-  struct {                  // { dg-warning "invalid use" }
-    struct {
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" }
+    struct {                // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" }
       int n;
       int good[0];          // { dg-warning "zero-size array" }
-    };                      // { dg-warning "anonymous struct" }
-  };                        // { dg-warning "anonymous struct" }
+    };
+  };
 };
 
 ASSERT_AT_END (Anon3, good);
 
 struct Anon4 {
-  struct {
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
     int in_empty_struct[0]; // { dg-warning "zero-size array|in an otherwise empty" }
-  };                        // { dg-warning "anonymous struct" }
+  };
 };
 
 struct Anon5 {
-  struct {
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
     int not_at_end[0];      // { dg-warning "zero-size array|not at end" }
-  };                        // { dg-warning "anonymous struct" }
+  };
   int n;
 };
 
 struct Anon6 {
-  struct {
-    struct {
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
+    struct {                // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" }
       int not_at_end[0];    // { dg-warning "zero-size array|not at end" }
-    };                      // { dg-warning "anonymous struct" }
+    };
     int n;
-  };                        // { dg-warning "anonymous struct" }
+  };
 };
 
 
 struct Anon7 {
-  struct {
-    struct {
+  struct {                  // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" }
+    struct {                // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" }
       int not_at_end[0];    // { dg-warning "zero-size array|not at end" }
-    };                      // { dg-warning "anonymous struct" }
-  };                        // { dg-warning "anonymous struct" }
+    };
+  };
   int n;
 };
 
index 5b3281a1779c388a245a8bdfd39b78c2ad61104d..7803a1e89efdd0f4eb418c3cc9127ab61ce349ab 100644 (file)
@@ -4,6 +4,6 @@ template <typename T>
 void
 foo()
 {
-  union { struct { }; }; // { dg-error "prohibits anonymous struct" "anon" }
+  union { struct { }; }; // { dg-error "18:ISO C\\+\\+ prohibits anonymous struct" }
   // { dg-error "18:anonymous struct not inside" "not inside" { target *-*-* } .-1 }
 }