SRA can get a bit confused with zero-sized accesses like the one in
the testcase. Since there is nothing in the access, nothing is
scalarized, but we can get order of the structures wrong, which the
verifier is not happy about.
Fixed by simply ignoring such accesses.
2020-02-19 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/93776
* tree-sra.c (create_access): Do not create zero size accesses.
(get_access_for_expr): Do not search for zero sized accesses.
testsuite/
* gcc.dg/tree-ssa/pr93776.c: New test.
+2020-02-19 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/93776
+ * tree-sra.c (create_access): Do not create zero size accesses.
+ (get_access_for_expr): Do not search for zero sized accesses.
+
2020-02-19 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/93667
+2020-02-19 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/93776
+ * gcc.dg/tree-ssa/pr93776.c: New test.
+
2020-02-19 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/93667
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+struct empty {};
+struct s { int i; };
+struct z
+{
+ int j;
+ struct empty e;
+ struct s s;
+ int k;
+};
+
+void bar (struct z);
+void baz (int);
+
+void foo (void)
+{
+ struct z z, z2;
+
+ z.k = 8;
+ z2.s.i = 1;
+ z = z2;
+ bar (z);
+ z.e = (struct empty) {};
+ baz (z.k);
+}
size = max_size;
unscalarizable_region = true;
}
+ if (size == 0)
+ return NULL;
if (size < 0)
{
disqualify_candidate (base, "Encountered an unconstrained access.");
return NULL;
}
- if (!bitmap_bit_p (candidate_bitmap, DECL_UID (base)))
+ if (max_size == 0
+ || !bitmap_bit_p (candidate_bitmap, DECL_UID (base)))
return NULL;
return get_var_base_offset_size_access (base, offset, max_size);