decl.c (xref_tag_1): Change pairs of errors to error + inform.
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 2 Jun 2016 23:10:33 +0000 (23:10 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 2 Jun 2016 23:10:33 +0000 (23:10 +0000)
/cp
2016-06-02  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (xref_tag_1): Change pairs of errors to error + inform.
(start_enum): Likewise.
* parser.c (cp_parser_class_head): Likewise.

/testsuite
2016-06-02  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/forw_enum10.C: Adjust for dg-message vs dg-error.
* g++.dg/cpp0x/forw_enum6.C: Likewise.
* g++.dg/cpp0x/forw_enum8.C: Likewise.
* g++.dg/cpp0x/override2.C: Likewise.
* g++.dg/parse/crash5.C: Likewise.
* g++.dg/parse/error16.C: Likewise.
* g++.dg/parse/error27.C: Likewise.
* g++.dg/template/qualttp15.C: Likewise.
* g++.dg/template/redecl4.C: Likewise.
* g++.old-deja/g++.other/crash39.C: Likewise.
* g++.old-deja/g++.other/struct1.C: Likewise.
* g++.old-deja/g++.pt/m9a.C: Likewise.
* g++.old-deja/g++.pt/memclass10.C: Likewise.

From-SVN: r237046

17 files changed:
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/forw_enum10.C
gcc/testsuite/g++.dg/cpp0x/forw_enum6.C
gcc/testsuite/g++.dg/cpp0x/forw_enum8.C
gcc/testsuite/g++.dg/cpp0x/override2.C
gcc/testsuite/g++.dg/parse/crash5.C
gcc/testsuite/g++.dg/parse/error16.C
gcc/testsuite/g++.dg/parse/error27.C
gcc/testsuite/g++.dg/template/qualttp15.C
gcc/testsuite/g++.dg/template/redecl4.C
gcc/testsuite/g++.old-deja/g++.other/crash39.C
gcc/testsuite/g++.old-deja/g++.other/struct1.C
gcc/testsuite/g++.old-deja/g++.pt/m9a.C
gcc/testsuite/g++.old-deja/g++.pt/memclass10.C

index 651407151abbc185a7e1a91fa27a591d1bbce824..fba9aa9e0485818fe5533bc38bd887bfda6ecd2f 100644 (file)
@@ -1,3 +1,9 @@
+2016-06-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (xref_tag_1): Change pairs of errors to error + inform.
+       (start_enum): Likewise.
+       * parser.c (cp_parser_class_head): Likewise.
+
 2016-06-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/71372
index cbbb84b9d0c18a0ef6d1d56cd538ca7015a8abbd..cd7143b409cadbc4662ececedb92769d53ccb035 100644 (file)
@@ -12793,7 +12793,7 @@ xref_tag_1 (enum tag_types tag_code, tree name,
               && CLASSTYPE_IS_TEMPLATE (t))
        {
          error ("redeclaration of %qT as a non-template", t);
-         error ("previous declaration %q+D", t);
+         inform (location_of (t), "previous declaration %qD", t);
          return error_mark_node;
        }
 
@@ -13149,16 +13149,16 @@ start_enum (tree name, tree enumtype, tree underlying_type,
        {
          error_at (input_location, "scoped/unscoped mismatch "
                    "in enum %q#T", enumtype);
-         error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
-                   "previous definition here");
+         inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
+                 "previous definition here");
          enumtype = error_mark_node;
        }
       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
        {
          error_at (input_location, "underlying type mismatch "
                    "in enum %q#T", enumtype);
-         error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
-                   "previous definition here");
+         inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
+                 "previous definition here");
          enumtype = error_mark_node;
        }
       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
@@ -13169,8 +13169,8 @@ start_enum (tree name, tree enumtype, tree underlying_type,
        {
          error_at (input_location, "different underlying type "
                    "in enum %q#T", enumtype);
-         error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
-                   "previous definition here");
+         inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
+                 "previous definition here");
          underlying_type = NULL_TREE;
        }
     }
index 29a1b804e73d7c3a623b5db52f6912f06907badf..e01353d5dc1416437b627e49ac03797f9fa70a16 100644 (file)
@@ -22008,8 +22008,8 @@ cp_parser_class_head (cp_parser* parser,
     {
       error_at (type_start_token->location, "redefinition of %q#T",
                type);
-      error_at (type_start_token->location, "previous definition of %q+#T",
-               type);
+      inform (location_of (type), "previous definition of %q#T",
+             type);
       type = NULL_TREE;
       goto done;
     }
index 899e2bced1fc3a9b62ab6248b456d029ae502653..7f659c8ec202cbc1490d1d25edcec8e6ef56de70 100644 (file)
@@ -1,3 +1,19 @@
+2016-06-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/forw_enum10.C: Adjust for dg-message vs dg-error.
+       * g++.dg/cpp0x/forw_enum6.C: Likewise.
+       * g++.dg/cpp0x/forw_enum8.C: Likewise.
+       * g++.dg/cpp0x/override2.C: Likewise.
+       * g++.dg/parse/crash5.C: Likewise.
+       * g++.dg/parse/error16.C: Likewise.
+       * g++.dg/parse/error27.C: Likewise.
+       * g++.dg/template/qualttp15.C: Likewise.
+       * g++.dg/template/redecl4.C: Likewise.
+       * g++.old-deja/g++.other/crash39.C: Likewise.
+       * g++.old-deja/g++.other/struct1.C: Likewise.
+       * g++.old-deja/g++.pt/m9a.C: Likewise.
+       * g++.old-deja/g++.pt/memclass10.C: Likewise.
+
 2016-06-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/71372
index 609c27289574846de2ee6201670e951e314cb7be..3c4c3de6d6615746e89b31586930f3a351e4c7f9 100644 (file)
@@ -3,7 +3,7 @@
 //This error is diagnosed at instantiation time
 template<typename T> struct S1
 {
-    enum E : T;   // { dg-error "previous definition" }
+    enum E : T;   // { dg-message "previous definition" }
     enum E : int;     // { dg-error "different underlying type" }
 };
 template struct S1<short>; // { dg-message "required from here" }
@@ -24,7 +24,7 @@ template struct S3<short,short>;
 
 template<typename T1, typename T2> struct S4
 {
-    enum E : T1; // { dg-error "previous definition" }
+    enum E : T1; // { dg-message "previous definition" }
     enum E : T2; // { dg-error "different underlying type" }
 };
 template struct S4<short,char>; // { dg-message "required from here" }
index 7d2094df52bf1c8a106a7cbfe3642b13e1ab766b..01bf563bcddbde589db862527878f396f5feacd5 100644 (file)
@@ -1,18 +1,18 @@
 // { dg-do compile { target c++11 } }
 
-enum class E1 : int; // { dg-error "previous definition" }
+enum class E1 : int; // { dg-message "previous definition" }
 enum E1 : int;  // { dg-error "scoped/unscoped mismatch" }
 
-enum E2 : int; // { dg-error "previous definition" }
+enum E2 : int; // { dg-message "previous definition" }
 enum class E2 : int;  // { dg-error "scoped/unscoped mismatch" }
 
 enum struct E3 : int;
 enum class E3 : int; //ok
 
-enum class E4 : int; // { dg-error "previous definition" }
+enum class E4 : int; // { dg-message "previous definition" }
 enum class E4 : long;  // { dg-error "different underlying type" }
 
-enum E5 : int; // { dg-error "previous definition" }
+enum E5 : int; // { dg-message "previous definition" }
 enum E5 : long;  // { dg-error "different underlying type" }
 
 enum E6 : int;
index 5174226a6fdd23caf142a6ba5b39e1b6e848324a..b84a759c6de55cf0978ee67e991a4f78fac189fb 100644 (file)
@@ -11,7 +11,7 @@ template struct S1<int>; //ok
 //This error is diagnosed at instantiation time
 template<typename T> struct S2
 {
-    enum E : int;   // { dg-error "previous definition" }
+    enum E : int;   // { dg-message "previous definition" }
     enum E : T;     // { dg-error "different underlying type" }
 };
 template struct S2<short>; // { dg-message "required from here" }
@@ -19,7 +19,7 @@ template struct S2<short>; // { dg-message "required from here" }
 //This error is diagnosed at compilation time
 template<typename T> struct S3
 {
-    enum E : int;   // { dg-error "previous definition" }
+    enum E : int;   // { dg-message "previous definition" }
     enum E : short; // { dg-error "different underlying type" }
 };
 
index c0b89de2a12c96b67b87d7c15b996ed48784afa8..ab4dec486c666a4d1ed04a6c110167bd556d9a8f 100644 (file)
@@ -38,7 +38,7 @@ int main()
 {
   D3<B1> d;
   D4<B2> d2;
-  struct B2 final{}; // { dg-error "previous definition" }
+  struct B2 final{}; // { dg-message "previous definition" }
   B2 final; // { dg-error "has a previous declaration|previously declared here" }
   B2 final2 = final;
   struct B2 {}; // { dg-error "redefinition" }
@@ -47,7 +47,7 @@ int main()
   struct B2 final {}; // { dg-error "redefinition" }
   struct B2 override {}; // { dg-error "cannot specify 'override' for a class" }
   B2 override{}; // { dg-error "redeclaration" }
-  struct foo final {}; // { dg-error "previous definition" }
+  struct foo final {}; // { dg-message "previous definition" }
   struct foo final {}; // { dg-error "redefinition" }
   foo final; // { dg-error "conflicting declaration" }
 }
index d51f8ed7a51cf0dab3c9ede3e11877905fac1f96..4a06173f07f54c39f88c3d3037085e0dc185aa35 100644 (file)
@@ -1,6 +1,6 @@
 // { dg-options "-w" }
 
-class QString { // { dg-error "previous definition" }
+class QString { // { dg-message "previous definition" }
   QString (const QString & a); // { dg-message "QString::QString|candidate expects" }
 };
 
index 3d9dcc334e5b2894342e587b6e6b70657190a1f7..74db15c21052924034c957116615661e1d5ce181 100644 (file)
@@ -3,7 +3,7 @@
 
 struct A
 {
-  struct B {}; // { dg-error "10:previous definition of 'struct A::B'" }
+  struct B {}; // { dg-message "10:previous definition of 'struct A::B'" }
 };
 
 struct A::B{}; // { dg-error "11:redefinition of 'struct A::B'" }
index 90cb231c0ac8c5a20e6a955dfe637eb532da57ad..a86834ef731bbb2eb7b8b5d120cec0df2b982597 100644 (file)
@@ -1,8 +1,8 @@
 // { dg-options "-fshow-column -ansi -pedantic-errors -Wno-long-long" }
 // PR c++/20152
 
-struct KrSelectionMode {  virtual void init() = 0; }; // { dg-error "8:previous definition of 'struct KrSelectionMode'" }
-struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "8:previous definition of 'struct KrKDESelectionMode'" }
+struct KrSelectionMode {  virtual void init() = 0; }; // { dg-message "8:previous definition of 'struct KrSelectionMode'" }
+struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-message "8:previous definition of 'struct KrKDESelectionMode'" }
 struct KrSelectionMode {  virtual void init() = 0; }; // { dg-error "8:redefinition of 'struct KrSelectionMode'" }
 struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "8:redefinition of 'struct KrKDESelectionMode'" }
 KrKDESelectionMode krKDESelectionMode;
index b1c61195d42fbd80e9b38199738e0e8f35d8ab5b..9e8ce577b8f7409768c536ec0c2f747093d380c1 100644 (file)
@@ -12,7 +12,7 @@ template <template <class> class TT> struct X
        TT<int> y;
 };
 
-template <class T> struct X<T::template B> // { dg-error "previous" }
+template <class T> struct X<T::template B> // { dg-message "previous" }
 {
        T z;
 };
index 9a4a9f366e9c4198faa1ebe67c72adacae53e9d1..5638bde413db63c06792ea7138c82a3c71ee0aa5 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/28710
 // { dg-do compile }
 
-template<int> union A;  // { dg-error "previous" }
+template<int> union A;  // { dg-message "previous" }
 struct A;               // { dg-error "non-template" }
index a7af2881bed78eabcdc3a8d80895eda25b68f23a..248476946fc755e33ad5eff98d1fd7673bb6cc53 100644 (file)
@@ -10,7 +10,7 @@ struct X
 {
   ~X ();
 };
-struct S { X a; };  // { dg-error "" } previous defn
+struct S { X a; };  // { dg-message "" } previous defn
 struct S { X a; };  // { dg-error "" } redefinition
 
 void c1(S s)
index 699d524b9e8b03d57300f3d1eba6b557433fefd7..a533bd4ab94ed4ea9753c103a87348268f49e0be 100644 (file)
@@ -6,35 +6,35 @@
 // Duplicate definitions are wrong, we should just cough
 // politely, but we used to die horribly.
 
-class Y // { dg-error "" } previous definition
+class Y // { dg-message "" } previous definition
 {
 };
 class Y // { dg-error "" } redefinition
 {   
 };
 
-template<class T> class X // { dg-error "" } previous definition
+template<class T> class X // { dg-message "" } previous definition
 {
 };
 template<class T> class X // { dg-error "" } redefinition
 {   
 };
 
-template<class T> class X<T *> // { dg-error "" } previous definition
+template<class T> class X<T *> // { dg-message "" } previous definition
 {
 };
 template<class T> class X<T *> // { dg-error "" } redefinition
 {   
 };
 
-template<> class X<int> // { dg-error "" } previous definition
+template<> class X<int> // { dg-message "" } previous definition
 {
 };
 template<> class X<int> // { dg-error "" } redefinition
 {   
 };
 
-template<> class X<int *> // { dg-error "" } previous definition
+template<> class X<int *> // { dg-message "" } previous definition
 {
 };
 template<> class X<int *> // { dg-error "" } redefinition
index 05d2484c94c31d9206f6df38a9b2f12cf6889f51..c5b35cbde89f305601ef762b2b5f82a023b91ce6 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do assemble  }
 
-struct A { A() { a = 1; } int a; }; // { dg-error "" } 
+struct A { A() { a = 1; } int a; }; // { dg-message "" } 
 struct A { A() { a = 2; } int a; }; // { dg-error "" } 
 A aavv;
index 92bd3d383fe658d8d2eb5d06e693fca5497a4cdf..17c7343efabdaeed0ee6afe32b39d946cd4807fb 100644 (file)
@@ -3,7 +3,7 @@
 struct S1
 {
   template <class T>
-  struct S2 {}; // { dg-error "" } previous definition
+  struct S2 {}; // { dg-message "" } previous definition
 
   template <class T>
   struct S2 {}; // { dg-error "" } redefinition