+2017-05-10 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2017-02-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79732
+ * tree-inline.c (expand_call_inline): Handle anonymous
+ SSA lhs properly when inlining a function without return
+ value.
+
+ 2017-02-22 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79666
+ * tree-vrp.c (extract_range_from_binary_expr_1): Make sure
+ to not symbolically negate if that may introduce undefined
+ overflow.
+
2017-05-10 Richard Biener <rguenther@suse.de>
Backport from mainline
+2017-05-10 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ PR c/79756
+ * c-common.c (c_common_mark_addressable_vec): Look through
+ C_MAYBE_CONST_EXPR.
+
2017-03-22 Martin Liska <mliska@suse.cz>
Backport from mainline
void
c_common_mark_addressable_vec (tree t)
{
+ if (TREE_CODE (t) == C_MAYBE_CONST_EXPR)
+ t = C_MAYBE_CONST_EXPR_EXPR (t);
while (handled_component_p (t))
t = TREE_OPERAND (t, 0);
if (!VAR_P (t)
+2017-05-10 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2017-03-06 Richard Biener <rguenther@suse.de>
+
+ PR fortran/79894
+ * trans.c (gfc_add_modify_loc): Weaken assert.
+
2017-05-01 Janus Weil <janus@gcc.gnu.org>
Backport from trunk
tree t1, t2;
t1 = TREE_TYPE (rhs);
t2 = TREE_TYPE (lhs);
- /* Make sure that the types of the rhs and the lhs are the same
+ /* Make sure that the types of the rhs and the lhs are compatible
for scalar assignments. We should probably have something
similar for aggregates, but right now removing that check just
breaks everything. */
- gcc_assert (t1 == t2
+ gcc_assert (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)
|| AGGREGATE_TYPE_P (TREE_TYPE (lhs)));
#endif
+2017-05-10 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2017-03-02 Richard Biener <rguenther@suse.de>
+
+ PR c/79756
+ * gcc.dg/vector-1.c: New testcase.
+
+ 2017-02-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79732
+ * gcc.dg/torture/pr79732.c: New testcase.
+
+ 2017-02-22 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79666
+ * gcc.dg/torture/pr79666.c: New testcase.
+
2017-05-10 Richard Biener <rguenther@suse.de>
Backport from mainline
--- /dev/null
+/* { dg-do run } */
+
+struct
+{
+ unsigned a:6;
+} b;
+
+int c, e, g = 7;
+signed char d, f = 6, h = -10;
+
+void fn1 ()
+{
+ for (; c < 9; c++)
+ {
+ if (f)
+ g = ~(~0 / (g ^ e));
+ b.a = ~0;
+ d = ~((h ^ b.a) & 132 & (~(f && g) | (d && 1)));
+ e = ~0;
+ if (d < 127 || f < 1)
+ continue;
+ g = 0;
+ }
+}
+
+int main ()
+{
+ fn1 ();
+ return 0;
+}
--- /dev/null
+/* { dg-do link } */
+
+int bar () __attribute__ ((alias ("foo")));
+void foo () { }
+int main () { return bar(); }
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=gnu90" } */
+
+typedef int V __attribute__ ((vector_size(4)));
+void fn1 ()
+{
+ (V){(1,0)}[0] = 0;
+}
{
tree name = gimple_call_lhs (stmt);
tree var = SSA_NAME_VAR (name);
- tree def = ssa_default_def (cfun, var);
+ tree def = var ? ssa_default_def (cfun, var) : NULL;
if (def)
{
}
else
{
+ if (!var)
+ {
+ var = create_tmp_reg_fn (cfun, TREE_TYPE (name), NULL);
+ SET_SSA_NAME_VAR_OR_IDENTIFIER (name, var);
+ }
/* Otherwise make this variable undefined. */
gsi_remove (&stmt_gsi, true);
set_ssa_default_def (cfun, var, name);
min = build_symbolic_expr (expr_type, sym_min_op0,
neg_min_op0, min);
else if (sym_min_op1)
- min = build_symbolic_expr (expr_type, sym_min_op1,
- neg_min_op1 ^ minus_p, min);
+ {
+ /* We may not negate if that might introduce
+ undefined overflow. */
+ if (! minus_p
+ || neg_min_op1
+ || TYPE_OVERFLOW_WRAPS (expr_type))
+ min = build_symbolic_expr (expr_type, sym_min_op1,
+ neg_min_op1 ^ minus_p, min);
+ else
+ min = NULL_TREE;
+ }
/* Likewise for the upper bound. */
if (sym_max_op0 == sym_max_op1)
max = build_symbolic_expr (expr_type, sym_max_op0,
neg_max_op0, max);
else if (sym_max_op1)
- max = build_symbolic_expr (expr_type, sym_max_op1,
- neg_max_op1 ^ minus_p, max);
+ {
+ /* We may not negate if that might introduce
+ undefined overflow. */
+ if (! minus_p
+ || neg_max_op1
+ || TYPE_OVERFLOW_WRAPS (expr_type))
+ max = build_symbolic_expr (expr_type, sym_max_op1,
+ neg_max_op1 ^ minus_p, max);
+ else
+ max = NULL_TREE;
+ }
}
else
{