pt.c (do_decl_instantiate): Explicitly clone constructors and destructors that haven't already been cloned.

* pt.c (do_decl_instantiate): Explicitly clone constructors and
	destructors that haven't already been cloned.

From-SVN: r37673
This commit is contained in:
Mark Mitchell 2000-11-22 22:43:49 +00:00 committed by Mark Mitchell
parent 57f56af4c5
commit cac78ea281
4 changed files with 40 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2000-11-22 Mark Mitchell <mark@codesourcery.com>
* pt.c (do_decl_instantiate): Explicitly clone constructors and
destructors that haven't already been cloned.
2000-11-20 Richard Henderson <rth@redhat.com>
* parse.y (yyparse_1): Rename the parser entry point.

View File

@ -9214,6 +9214,15 @@ do_decl_instantiation (declspecs, declarator, storage)
cp_error ("storage class `%D' applied to template instantiation",
storage);
/* Under the new ABI, we need to make sure to instantiate all the
cloned versions of constructors or destructors. */
if (flag_new_abi &&
(DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (result) ||
DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (result)) &&
!(TREE_CHAIN (result) &&
DECL_CLONED_FUNCTION (TREE_CHAIN (result))))
clone_function_decl(result, /*update_method_vec_p=*/0);
SET_DECL_EXPLICIT_INSTANTIATION (result);
mark_decl_instantiated (result, extern_p);
repo_template_instantiated (result, extern_p);

View File

@ -0,0 +1,12 @@
// Origin: Mark Mitchell <mark@codesourcery.com>
template <class T>
struct S {
template <class U>
S (U);
};
int main ()
{
S<int> (3.0);
}

View File

@ -0,0 +1,14 @@
// Additional sources: ctor1-aux.cc
// Origin: Mark Mitchell <mark@codesourcery.com>
template <class T>
struct S {
template <class U>
S (U);
};
template <class T>
template <class U>
S<T>::S (U) {}
template S<int>::S (double);