+2007-11-12 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR c++/8570
+ * pt.c (redeclare_class_template): Update error message. Use a
+ note to show the previous declaration.
+ (tsubst_friend_class): Use the location of the friend template as
+ the input location before calling redeclare_class_template.
+
2007-11-11 Jakub Jelinek <jakub@redhat.com>
PR c++/34068
if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
{
- error ("previous declaration %q+D", tmpl);
- error ("used %d template parameter(s) instead of %d",
- TREE_VEC_LENGTH (tmpl_parms),
- TREE_VEC_LENGTH (parms));
+ error ("redeclared with %d template parameter(s)",
+ TREE_VEC_LENGTH (parms));
+ inform ("previous declaration %q+D used %d template parameter(s)",
+ tmpl, TREE_VEC_LENGTH (tmpl_parms));
return false;
}
A template-parameter may not be given default arguments
by two different declarations in the same scope. */
error ("redefinition of default argument for %q#D", parm);
- error ("%J original definition appeared here", tmpl_parm);
+ inform ("%Joriginal definition appeared here", tmpl_parm);
return false;
}
> TMPL_ARGS_DEPTH (args))
{
tree parms;
+ location_t saved_input_location;
parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
args, tf_warning_or_error);
+
+ saved_input_location = input_location;
+ input_location = DECL_SOURCE_LOCATION (friend_tmpl);
redeclare_class_template (TREE_TYPE (tmpl), parms);
+ input_location = saved_input_location;
+
}
friend_type = TREE_TYPE (tmpl);
+2007-11-12 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR c++/8570
+ * g++.old-deja/g++.ns/template13.C: Update expected output.
+ * g++.old-deja/g++.pt/friend23.C: Likewise.
+ * g++.dg/warn/pr8570.C: New.
+
2007-11-11 Jakub Jelinek <jakub@redhat.com>
PR c++/34068
// trick it to provide some prior declaration
template<class T>
void foo(); // { dg-error "definition" }
- template<class T>class X; // { dg-error "previous declaration" }
+ template<class T>class X; // { dg-error "note: previous declaration" }
}
template <typename T>
}
template<class T,class U>
-class bar::X{}; // { dg-error "1 template parameter" }
+class bar::X{}; // { dg-error "error: redeclared with 2 template parameter" }