diff options
author | Jason Merrill <jason@redhat.com> | 2008-08-04 14:39:16 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2008-08-04 14:39:16 -0400 |
commit | 9b26c96e339b9e546ffe5ac2a114af397bf4cd17 (patch) | |
tree | 053116ba075582972aebfebdd7006475406bb701 | |
parent | 7eeef08ed83f2bd341dc420adc6402199ccbdd7d (diff) | |
download | gcc-9b26c96e339b9e546ffe5ac2a114af397bf4cd17.zip gcc-9b26c96e339b9e546ffe5ac2a114af397bf4cd17.tar.gz gcc-9b26c96e339b9e546ffe5ac2a114af397bf4cd17.tar.bz2 |
re PR c++/37006 (explicitly deleted inline function gives warning "used but never defined")
PR c++/37006
* pt.c (tsubst_decl): Leave DECL_INITIAL set on deleted
instantiations.
From-SVN: r138648
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted3.C | 16 |
3 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c40b989..1918189 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-08-04 Jason Merrill <jason@redhat.com> + + PR c++/37006 + * pt.c (tsubst_decl): Leave DECL_INITIAL set on deleted + instantiations. + 2008-08-04 Simon Baldwin <simonb@google.com> PR c++/36999 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 04fd29b..6e4f0ba 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8143,7 +8143,9 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) /* Clear out the mangled name and RTL for the instantiation. */ SET_DECL_ASSEMBLER_NAME (r, NULL_TREE); SET_DECL_RTL (r, NULL_RTX); - DECL_INITIAL (r) = NULL_TREE; + /* Leave DECL_INITIAL set on deleted instantiations. */ + if (!DECL_DELETED_FN (r)) + DECL_INITIAL (r) = NULL_TREE; DECL_CONTEXT (r) = ctx; if (member && DECL_CONV_FN_P (r)) diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted3.C b/gcc/testsuite/g++.dg/cpp0x/defaulted3.C new file mode 100644 index 0000000..efde415 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted3.C @@ -0,0 +1,16 @@ +// PR c++/37006 +// { dg-options "-std=c++0x" } + +template<class T> +struct A { + template<class U> + bool operator==(const A<U>&) = delete; // { dg-error "deleted function" } + operator bool () { return true; } +}; + +int main() +{ + A<int> a1; + A<void> a2; + if(a1 == a2) {} // { dg-error "used here" } +} |