+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.
{
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);
--- /dev/null
+// 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" }