Commit 1b5f5f76 by Mark Mitchell Committed by Mark Mitchell

decl2.c (import_export_decl): Use same_type_p, rather than relying on pointer-equality for types.

	* decl2.c (import_export_decl): Use same_type_p, rather than
	relying on pointer-equality for types.
	* method.c (do_build_copy_constructor): Simplify.

From-SVN: r27555
parent 78d114ef
1999-06-16 Mark Mitchell <mark@codesourcery.com> 1999-06-16 Mark Mitchell <mark@codesourcery.com>
* decl2.c (import_export_decl): Use same_type_p, rather than
relying on pointer-equality for types.
* method.c (do_build_copy_constructor): Simplify.
* call.c (build_method_call): Remove bogus code for two-argument * call.c (build_method_call): Remove bogus code for two-argument
delete. delete.
* init.c (build_new_1): Expand on comment, and remove dead code. * init.c (build_new_1): Expand on comment, and remove dead code.
......
...@@ -2807,7 +2807,7 @@ import_export_decl (decl) ...@@ -2807,7 +2807,7 @@ import_export_decl (decl)
since it will not be emitted when the vtable for the type since it will not be emitted when the vtable for the type
is output (which is when the unqualified version is is output (which is when the unqualified version is
generated). */ generated). */
&& ctype == TYPE_MAIN_VARIANT (ctype)) && same_type_p (ctype, TYPE_MAIN_VARIANT (ctype)))
{ {
DECL_NOT_REALLY_EXTERN (decl) DECL_NOT_REALLY_EXTERN (decl)
= ! (CLASSTYPE_INTERFACE_ONLY (ctype) = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
...@@ -2818,7 +2818,8 @@ import_export_decl (decl) ...@@ -2818,7 +2818,8 @@ import_export_decl (decl)
if (flag_weak) if (flag_weak)
comdat_linkage (decl); comdat_linkage (decl);
} }
else if (TYPE_BUILT_IN (ctype) && ctype == TYPE_MAIN_VARIANT (ctype)) else if (TYPE_BUILT_IN (ctype)
&& same_type_p (ctype, TYPE_MAIN_VARIANT (ctype)))
DECL_NOT_REALLY_EXTERN (decl) = 0; DECL_NOT_REALLY_EXTERN (decl) = 0;
else else
comdat_linkage (decl); comdat_linkage (decl);
......
...@@ -2231,42 +2231,21 @@ do_build_copy_constructor (fndecl) ...@@ -2231,42 +2231,21 @@ do_build_copy_constructor (fndecl)
tree binfos = TYPE_BINFO_BASETYPES (current_class_type); tree binfos = TYPE_BINFO_BASETYPES (current_class_type);
int i; int i;
/* Initialize all the base-classes. */
for (t = CLASSTYPE_VBASECLASSES (current_class_type); t; for (t = CLASSTYPE_VBASECLASSES (current_class_type); t;
t = TREE_CHAIN (t)) t = TREE_CHAIN (t))
{ current_base_init_list
tree basetype = BINFO_TYPE (t); = tree_cons (BINFO_TYPE (t), parm, current_base_init_list);
tree p = convert_to_reference
(build_reference_type (basetype), parm,
CONV_IMPLICIT|CONV_CONST, LOOKUP_COMPLAIN, NULL_TREE);
p = convert_from_reference (p);
if (p == error_mark_node)
cp_error ("in default copy constructor");
else
current_base_init_list = tree_cons (basetype,
p, current_base_init_list);
}
for (i = 0; i < n_bases; ++i) for (i = 0; i < n_bases; ++i)
{ {
tree p, basetype = TREE_VEC_ELT (binfos, i); t = TREE_VEC_ELT (binfos, i);
if (TREE_VIA_VIRTUAL (basetype)) if (TREE_VIA_VIRTUAL (t))
continue; continue;
basetype = BINFO_TYPE (basetype); current_base_init_list
p = convert_to_reference = tree_cons (BINFO_TYPE (t), parm, current_base_init_list);
(build_reference_type (basetype), parm,
CONV_IMPLICIT|CONV_CONST, LOOKUP_COMPLAIN, NULL_TREE);
if (p == error_mark_node)
cp_error ("in default copy constructor");
else
{
p = convert_from_reference (p);
current_base_init_list = tree_cons (basetype,
p, current_base_init_list);
}
} }
for (; fields; fields = TREE_CHAIN (fields)) for (; fields; fields = TREE_CHAIN (fields))
{ {
tree init, t; tree init, t;
......
// Build don't link:
// Origin: Mike Danylchuk <miked@mpath.com>
typedef char TCHAR;
int main()
{
try {}
catch( TCHAR* Err ) {}
}
// Origin: Mark Mitchell <mark@codesourcery.com>
int i;
struct B {
B () {}
B (B&) { i = 1; }
B (const B&) { i = 2; }
};
struct D : public B {
D () {}
};
int main ()
{
D d;
D d2 (d);
if (i != 2)
return 1;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment