--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftrivial-auto-var-init=pattern -Wuninitialized" } */
+/* { dg-additional-options "-mgeneral-regs-only" { target { aarch64-*-* x86_64-*-* i?86-*-* } } } */
+
+struct layer_mask {
+ unsigned int x : 17;
+ unsigned int y : 1;
+} __attribute__((__packed__)) __attribute__((__aligned__(sizeof (unsigned int))));
+struct layer_masks {
+ struct layer_mask layers[16];
+};
+
+void bar (struct layer_masks *);
+
+void foo ()
+{
+ struct layer_masks layer_masks; /* { dg-bogus "uninitialized" } */
+ bar (&layer_masks);
+}
&& single_imm_use (lhs, &luse_p, &use_stmt))
{
gassign *use_ass = dyn_cast <gassign *> (use_stmt);
- for (int i = 0; i < 2; ++i)
+ for (int i = 0; i < 4; ++i)
if (use_ass
&& (gimple_assign_rhs_code (use_ass) == BIT_AND_EXPR
- || gimple_assign_rhs_code (use_ass) == BIT_IOR_EXPR)
+ || gimple_assign_rhs_code (use_ass) == BIT_IOR_EXPR
+ || gimple_assign_rhs_code (use_ass) == VIEW_CONVERT_EXPR)
&& single_imm_use (gimple_assign_lhs (use_ass), &luse_p,
&use_stmt))
use_ass = dyn_cast <gassign *> (use_stmt);
+ else
+ break;
if (use_ass
&& gimple_vdef (use_ass)
&& operand_equal_p (gimple_assign_rhs1 (stmt),