We need to propagate DECL_DELETED_FN in duplicate_decls.

Tested x86_64-pc-linux-gnu, applying to trunk and 4.6.
commit 62d3da092d1252e7e0534fe2220c11b2050013e4
Author: Jason Merrill <ja...@redhat.com>
Date:   Fri May 20 18:05:46 2011 -0400

    	PR c++/49066
    	* decl.c (duplicate_decls): Preserve DECL_DELETED_FN.

diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 91df9ee..eae7d8e 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -1688,6 +1688,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
 	  error ("deleted definition of %qD", newdecl);
 	  error ("after previous declaration %q+D", olddecl);
 	}
+      DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
     }
 
   /* Deal with C++: must preserve virtual function table size.  */
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted26.C b/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
new file mode 100644
index 0000000..69bd0ac
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
@@ -0,0 +1,7 @@
+// PR c++/49066
+// { dg-options -std=c++0x }
+
+void foo() = delete;		// { dg-error "declared here" }
+void foo();
+
+int main() { foo(); }		// { dg-error "deleted" }

Reply via email to