semantics.c (finish_non_static_data_member): In diagnostic, give error at point of...
authorJason Merrill <jason@redhat.com>
Mon, 22 Sep 2014 19:22:37 +0000 (15:22 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 22 Sep 2014 19:22:37 +0000 (15:22 -0400)
* semantics.c (finish_non_static_data_member): In diagnostic, give
error at point of use and note at point of declaration.

From-SVN: r215479

14 files changed:
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
gcc/testsuite/g++.dg/lookup/scoped8.C
gcc/testsuite/g++.dg/other/ptrmem2.C
gcc/testsuite/g++.dg/template/dependent-expr5.C
gcc/testsuite/g++.dg/template/error15.C
gcc/testsuite/g++.dg/template/error42.C
gcc/testsuite/g++.old-deja/g++.brendan/crash18.C
gcc/testsuite/g++.old-deja/g++.brendan/nest1.C
gcc/testsuite/g++.old-deja/g++.brendan/static1.C
gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C
gcc/testsuite/g++.old-deja/g++.gb/scope06.C
gcc/testsuite/g++.old-deja/g++.law/cvt11.C

index f209e15794edfa5367c45b1a92c24543a6304b58..d6db39f9367bd647bc5e9f08e2cbff440f041276 100644 (file)
@@ -1,5 +1,8 @@
 2014-09-22  Jason Merrill  <jason@redhat.com>
 
+       * semantics.c (finish_non_static_data_member): In diagnostic, give
+       error at point of use and note at point of declaration.
+
        PR c++/63320
        PR c++/60463
        PR c++/60755
index 1d81028dc2169a129419182f9413d37d8bf499c9..6e04e5efd16ac076a3cb33d685dc4de2939ae239 100644 (file)
@@ -1692,10 +1692,10 @@ finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
     {
       if (current_function_decl
          && DECL_STATIC_FUNCTION_P (current_function_decl))
-       error ("invalid use of member %q+D in static member function", decl);
+       error ("invalid use of member %qD in static member function", decl);
       else
-       error ("invalid use of non-static data member %q+D", decl);
-      error ("from this location");
+       error ("invalid use of non-static data member %qD", decl);
+      inform (DECL_SOURCE_LOCATION (decl), "declared here");
 
       return error_mark_node;
     }
index 9c76d34496de756ba70482b2d41f51df701cd4a3..fa8a6e63a934e91f9918dfd0f4661e23bacf9a78 100644 (file)
@@ -3,7 +3,7 @@
 
 class Klass
 {
-  unsigned int local;          // { dg-error "non-static" }
+  unsigned int local;
 public:
   bool dostuff();
 };
@@ -11,7 +11,7 @@ public:
 bool Klass::dostuff()
 {
   auto f = []() -> bool {
-    if (local & 1) { return true; } // { dg-error "not captured|this location" }
+    if (local & 1) { return true; } // { dg-error "not captured|non-static" }
     return false;
   };
 }
index 2764f75c1351e55e2a3dc55eedc567b384fb54d7..c5645ee3729937b2e6cf0c02f2a4f43b27ca50d1 100644 (file)
@@ -7,12 +7,12 @@
 
 struct A
 {
-    int i;                     // { dg-error "non-static" }
+    int i;                     // { dg-message "" }
 };
 
 template <int> struct B
 {
-    int foo() { return A::i; } // { dg-error "this location" }
+    int foo() { return A::i; } // { dg-error "non-static" }
 };
 
 template struct B<0>;
index d267df15be163dbdbef634c5e6600dc6e838847b..335f492c58d396730b8f7b2581639ba6a9432a8e 100644 (file)
@@ -8,7 +8,7 @@
 
 struct D {
   
-  int &m;       // { dg-error "invalid use of non-static data member" "" }
+  int &m;       // { dg-message "" }
   static int &s;
   
   int Foo ();
@@ -29,7 +29,7 @@ int D::Foo ()
 int Foo ()
 {
   f1( &D::m);    // { dg-error "cannot create pointer to ref" "" }
-  f1( &(D::m));  // { dg-error "from this location" "" }
+  f1( &(D::m));  // { dg-error "non-static" }
   f2( &D::s);    // ok
   f2( &(D::s));  // ok
   return 0;
index ecb7a67da8e0c57ed55feca9ae4d7afc87d53292..8d14553352d659f83f2d7992133f57a7b2f5ca3c 100644 (file)
@@ -18,7 +18,7 @@ template<class F, class T> void bindb(F (T::*f)(void)) {} // { dg-message "note"
 
 struct foo {
   static int baist;
-  int bait;                    // { dg-error "non-static data member" }
+  int bait;                    // { dg-message "" }
   void barf ();
   static void barf (int);
 
@@ -31,7 +31,7 @@ struct foo {
     bar() {
       bind (&baist);
       bind (&foo::baist);
-      bind (&bait); // { dg-error "from this location" }
+      bind (&bait); // { dg-error "non-static data member" }
       bind (&foo::bait);
 
       bind (&baikst);
@@ -83,7 +83,7 @@ struct foo {
     barT() {
       bind (&baist);
       bind (&foo::baist);
-      bind (&bait); // { dg-error "from this location" }
+      bind (&bait); // { dg-error "non-static data member" }
       bind (&foo::bait);
 
       bind (&baikst);
index b7c7bc8ca47da71d7c2641b59c6ab126d0218b26..86936581cfd74a9fbad2d466ccab19ca4b853005 100644 (file)
@@ -9,9 +9,9 @@ template <class T>
 class B {
 protected:
     
-  A<T> a; // { dg-error "" }
+  A<T> a; // { dg-message "" }
     
-  void f(const A<T> * a1 = &a); // { dg-error "this location" }
+  void f(const A<T> * a1 = &a); // { dg-error "non-static" }
     
   void g(void);
 };
index 0d651e3162028509685b75ada4fbf774c8a1f79a..3c66ed0289d314ec94a6194b232765f06eddb9a5 100644 (file)
@@ -3,18 +3,18 @@
 
 template <int> struct A
 {
-  int i;               // { dg-error "invalid use of non-static data member" }
+  int i;               // { dg-message "" }
   friend void foo ()
   {
-    int x[i];          // { dg-error "from this location" }
+    int x[i];          // { dg-error "non-static data member" }
   }
 };
 
 struct B
 {
-  int j;               // { dg-error "invalid use of non-static data member" }
+  int j;               // { dg-message "" }
   friend int bar ()
   {
-    return j;          // { dg-error "from this location" }
+    return j;          // { dg-error "non-static data member" }
   }
 };
index 3119f02ede2e6d819a658e16871467fde8ad81b5..aa605ef71fa0e9b87db69d03450af6321549fd00 100644 (file)
@@ -8,11 +8,11 @@ public:
 
     // Friend functions so that v == x works as does x == v works
     friend int operator==(void *v, const Pix& x) // { dg-message "previously" }
-    { return v == index; }  // { dg-error "from this location" }
+    { return v == index; }  // { dg-error "non-static" }
     // ??? should be operator!=
     friend int operator==(void *v, const Pix& x) // { dg-error "redefinition" }
     { return v != index; }
 private:
 //    friend class List<T>;
-    element *index; // { dg-error "invalid use of non-static data member" }
+    element *index; // { dg-message "" }
 };
index 842b2f692e630e5bad363588b5a6bb8d7841eb30..07ba77884fe6b4de6a8933f02edd383581046d8b 100644 (file)
@@ -3,12 +3,12 @@
 int x;
 class enclose {
 public:
-  int x;                       // { dg-error "non-static" }
+  int x;                       // { dg-message "" }
 
   class inner {
   public:
     void f (int i) {
-      x = i;// { dg-error "" } .*
+      x = i;// { dg-error "non-static" } .*
     }
   };
 };
index cb839237705aa73fd81fd1a35d21664972696ac5..cba5551d8f9d827dc7cfff75700b16fa3587a593 100644 (file)
@@ -1,4 +1,4 @@
 // { dg-do assemble  }
 // GROUPS passed static
-class A { public: int a; };// { dg-error "" } .*
+class A { public: int a; };// { dg-message "" } .*
 void foo7 () { A::a = 3; }// { dg-error "" } .*
index e7feb94733689c5ecfcb8d04a85aae78cc6dba82..9a16a7457b0383dccfc4d0311e8b3b56b0d95668 100644 (file)
@@ -12,7 +12,7 @@
 // keywords: non-static members, member pointers, scope resolution
 
 struct struct0 {
-  int struct0_data_member_0;           /* { dg-error "" } gets error from below */
+  int struct0_data_member_0;           /* { dg-message "" } gets error from below */
   int struct0_function_member_0 ();
 };
 
index cbcc4fde125b1380877cf3d39b7170d9698d8e93..658cbe113fc8b72af2d0170a992e9035c2b3c1f8 100644 (file)
@@ -1,16 +1,14 @@
 // { dg-do assemble  }
-// { dg-prune-output "non-static data member initializers" }
 // GROUPS passed gb scope
 struct C {
   struct D {
     int x;
     void foo ();
   };
-      const int Ok = 0; // { dg-error "" } initialization forbidden
+  const int Ok = 0; // { dg-error "" "" { target { ! c++11 } } } initialization forbidden
 };
 
 void C::D::foo ()
 {
-  // { dg-prune-output "from this location" }
-  x = Ok;
+  x = Ok;                      // { dg-error "non-static" }
 }
index 53dd1e9076d56e9668d6b00c9e425ddcab77b295..383cded430b0f4fa7bca8db3713112fd33bb356f 100644 (file)
@@ -6,15 +6,11 @@
 // Message-Id: <9211101908.AA13557@tera.com>
 // Subject: type cast of qualified const member breaks g++2.3.1
 
-// Ignore extra errors in C++0x mode.
-// { dg-prune-output "non-static data member initializers" }
-// { dg-prune-output "from this location" }
-// { dg-prune-output "uninitialized" }
 #include <stdio.h>
 
 class Thing{
 private: int x;
-   public: const int N = -1; // { dg-error "" } bad initialization
+public: const int N = -1; // { dg-error "" "" { target { ! c++11 } } } bad initialization
   Thing(int y);
 };
 
@@ -23,10 +19,10 @@ class Bar{ public: void doit(void); };
 void Bar::doit(void)
 {
   int i, j;
-  i = Thing::N;
+  i = Thing::N;                        // { dg-error "non-static" }
   printf("i = %d\n", i);
 
-  j = (int)Thing::N;
+  j = (int)Thing::N;           // { dg-error "non-static" }
   printf("i = %d\n", j);
 }
 Thing::Thing(int y) { x = y; }