summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/parser.c15
-rw-r--r--gcc/testsuite/ChangeLog22
-rw-r--r--gcc/testsuite/g++.dg/debug/using1.C2
-rw-r--r--gcc/testsuite/g++.dg/inherit/access8.C4
-rw-r--r--gcc/testsuite/g++.dg/inherit/pr30297.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/using51.C1
-rw-r--r--gcc/testsuite/g++.dg/template/crash13.C1
-rw-r--r--gcc/testsuite/g++.dg/template/using10.C2
-rw-r--r--gcc/testsuite/g++.dg/torture/pr39362.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/crash25.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/crash56.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/access1.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/access14.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/access8.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/unsorted1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/visibility22.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/visibility26.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p2746.C6
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/access3.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/access5.C2
21 files changed, 67 insertions, 23 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 50659896501..3d2c5de0791 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2011-12-31 Fabien ChĂȘne <fabien@gcc.gnu.org>
+
+ * parser.c (cp_parser_using_declaration): Add a warning about
+ deprecated access declarations when no errors were encountered
+ while parsing the access declaration. Save the first token in
+ order to emit the warning at the right place.
+
2011-12-31 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51397
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index d4947e7c5d4..0f5bb8e5709 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -14887,9 +14887,14 @@ cp_parser_using_declaration (cp_parser* parser,
tree decl;
tree identifier;
tree qscope;
+ int oldcount = errorcount;
+ cp_token *diag_token = NULL;
if (access_declaration_p)
- cp_parser_parse_tentatively (parser);
+ {
+ diag_token = cp_lexer_peek_token (parser->lexer);
+ cp_parser_parse_tentatively (parser);
+ }
else
{
/* Look for the `using' keyword. */
@@ -15000,7 +15005,13 @@ cp_parser_using_declaration (cp_parser* parser,
/* Look for the final `;'. */
cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
-
+
+ if (access_declaration_p && errorcount == oldcount)
+ warning_at (diag_token->location, OPT_Wdeprecated,
+ "access declarations are deprecated "
+ "in favour of using-declarations; "
+ "suggestion: add the %<using%> keyword");
+
return true;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f48bd72fe46..617ef117cc8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,25 @@
+2011-12-31 Fabien ChĂȘne <fabien@gcc.gnu.org>
+
+ * g++.old-deja/g++.brendan/crash25.C: Adjust.
+ * g++.old-deja/g++.brendan/crash56.C: Likewise.
+ * g++.old-deja/g++.jason/access14.C: Likewise.
+ * g++.old-deja/g++.jason/access8.C: Likewise.
+ * g++.old-deja/g++.jason/access1.C: Likewise.
+ * g++.old-deja/g++.other/access3.C: Likewise.
+ * g++.old-deja/g++.other/access5.C: Likewise.
+ * g++.old-deja/g++.law/unsorted1.C: Likewise.
+ * g++.old-deja/g++.law/visibility22.C: Likewise.
+ * g++.old-deja/g++.law/visibility26.C: Likewise.
+ * g++.old-deja/g++.mike/p2746.C: Likewise.
+ * g++.dg/debug/using1.C: Likewise.
+ * g++.dg/lookup/using51.C: Likewise.
+ * g++.dg/inherit/using5.C: Likewise.
+ * g++.dg/inherit/pr30297.C: Likewise.
+ * g++.dg/inherit/access8.C: Likewise.
+ * g++.dg/torture/pr39362.C: Likewise.
+ * g++.dg/template/crash13.C: Likewise.
+ * g++.dg/template/using10.C: Likewise.
+
2012-01-01 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/51502
diff --git a/gcc/testsuite/g++.dg/debug/using1.C b/gcc/testsuite/g++.dg/debug/using1.C
index d3168fc6c1c..7b13e53bb09 100644
--- a/gcc/testsuite/g++.dg/debug/using1.C
+++ b/gcc/testsuite/g++.dg/debug/using1.C
@@ -9,7 +9,7 @@ struct A
struct B : public A
{
- A::d;
+ A::d; // { dg-warning "deprecated" }
};
B b;
diff --git a/gcc/testsuite/g++.dg/inherit/access8.C b/gcc/testsuite/g++.dg/inherit/access8.C
index a11ea8e0494..310b7a01a39 100644
--- a/gcc/testsuite/g++.dg/inherit/access8.C
+++ b/gcc/testsuite/g++.dg/inherit/access8.C
@@ -13,8 +13,8 @@ public:
class B : private A
{
public:
- A::i;
- A::A1;
+ A::i; // { dg-warning "deprecated" }
+ A::A1; // { dg-warning "deprecated" }
};
void
diff --git a/gcc/testsuite/g++.dg/inherit/pr30297.C b/gcc/testsuite/g++.dg/inherit/pr30297.C
index 222d9ab8059..a8edf84852b 100644
--- a/gcc/testsuite/g++.dg/inherit/pr30297.C
+++ b/gcc/testsuite/g++.dg/inherit/pr30297.C
@@ -7,5 +7,5 @@ struct A
extern "C" struct B : A
{
- A::i;
+ A::i; // { dg-warning "deprecated" }
};
diff --git a/gcc/testsuite/g++.dg/lookup/using51.C b/gcc/testsuite/g++.dg/lookup/using51.C
index 8438f7f2cc8..8e3e56b056f 100644
--- a/gcc/testsuite/g++.dg/lookup/using51.C
+++ b/gcc/testsuite/g++.dg/lookup/using51.C
@@ -1,5 +1,6 @@
// PR c++/51382
// { dg-do compile }
+// { dg-options "-Wno-deprecated" }
template< int Value >
struct Base
diff --git a/gcc/testsuite/g++.dg/template/crash13.C b/gcc/testsuite/g++.dg/template/crash13.C
index e8e05945662..14bec68e9b3 100644
--- a/gcc/testsuite/g++.dg/template/crash13.C
+++ b/gcc/testsuite/g++.dg/template/crash13.C
@@ -13,6 +13,7 @@ template <typename T> struct C
{
typedef typename A<T>::B X;
X::Y; // { dg-error "not a base type" }
+// { dg-warning "deprecated" "" { target *-*-* } 15 }
};
C<void> c;
diff --git a/gcc/testsuite/g++.dg/template/using10.C b/gcc/testsuite/g++.dg/template/using10.C
index 8f0cbda2a88..902773cd51d 100644
--- a/gcc/testsuite/g++.dg/template/using10.C
+++ b/gcc/testsuite/g++.dg/template/using10.C
@@ -7,5 +7,5 @@ struct B {
template <typename T> class I : public B {};
template <typename T> class D : private I<T> {
- I<T>::B::foo;
+ I<T>::B::foo; // { dg-warning "deprecated" }
};
diff --git a/gcc/testsuite/g++.dg/torture/pr39362.C b/gcc/testsuite/g++.dg/torture/pr39362.C
index e7b0774d96f..554f9d06bac 100644
--- a/gcc/testsuite/g++.dg/torture/pr39362.C
+++ b/gcc/testsuite/g++.dg/torture/pr39362.C
@@ -57,7 +57,7 @@ template <typename T> struct I <T, 0> : H <T>
I (int capacity) { allocateBuffer (capacity); }
~I () { this->deallocateBuffer (buffer ()); }
using H <T>::allocateBuffer;
- H <T>::buffer;
+ H <T>::buffer; // { dg-warning "deprecated" }
};
template <typename T, int cap = 0> struct J
{
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C
index dece6f7dcb7..0c9b963ef25 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C
@@ -14,5 +14,5 @@ public:
class buff_head : private port_head {
public:
static int rep;
- port_head::cap;
+ port_head::cap; // { dg-warning "deprecated" }
};
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C
index e3bff80e610..776041519eb 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C
@@ -1,5 +1,5 @@
// { dg-do assemble }
-// { dg-options "" }
+// { dg-options "-Wno-deprecated" }
// GROUPS passed old-abort
const bool FALSE = 0;
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access1.C b/gcc/testsuite/g++.old-deja/g++.jason/access1.C
index 9d7104105b4..e7065d9baa0 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/access1.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/access1.C
@@ -8,10 +8,10 @@ public:
class B: private A {
public:
- A::foo;
+ A::foo; // { dg-warning "deprecated" }
};
void foo() {
B b;
- b.foo (); // { dg-bogus "" }
+ b.foo (); // { dg-bogus "" }
}
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access14.C b/gcc/testsuite/g++.old-deja/g++.jason/access14.C
index baebfe4cfc0..7edc85764a0 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/access14.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/access14.C
@@ -4,7 +4,7 @@ template <class T> struct A { T t; };
template <class T> class B: private T {
public:
- T::t; // { dg-bogus "" } doesn't recognize access decl
+ T::t; // { dg-warning "deprecated" }
};
template class B<A<int> >;
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access8.C b/gcc/testsuite/g++.old-deja/g++.jason/access8.C
index 0297c106b9e..c488ef76765 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/access8.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/access8.C
@@ -12,7 +12,7 @@ protected:
class mel : private inh {
protected:
int t;
- inh::myf;
+ inh::myf; // { dg-warning "deprecated" }
};
class top_t : protected mel {
diff --git a/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C b/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C
index c220d9936b9..14f9ee033a7 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C
@@ -20,7 +20,7 @@ class B : public A {
class C : private B {
public:
- B::func;
+ B::func; // { dg-warning "deprecated" }
};
class D {
diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility22.C b/gcc/testsuite/g++.old-deja/g++.law/visibility22.C
index f97ef814763..e3d9d1f6d00 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/visibility22.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/visibility22.C
@@ -19,7 +19,7 @@ public:
class B : private A {
protected:
- A::f;
+ A::f; // { dg-warning "deprecated" }
public:
- A::g;
+ A::g; // { dg-warning "deprecated" }
};
diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility26.C b/gcc/testsuite/g++.old-deja/g++.law/visibility26.C
index cfef2df504f..a6e702180af 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/visibility26.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/visibility26.C
@@ -14,5 +14,7 @@ class X {
class Y : private X {
public:
void f(int);
- X::f; // used to be an error; now equivalent to 'using X::f'
+
+ // 'X::f' used to be an error; now equivalent to 'using X::f'
+ X::f; // { dg-warning "deprecated" }
};
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2746.C b/gcc/testsuite/g++.old-deja/g++.mike/p2746.C
index 1bc1ce3591e..3e68740e232 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p2746.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p2746.C
@@ -86,7 +86,7 @@ public:
void remove(T *p) { IListBase::remove(p); }
T *head() { return (T *)IListBase::head(); }
T *get() { return (T *)IListBase::get(); }
- IListBase::empty;
+ IListBase::empty; // { dg-warning "deprecated" }
friend class IListIter<T>;
};
@@ -136,8 +136,8 @@ class IListIter : private IListIterBase {
public:
IListIter(const IList<T> &list) : IListIterBase(list) { }
T *cur() { return (T *)IListIterBase::cur(); }
- IListIterBase::next;
- IListIterBase::done;
+ IListIterBase::next; // { dg-warning "deprecated" }
+ IListIterBase::done; // { dg-warning "deprecated" }
};
diff --git a/gcc/testsuite/g++.old-deja/g++.other/access3.C b/gcc/testsuite/g++.old-deja/g++.other/access3.C
index 4752ac8a8da..41760899841 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/access3.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/access3.C
@@ -10,7 +10,7 @@ struct A
struct B: private virtual A
{
- A::f;
+ A::f; // { dg-warning "deprecated" }
};
struct C: private virtual A, public B
diff --git a/gcc/testsuite/g++.old-deja/g++.other/access5.C b/gcc/testsuite/g++.old-deja/g++.other/access5.C
index 431ba416aac..a6364c567a6 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/access5.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/access5.C
@@ -9,7 +9,7 @@ protected:
class B : private A
{
protected:
- A::i;
+ A::i; // { dg-warning "deprecated" }
};
struct C : public B {