@@ -4677,7 +4677,7 @@ enum cp_lvalue_kind_flags {
clk_none = 0, /* Things that are not an lvalue. */
clk_ordinary = 1, /* An ordinary lvalue. */
clk_rvalueref = 2,/* An xvalue (rvalue formed using an rvalue reference) */
- clk_class = 4, /* A prvalue of class-type. */
+ clk_class = 4, /* A prvalue of class or array type. */
clk_bitfield = 8, /* An lvalue for a bit-field. */
clk_packed = 16 /* An lvalue for a packed field. */
};
@@ -243,7 +243,8 @@ lvalue_kind (const_tree ref)
default:
if (!TREE_TYPE (ref))
return clk_none;
- if (CLASS_TYPE_P (TREE_TYPE (ref)))
+ if (CLASS_TYPE_P (TREE_TYPE (ref))
+ || TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE)
return clk_class;
break;
}
new file mode 100644
@@ -0,0 +1,7 @@
+// PR c++/80415
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A(int, int, const int (&)[1] = {});
+};
+A fn1() { return {0, 0}; }