aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-10-06 15:56:53 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-10-06 15:56:53 -0400
commit7e8ec1ec7028923fb402a5f0db4c86352afd1f6e (patch)
tree433d56c21e4ffb1ea01a4b2559487955991bff9c /gcc
parent885c4871afce89915b78c249750915b2717892b4 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/decl.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted31.C16
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;
+}