+2015-09-16 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/67253
+ * cfgexpand.c (expand_gimple_stmt_1): Do not clobber
+ location of possibly shared trees.
+
2015-09-16 Richard Biener <rguenther@suse.de>
PR middle-end/67271
tree rhs = gimple_assign_rhs1 (assign_stmt);
gcc_assert (get_gimple_rhs_class (gimple_expr_code (stmt))
== GIMPLE_SINGLE_RHS);
- if (gimple_has_location (stmt) && CAN_HAVE_LOCATION_P (rhs))
+ if (gimple_has_location (stmt) && CAN_HAVE_LOCATION_P (rhs)
+ /* Do not put locations on possibly shared trees. */
+ && !is_gimple_min_invariant (rhs))
SET_EXPR_LOCATION (rhs, gimple_location (stmt));
if (TREE_CLOBBER_P (rhs))
/* This is a clobber to mark the going out of scope for
+2015-09-16 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/67253
+ * gcc.dg/torture/pr67253.c: New testcase.
+
2015-09-16 Richard Biener <rguenther@suse.de>
PR middle-end/67271
--- /dev/null
+/* { dg-do run } */
+
+int *a, b, c, **d = &a, e, f, **h, i, j, k, l, m, *n, o, **q, r, s;
+
+void fn1 (int p) { }
+
+void
+fn3 ()
+{
+ for (; j; j++)
+ for (; k; k++)
+ l++;
+ f++;
+}
+
+static int
+fn4 (char p1, int *p2)
+{
+ for (; m < 1;)
+ {
+ fn1 (q == &p2);
+ for (; o; o++)
+ ;
+ n = p2;
+ return 0;
+ }
+ for (;;)
+ {
+ for (; s; s++)
+ b = r;
+ *d = 0;
+ }
+}
+
+static int *fn2 (char, int, int *);
+
+static int
+fn5 ()
+{
+ int *g = &c;
+ fn3 ();
+ fn2 (0, 0, g);
+ return e;
+}
+
+static int *
+fn2 (char p1, int p2, int *p3)
+{
+ fn4 (0, p3);
+ fn1 (&p3 == h);
+ for (; i;)
+ fn5 ();
+ fn4 (0, p3);
+ return *d;
+}
+
+int
+main ()
+{
+ fn5 ();
+ return 0;
+}