diff options
author | Jason Merrill <jason@redhat.com> | 2014-02-21 16:57:49 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-02-21 16:57:49 -0500 |
commit | d723358d0167b16e3fdffe71e4e5267e3ce01a5f (patch) | |
tree | 4798be7b7948323d5b1d823e6da7148a2dfa189a | |
parent | c754ffcc4c79086eb49f534db5d353a8041a9c12 (diff) | |
download | gcc-d723358d0167b16e3fdffe71e4e5267e3ce01a5f.zip gcc-d723358d0167b16e3fdffe71e4e5267e3ce01a5f.tar.gz gcc-d723358d0167b16e3fdffe71e4e5267e3ce01a5f.tar.bz2 |
re PR c++/60108 ([C++11] ICE in use_thunk, at cp/method.c:340)
PR c++/60108
* semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
From-SVN: r208030
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted48.C | 17 |
3 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ceecb8a..53f6c21 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2014-02-21 Jason Merrill <jason@redhat.com> + PR c++/60108 + * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN. + PR c++/60185 * parser.c (cp_parser_default_argument): Clear current_class_ptr/current_class_ref like tsubst_default_argument. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 6f32496..85d6807 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -3986,7 +3986,7 @@ expand_or_defer_fn_1 (tree fn) linkage of all functions, and as that causes writes to the data mapped in from the PCH file, it's advantageous to mark the functions at this point. */ - if (!DECL_IMPLICIT_INSTANTIATION (fn)) + if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn)) { /* This function must have external linkage, as otherwise DECL_INTERFACE_KNOWN would have been diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted48.C b/gcc/testsuite/g++.dg/cpp0x/defaulted48.C new file mode 100644 index 0000000..727afc5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted48.C @@ -0,0 +1,17 @@ +// PR c++/60108 +// { dg-require-effective-target c++11 } + +template<int> struct A +{ + virtual ~A(); +}; + +template<typename> struct B : A<0>, A<1> +{ + ~B() = default; +}; + +struct C : B<bool> +{ + C() {} +}; |