diff options
author | Jason Merrill <jason@redhat.com> | 2011-10-18 15:36:28 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-10-18 15:36:28 -0400 |
commit | 15e0646fde23f549c224be5ba3ee9bd11eb748de (patch) | |
tree | a1100a8b4b514c22a4f0f025219d9d00f406feb8 | |
parent | d2f706418a847ebd9565638d76defc30ba9c30a0 (diff) | |
download | gcc-15e0646fde23f549c224be5ba3ee9bd11eb748de.zip gcc-15e0646fde23f549c224be5ba3ee9bd11eb748de.tar.gz gcc-15e0646fde23f549c224be5ba3ee9bd11eb748de.tar.bz2 |
re PR c++/50531 ([C++0x] ICE on defaulted template destructor)
PR c++/50531
* pt.c (instantiate_decl): Recognize when a function defaulted
outside the class is already instantiated.
From-SVN: r180162
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted32.C | 21 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 24ca654..402f5b5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-10-18 Jason Merrill <jason@redhat.com> + PR c++/50531 + * pt.c (instantiate_decl): Recognize when a function defaulted + outside the class is already instantiated. + PR c++/50742 * decl.c (check_previous_goto_1): Handle using-decl. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 6fc60d5..56fa632 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18045,6 +18045,8 @@ instantiate_decl (tree d, int defer_ok, d = DECL_CLONED_FUNCTION (d); if (DECL_TEMPLATE_INSTANTIATED (d) + || (TREE_CODE (d) == FUNCTION_DECL + && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d)) || DECL_TEMPLATE_SPECIALIZATION (d)) /* D has already been instantiated or explicitly specialized, so there's nothing for us to do here. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d2cf1a8..ed9a8e6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-10-18 Jason Merrill <jason@redhat.com> + PR c++/50531 + * g++.dg/cpp0x/defaulted32.C: New. + PR c++/50742 * g++.dg/lookup/using23.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted32.C b/gcc/testsuite/g++.dg/cpp0x/defaulted32.C new file mode 100644 index 0000000..351cdae1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted32.C @@ -0,0 +1,21 @@ +// PR c++/50531 +// { dg-options -std=c++0x } + +template <typename T> +class DataFilter +{ + public: + inline virtual ~DataFilter(); +}; + +template<typename T> +inline DataFilter<T>::~DataFilter() = default; + +class ARCalculator : public DataFilter<ARCalculator> +{ + public: + virtual void dataStart(int, int); +}; + +void ARCalculator::dataStart(int, int) +{} |