diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f595a7c0c3a..74395d4ce67 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +1999-08-19 Mark Mitchell + + * pt.c (redeclare_class_template): Merge default template + arguments in both directions. + + * typeck.c (common_type): Undo 1999-08-18 change. Remove + compiler_error message. + 1999-08-19 Jason Merrill * cp-tree.h: Declare flag_use_repository. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5560beb8f12..1940cfe0d6f 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -2666,6 +2666,10 @@ redeclare_class_template (type, parms) /* Update the previous template parameters (which are the ones that will really count) with the new default value. */ TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default; + else if (tmpl_default != NULL_TREE) + /* Update the new parameters, too; they'll be used as the + parameters for any members. */ + TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default; } } diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 716fe19323d..8ebeed3fa45 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -698,13 +698,8 @@ common_type (t1, t2) tt1 = TYPE_MAIN_VARIANT (tt1); tt2 = TYPE_MAIN_VARIANT (tt2); - if (same_type_p (tt1, tt2)) + if (tt1 == tt2) target = tt1; - else if (b1) - { - compiler_error ("common_type called with uncommon member types"); - target = tt1; - } else if (tt1 == void_type_node || tt2 == void_type_node) target = void_type_node; else if (tt1 == unknown_type_node) diff --git a/gcc/testsuite/g++.old-deja/g++.pt/decl3.C b/gcc/testsuite/g++.old-deja/g++.pt/decl3.C new file mode 100644 index 00000000000..bdc25011abf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/decl3.C @@ -0,0 +1,5 @@ +// Build don't link: +// Origin: Jason Merrill + +template struct A; +template struct A { };