diff options
author | Jason Merrill <jason@redhat.com> | 2013-04-19 12:28:03 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2013-04-19 12:28:03 -0400 |
commit | 86c0810c726e89e35cf5c0c037953164e8d38ae0 (patch) | |
tree | fefc11037e553d58909670aa93011beec49ca734 /gcc | |
parent | f6b64c35014ca111711e753be85bb99280a1e115 (diff) | |
download | gcc-86c0810c726e89e35cf5c0c037953164e8d38ae0.zip gcc-86c0810c726e89e35cf5c0c037953164e8d38ae0.tar.gz gcc-86c0810c726e89e35cf5c0c037953164e8d38ae0.tar.bz2 |
DR 941
DR 941
* decl.c (duplicate_decls): Don't propagate DECL_DELETED_FN to
template specializations.
From-SVN: r198098
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted42.C | 10 |
3 files changed, 24 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 94e29af..9d6ad14 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-04-19 Jason Merrill <jason@redhat.com> + + DR 941 + * decl.c (duplicate_decls): Don't propagate DECL_DELETED_FN to + template specializations. + 2013-04-16 Ed Smith-Rowland <3dw4rd@verizon.net> Implement n3599 - Literal operator templates for strings. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 01804d2..3328812 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1764,12 +1764,16 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl); } - if (DECL_DELETED_FN (newdecl)) + if (!(DECL_TEMPLATE_INSTANTIATION (olddecl) + && DECL_TEMPLATE_SPECIALIZATION (newdecl))) { - error ("deleted definition of %qD", newdecl); - error ("after previous declaration %q+D", olddecl); + if (DECL_DELETED_FN (newdecl)) + { + error ("deleted definition of %qD", newdecl); + error ("after previous declaration %q+D", olddecl); + } + DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (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/defaulted42.C b/gcc/testsuite/g++.dg/cpp0x/defaulted42.C new file mode 100644 index 0000000..1ac25a9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted42.C @@ -0,0 +1,10 @@ +// DR 941 +// { dg-require-effective-target c++11 } + +template <class T> T f(T) = delete; +template<> int f(int) { return 42; } + +int main() +{ + f(42); +} |