decl.c (grokdeclarator): Use declarator->id_loc in two additional places.
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 4 Jun 2019 23:10:56 +0000 (23:10 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 4 Jun 2019 23:10:56 +0000 (23:10 +0000)
/cp
2019-06-04  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (grokdeclarator): Use declarator->id_loc in two
additional places.

/testsuite
2019-06-04  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/concepts/pr60573.C: Test locations too.
* g++.dg/cpp0x/deleted13.C: Likewise.
* g++.dg/parse/error29.C: Likewise.
* g++.dg/parse/qualified4.C: Likewise.
* g++.dg/template/crash96.C Likewise.
* g++.old-deja/g++.brendan/crash22.C Likewise.
* g++.old-deja/g++.brendan/crash23.C Likewise.
* g++.old-deja/g++.law/visibility10.C Likewise.
* g++.old-deja/g++.other/decl5.C: Likewise.

From-SVN: r271928

12 files changed:
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/concepts/pr60573.C
gcc/testsuite/g++.dg/cpp0x/deleted13.C
gcc/testsuite/g++.dg/parse/error29.C
gcc/testsuite/g++.dg/parse/qualified4.C
gcc/testsuite/g++.dg/template/crash96.C
gcc/testsuite/g++.old-deja/g++.brendan/crash22.C
gcc/testsuite/g++.old-deja/g++.brendan/crash23.C
gcc/testsuite/g++.old-deja/g++.law/visibility10.C
gcc/testsuite/g++.old-deja/g++.other/decl5.C

index c28faf9014449a75cbb3c77d5de5be214dff398f..ddd5581a1111146c42c4ecac3e3acd71234fbb14 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (grokdeclarator): Use declarator->id_loc in two
+       additional places.
+
 2019-06-04  Nathan Sidwell  <nathan@acm.org>
 
        * name-lookup.c (lookup_type_scope_1): Reimplement, handle local
index bdf397e5ecb23a4db4bc85e0876892f6327de11c..23b2a4c2831c43cda7a980d4705aa7a21791ed7e 100644 (file)
@@ -11873,6 +11873,8 @@ grokdeclarator (const cp_declarator *declarator,
       unqualified_id = dname;
     }
 
+  location_t loc = declarator ? declarator->id_loc : input_location;
+
   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
      qualified with a class-name, turn it into a METHOD_TYPE, unless
      we know that the function is static.  We take advantage of this
@@ -11898,8 +11900,7 @@ grokdeclarator (const cp_declarator *declarator,
              friendp = 0;
            }
          else
-           permerror (declarator->id_loc, 
-                      "extra qualification %<%T::%> on member %qs",
+           permerror (loc, "extra qualification %<%T::%> on member %qs",
                       ctype, name);
        }
       else if (/* If the qualifying type is already complete, then we
@@ -11928,19 +11929,19 @@ grokdeclarator (const cp_declarator *declarator,
          if (current_class_type
              && (!friendp || funcdef_flag || initialized))
            {
-             error (funcdef_flag || initialized
-                    ? G_("cannot define member function %<%T::%s%> "
-                         "within %qT")
-                    : G_("cannot declare member function %<%T::%s%> "
-                         "within %qT"),
-                    ctype, name, current_class_type);
+             error_at (loc, funcdef_flag || initialized
+                       ? G_("cannot define member function %<%T::%s%> "
+                            "within %qT")
+                       : G_("cannot declare member function %<%T::%s%> "
+                            "within %qT"),
+                       ctype, name, current_class_type);
              return error_mark_node;
            }
        }
       else if (typedef_p && current_class_type)
        {
-         error ("cannot declare member %<%T::%s%> within %qT",
-                ctype, name, current_class_type);
+         error_at (loc, "cannot declare member %<%T::%s%> within %qT",
+                   ctype, name, current_class_type);
          return error_mark_node;
        }
     }
@@ -12053,8 +12054,6 @@ grokdeclarator (const cp_declarator *declarator,
        }
     }
 
-  location_t loc = declarator ? declarator->id_loc : input_location;
-
   /* If this is declaring a typedef name, return a TYPE_DECL.  */
   if (typedef_p && decl_context != TYPENAME)
     {
index 7bcc461327dcf01e80e3fe456948dfc856d8bf55..03fbc0be021e12cbd7af02d4c49c2226a18ccddf 100644 (file)
@@ -1,3 +1,15 @@
+2019-06-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/concepts/pr60573.C: Test locations too.
+       * g++.dg/cpp0x/deleted13.C: Likewise.
+       * g++.dg/parse/error29.C: Likewise.
+       * g++.dg/parse/qualified4.C: Likewise.
+       * g++.dg/template/crash96.C Likewise.
+       * g++.old-deja/g++.brendan/crash22.C Likewise.
+       * g++.old-deja/g++.brendan/crash23.C Likewise.
+       * g++.old-deja/g++.law/visibility10.C Likewise.
+       * g++.old-deja/g++.other/decl5.C: Likewise.
+
 2019-06-04  Bill Schmidt  <wschmidt@linux.ibm.com>
 
        PR target/78263
index 568849175c69028e3dff4c5553957151286f0091..42cda21ef745006442245ffc66faa3c05a07c465 100644 (file)
@@ -9,7 +9,7 @@ struct A
     void foo(auto);
   };
 
-  void B::foo(auto) {}  // { dg-error "cannot define" }
+  void B::foo(auto) {}  // { dg-error "8:cannot define" }
 
   struct X
   {
@@ -21,8 +21,8 @@ struct A
       };
     };
 
-    void Y::Z::foo(auto) {}  // { dg-error "cannot define" }
+    void Y::Z::foo(auto) {}  // { dg-error "10:cannot define" }
   };
 
-  void X::Y::Z::foo(auto) {}  // { dg-error "cannot define" }
+  void X::Y::Z::foo(auto) {}  // { dg-error "8:cannot define" }
 };
index f10551f9666477e9639f96c565d3ac73bcc0eec6..ce915a840e9081693255eddf998e14ce644fa78f 100644 (file)
@@ -8,5 +8,5 @@ struct A
 
 struct B
 {
-  template<typename> friend void A::foo() = delete; // { dg-error "" }
+  template<typename> friend void A::foo() = delete; // { dg-error "34:cannot define" }
 };
index 2c3a3a7f28880458207096dd43263927fac82da0..20cc82004f2a16948d70027ab21ae15c32972f9b 100644 (file)
@@ -7,7 +7,7 @@ struct A {
   void operator delete(void *);
 };
 struct B { 
-  friend void A::foo() {} // { dg-error "22:cannot define member function 'A::foo' within 'B'" }
-  friend void A::operator delete(void*) {} // { dg-error "39:cannot define member function 'A::operator delete' within 'B'" }
-  friend A::A() {} // { dg-error "15:cannot define member function 'A::A' within 'B'" }
+  friend void A::foo() {} // { dg-error "15:cannot define member function 'A::foo' within 'B'" }
+  friend void A::operator delete(void*) {} // { dg-error "15:cannot define member function 'A::operator delete' within 'B'" }
+  friend A::A() {} // { dg-error "10:cannot define member function 'A::A' within 'B'" }
 };
index c827fcfe7c1e95f084d9eec70d5c4ff6ef5c8271..71b01afd3bd8dcb4cdecc0a04633d4c7b1a0c83c 100644 (file)
@@ -2,5 +2,5 @@
 // { dg-options "" }
 
 struct X { 
-  void X::bar() {} // { dg-error "" }
+  void X::bar() {} // { dg-error "8:extra qualification" }
 }; 
index 5c2aa9954b170c0bcce85bc486241a89a0bdbaaa..d1ce2db78b566f27043f25ff36bdcd1c26d76b8b 100644 (file)
@@ -2,5 +2,5 @@
 
 template<int> struct A
 {
-  template<int> template<int> void A::foo() {} // { dg-error "extra qualification" }
+  template<int> template<int> void A::foo() {} // { dg-error "36:extra qualification" }
 };
index 73831a053d16ae328d324c00000b6f63e904db9e..7e56892c7e9ded12198d0b588fe1eee805102644 100644 (file)
@@ -6,6 +6,6 @@ struct A {
 };
 
 struct B {
-    void A::a1(); // this used to die in chainon(), now grokdeclarator should// { dg-error "" }  cannot declare.*
-    void A::a2(); // should be fixed by the 930629 change.// { dg-error "" }  cannot declare.*
+    void A::a1(); // this used to die in chainon(), now grokdeclarator should// { dg-error "10:cannot declare" }  cannot declare.*
+    void A::a2(); // should be fixed by the 930629 change.// { dg-error "10:cannot declare" }  cannot declare.*
 };
index 2506869792f3ef9b00acf96ccff8ab3808ff385c..f09609dc744e266a9282d4d7a561fab5a66903fd 100644 (file)
@@ -10,6 +10,6 @@ public:
     void f ();
     void g (int);
   };
-  void B::f () {}// { dg-error "" } .*
-  void B::g (int val) {}// { dg-error "" } .*
+  void B::f () {}// { dg-error "8:cannot define" } .*
+  void B::g (int val) {}// { dg-error "8:cannot define" } .*
 };
index 23505f63095d5113fb0455aaf3bec3fe4143caeb..7abb4a85d7c020b730a8463073676a8d9f0ee6df 100644 (file)
@@ -10,7 +10,7 @@ public:
 };
 
 class deriv : public base {
-  void base :: f1();// { dg-error "" } .*
+  void base :: f1();// { dg-error "8:cannot declare" } .*
 };
 
 int main ()
index 3ac91379e762688eddef90324e72474716927202..6d229325187b18c6abd97a06025f4d023f0c6369 100644 (file)
@@ -35,7 +35,7 @@ struct B {
   struct ::Q {        // { dg-error "global qual" } ::Q not a member of B
     int m;
   };
-  int A::fn() {       // { dg-error "cannot define member" } A::fn not a member of B
+  int A::fn() {       // { dg-error "7:cannot define member" } A::fn not a member of B
     return 0;
   }
   void fn(struct ::Q &);