diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2012-01-03 09:33:33 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2012-01-03 09:33:33 +0000 |
commit | da89f7f38e761dfded871bfa1715a35f70d66743 (patch) | |
tree | 03217a609a1c81535aa8c2766a24e47b72dfee91 | |
parent | a9730200523b035a4bb6db87b93811c170409443 (diff) | |
download | gcc-da89f7f38e761dfded871bfa1715a35f70d66743.zip gcc-da89f7f38e761dfded871bfa1715a35f70d66743.tar.gz gcc-da89f7f38e761dfded871bfa1715a35f70d66743.tar.bz2 |
re PR c++/15867 (-Wredundant-decls and explicit template specialization)
/cp
2012-01-03 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/15867
* decl.c (duplicate_decls): With -Wredundant-decls don't warn for
declaration followed by specialization.
/testsuite
2012-01-03 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/15867
* g++.dg/warn/Wredundant-decls-spec.C: New.
From-SVN: r182833
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C | 12 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index beee3bf..4f6faf5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/15867 + * decl.c (duplicate_decls): With -Wredundant-decls don't warn for + declaration followed by specialization. + 2012-01-03 Jakub Jelinek <jakub@redhat.com> PR c++/51669 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 48f3085..7daac5f 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1698,7 +1698,10 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) /* Don't warn about extern decl followed by definition. */ && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)) /* Don't warn about friends, let add_friend take care of it. */ - && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))) + && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)) + /* Don't warn about declaration followed by specialization. */ + && (! DECL_TEMPLATE_SPECIALIZATION (newdecl) + || DECL_TEMPLATE_SPECIALIZATION (olddecl))) { warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl); warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a75ef95..6ac425a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/15867 + * g++.dg/warn/Wredundant-decls-spec.C: New. + 2012-01-03 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/51719 diff --git a/gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C b/gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C new file mode 100644 index 0000000..b5c790f --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C @@ -0,0 +1,12 @@ +// PR c++/15867 +// { dg-options -Wredundant-decls } + +template <typename T> struct S +{ + void foo() {} +}; + +template<> void S<int>::foo(); + +template<> void S<double>::foo(); // { dg-warning "previous declaration" } +template<> void S<double>::foo(); // { dg-warning "redundant redeclaration" } |