diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a1b0aec802d..f4f04f20f0f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-05-23 Jason Merrill + PR c++/47544 + * pt.c (instantiate_decl): Handle =default. + PR c++/48617 * pt.c (invalid_nontype_parm_type_p): Allow DECLTYPE_TYPE. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 380b21efbca..429973302c7 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -17432,7 +17432,8 @@ instantiate_decl (tree d, int defer_ok, args = gen_args; if (TREE_CODE (d) == FUNCTION_DECL) - pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE); + pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE + || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)); else pattern_defined = ! DECL_IN_AGGR_P (code_pattern); @@ -17627,6 +17628,8 @@ instantiate_decl (tree d, int defer_ok, cp_finish_decl (d, init, const_init, NULL_TREE, 0); pop_nested_class (); } + else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern)) + synthesize_method (d); else if (TREE_CODE (d) == FUNCTION_DECL) { htab_t saved_local_specializations; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 47f0dac0991..3c18295fa6d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-05-23 Jason Merrill + * g++.dg/cpp0x/defaulted27.C: New. + * g++.dg/cpp0x/decltype27.C: New. 2011-05-23 Richard Guenther diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted27.C b/gcc/testsuite/g++.dg/cpp0x/defaulted27.C new file mode 100644 index 00000000000..7d9139d2373 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted27.C @@ -0,0 +1,19 @@ +// PR c++/47544 +// { dg-options -std=c++0x } +// { dg-final { scan-assembler "_ZN1sIiEC2Ev" } } +// { dg-final { scan-assembler-not "_ZN1sIiED2Ev" } } + +template +struct s { + s(); + ~s() = default; +}; + +extern template struct s; + +template +s::s() = default; + +template struct s; + +s a;