@@ -814,7 +814,8 @@ build_cplus_array_type (tree elt_type, t
/* If we built a new array type for TYPE_CANONICAL, add
that to the list of variants as well. */
- if (c && c != t && TYPE_MAIN_VARIANT (c) != m)
+ if (c && c != t && TYPE_MAIN_VARIANT (c) != m
+ && TYPE_MAIN_VARIANT (TREE_TYPE (c)) == TYPE_MAIN_VARIANT (elt_type))
{
TYPE_MAIN_VARIANT (c) = m;
TYPE_NEXT_VARIANT (c) = t;
@@ -0,0 +1,9 @@
+// PR c++/54038
+
+extern const char *const v[];
+typedef char T;
+void foo (const T *const[]);
+struct A
+{
+ static const char *const a[];
+};