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:
parent
57f56af4c5
commit
cac78ea281
@ -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>
|
2000-11-20 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* parse.y (yyparse_1): Rename the parser entry point.
|
* parse.y (yyparse_1): Rename the parser entry point.
|
||||||
|
@ -9214,6 +9214,15 @@ do_decl_instantiation (declspecs, declarator, storage)
|
|||||||
cp_error ("storage class `%D' applied to template instantiation",
|
cp_error ("storage class `%D' applied to template instantiation",
|
||||||
storage);
|
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);
|
SET_DECL_EXPLICIT_INSTANTIATION (result);
|
||||||
mark_decl_instantiated (result, extern_p);
|
mark_decl_instantiated (result, extern_p);
|
||||||
repo_template_instantiated (result, extern_p);
|
repo_template_instantiated (result, extern_p);
|
||||||
|
12
gcc/testsuite/g++.old-deja/g++.other/ctor1-aux.cc
Normal file
12
gcc/testsuite/g++.old-deja/g++.other/ctor1-aux.cc
Normal 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);
|
||||||
|
}
|
14
gcc/testsuite/g++.old-deja/g++.other/ctor1.C
Normal file
14
gcc/testsuite/g++.old-deja/g++.other/ctor1.C
Normal 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);
|
Loading…
Reference in New Issue
Block a user