+Fri Apr 17 00:24:22 1998 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (duplicate_decls): Fix check for when it's safe to free
+ the new decl.
+
+ * pt.c (mangle_class_name_for_template): Don't pass a typedef type
+ to type_as_string.
+ From Mark Mitchell:
+ (unify): Use comptypes to compare type args.
+
Thu Apr 16 17:47:30 1998 Jeffrey A Law (law@cygnus.com)
* pt.c (build_template_parm_index): Add prototype.
TREE_VALUE (decls) = olddecl;
}
- if ((char *)newdecl + ROUND (function_size)
- + ROUND (sizeof (struct lang_decl))
- == obstack_next_free (&permanent_obstack))
+ if (((char *)newdecl + ROUND (function_size) == (char *)nl
+ && ((char *)newdecl + ROUND (function_size)
+ + ROUND (sizeof (struct lang_decl))
+ == obstack_next_free (&permanent_obstack)))
+ || ((char *)newdecl + ROUND (function_size)
+ == obstack_next_free (&permanent_obstack)))
{
DECL_MAIN_VARIANT (newdecl) = olddecl;
DECL_LANG_SPECIFIC (olddecl) = ol;
char* s;
if (TREE_CODE (ctx) == FUNCTION_DECL)
- s = fndecl_as_string(ctx, 0);
+ s = fndecl_as_string (ctx, 0);
else if (TREE_CODE_CLASS (TREE_CODE (ctx)) == 't')
- s = type_as_string(ctx, 0);
+ {
+ /* We can't use a typedef type name here. */
+ ctx = build_type_variant (TYPE_MAIN_VARIANT (ctx),
+ TYPE_READONLY (ctx),
+ TYPE_VOLATILE (ctx));
+ s = type_as_string (ctx, 0);
+ }
else
my_friendly_abort (0);
cat (s);
if (i)
ccat (',');
+ /* We can't use a typedef type name here. */
+ if (TREE_CODE_CLASS (TREE_CODE (arg)) == 't')
+ arg = build_type_variant (TYPE_MAIN_VARIANT (arg),
+ TYPE_READONLY (arg),
+ TYPE_VOLATILE (arg));
+
if (TREE_CODE (parm) == TYPE_DECL)
{
cat (type_as_string (arg, 0));
}
#endif
/* Simple cases: Value already set, does match or doesn't. */
- if (targ == arg || (targ && explicit_mask && explicit_mask[idx]))
+ if (targ != NULL_TREE
+ && (comptypes (targ, arg, 1)
+ || (explicit_mask && explicit_mask[idx])))
return 0;
else if (targ)
return 1;
}
/* Simple cases: Value already set, does match or doesn't. */
- if (targ == arg || (targ && explicit_mask && explicit_mask[idx]))
+ if (targ != NULL_TREE
+ && (comptypes (targ, arg, 1)
+ || (explicit_mask && explicit_mask[idx])))
return 0;
else if (targ)
return 1;