PR c++/92576 - redeclaration of variable template.
The variable templates patch way back when forgot to add handling here. The simplest answer seems to be recursing to the underlying declaration. * decl.c (redeclaration_error_message): Recurse for variable templates. From-SVN: r279472
This commit is contained in:
parent
490a091fa7
commit
9c7b2b0ba8
@ -1,3 +1,9 @@
|
||||
2019-12-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/92576 - redeclaration of variable template.
|
||||
* decl.c (redeclaration_error_message): Recurse for variable
|
||||
templates.
|
||||
|
||||
2019-12-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* name-lookup.c (get_std_name_hint): Add std::byte.
|
||||
|
@ -2977,20 +2977,14 @@ redeclaration_error_message (tree newdecl, tree olddecl)
|
||||
{
|
||||
tree nt, ot;
|
||||
|
||||
if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
|
||||
{
|
||||
if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
|
||||
&& COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
|
||||
return G_("redefinition of %q#D");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == CONCEPT_DECL)
|
||||
return G_("redefinition of %q#D");
|
||||
|
||||
if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
|
||||
|| (DECL_TEMPLATE_RESULT (newdecl)
|
||||
== DECL_TEMPLATE_RESULT (olddecl)))
|
||||
if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL)
|
||||
return redeclaration_error_message (DECL_TEMPLATE_RESULT (newdecl),
|
||||
DECL_TEMPLATE_RESULT (olddecl));
|
||||
|
||||
if (DECL_TEMPLATE_RESULT (newdecl) == DECL_TEMPLATE_RESULT (olddecl))
|
||||
return NULL;
|
||||
|
||||
nt = DECL_TEMPLATE_RESULT (newdecl);
|
||||
|
@ -4,4 +4,4 @@ template<typename T>
|
||||
bool V1 = true;
|
||||
|
||||
template<typename T>
|
||||
bool V1<int> = false; // { dg-error "primary template|not deducible" }
|
||||
bool V1<int> = false; // { dg-error "primary template|redefinition|not deducible" }
|
||||
|
5
gcc/testsuite/g++.dg/cpp1y/var-templ65.C
Normal file
5
gcc/testsuite/g++.dg/cpp1y/var-templ65.C
Normal file
@ -0,0 +1,5 @@
|
||||
// PR c++/84255
|
||||
// { dg-do compile { target c++14 } }
|
||||
|
||||
template<typename T> constexpr int var;
|
||||
template<typename T> constexpr int var = 1; // { dg-error "redefinition" }
|
Loading…
Reference in New Issue
Block a user