diff options
author | Jason Merrill <jason@redhat.com> | 2011-10-06 15:56:53 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-10-06 15:56:53 -0400 |
commit | 7e8ec1ec7028923fb402a5f0db4c86352afd1f6e (patch) | |
tree | 433d56c21e4ffb1ea01a4b2559487955991bff9c /gcc | |
parent | 885c4871afce89915b78c249750915b2717892b4 (diff) | |
download | gcc-7e8ec1ec7028923fb402a5f0db4c86352afd1f6e.zip gcc-7e8ec1ec7028923fb402a5f0db4c86352afd1f6e.tar.gz gcc-7e8ec1ec7028923fb402a5f0db4c86352afd1f6e.tar.bz2 |
re PR c++/39164 ([C++0x] defaulted dtor redefinition not caught)
PR c++/39164
* decl.c (grokfndecl): Diagnose redefinition of defaulted fn.
From-SVN: r179634
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted31.C | 16 |
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c8ca7c5..3d8442b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-10-06 Jason Merrill <jason@redhat.com> + + PR c++/39164 + * decl.c (grokfndecl): Diagnose redefinition of defaulted fn. + 2011-10-02 Jason Merrill <jason@redhat.com> * pt.c (tsubst_pack_expansion): Re-use ARGUMENT_PACK_SELECTs. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 30f92da..984d1f2 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7418,6 +7418,12 @@ grokfndecl (tree ctype, error ("definition of implicitly-declared %qD", old_decl); return NULL_TREE; } + else if (DECL_DEFAULTED_FN (old_decl)) + { + error ("definition of explicitly-defaulted %q+D", decl); + error ("%q+#D explicitly defaulted here", old_decl); + return NULL_TREE; + } /* Since we've smashed OLD_DECL to its DECL_TEMPLATE_RESULT, we must do the same to DECL. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ccd5187..97dac17 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-06 Jason Merrill <jason@redhat.com> + + PR c++/39164 + * g++.dg/cpp0x/default31.C: New. + 2011-10-06 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/50596 diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted31.C b/gcc/testsuite/g++.dg/cpp0x/defaulted31.C new file mode 100644 index 0000000..de6a298 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted31.C @@ -0,0 +1,16 @@ +// PR c++/39164 +// { dg-options -std=c++0x } + +struct A +{ + A() { } // { dg-error "defined" } + ~A() = default; // { dg-error "defaulted" } +}; + +A::A() = default; // { dg-error "redefinition" } +A::~A() noexcept (true) { } // { dg-error "defaulted" } + +int main() +{ + A a; +} |