DR 2179
DR 2179 * pt.c (process_partial_specialization): Handle error_mark_node from most_specialized_partial_spec. From-SVN: r229395
This commit is contained in:
parent
59010ede55
commit
6337bd75e2
|
@ -1,3 +1,9 @@
|
|||
2015-10-25 Jason Merrill <jason@redhat.com>
|
||||
|
||||
DR 2179
|
||||
* pt.c (process_partial_specialization): Handle error_mark_node
|
||||
from most_specialized_partial_spec.
|
||||
|
||||
2015-10-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
DR 1518
|
||||
|
|
20
gcc/cp/pt.c
20
gcc/cp/pt.c
|
@ -4690,14 +4690,18 @@ process_partial_specialization (tree decl)
|
|||
: DECL_TEMPLATE_INSTANTIATION (instance))
|
||||
{
|
||||
tree spec = most_specialized_partial_spec (instance, tf_none);
|
||||
if (spec && TREE_VALUE (spec) == tmpl)
|
||||
{
|
||||
tree inst_decl = (DECL_P (instance)
|
||||
? instance : TYPE_NAME (instance));
|
||||
permerror (input_location,
|
||||
"partial specialization of %qD after instantiation "
|
||||
"of %qD", decl, inst_decl);
|
||||
}
|
||||
tree inst_decl = (DECL_P (instance)
|
||||
? instance : TYPE_NAME (instance));
|
||||
if (!spec)
|
||||
/* OK */;
|
||||
else if (spec == error_mark_node)
|
||||
permerror (input_location,
|
||||
"declaration of %qD ambiguates earlier template "
|
||||
"instantiation for %qD", decl, inst_decl);
|
||||
else if (TREE_VALUE (spec) == tmpl)
|
||||
permerror (input_location,
|
||||
"partial specialization of %qD after instantiation "
|
||||
"of %qD", decl, inst_decl);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// DR 2179
|
||||
|
||||
template <class T1, class T2> class A;
|
||||
template <class T> struct A<T, void> { void f(); };
|
||||
template <class T> void g(T) { A<char, void>().f(); } // #1
|
||||
template<typename T> struct A<char, T> {}; // { dg-error "" }
|
||||
A<char, void> f; // #2
|
Loading…
Reference in New Issue