From: Iain Buclaw Date: Fri, 4 Sep 2020 20:54:22 +0000 (+0200) Subject: d: Fix ICE in create_tmp_var, at gimple-expr.c:482 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f8eabd47ac5335ebab0d83ff61fb680a46888be8;p=gcc.git d: Fix ICE in create_tmp_var, at gimple-expr.c:482 Array concatenate expressions were creating more SAVE_EXPRs than what was necessary. The internal error itself was the result of a forced temporary being made on a TREE_ADDRESSABLE type. gcc/d/ChangeLog: PR d/96924 * expr.cc (ExprVisitor::visit (CatAssignExp *)): Don't force temporaries needlessly. gcc/testsuite/ChangeLog: PR d/96924 * gdc.dg/simd13927b.d: Removed. * gdc.dg/pr96924.d: New test. --- diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc index 2b13615521d..79f212c3a08 100644 --- a/gcc/d/expr.cc +++ b/gcc/d/expr.cc @@ -875,7 +875,6 @@ public: tree offexp = d_array_length (result); offexp = build2 (MINUS_EXPR, TREE_TYPE (offexp), offexp, size_one_node); - offexp = d_save_expr (offexp); tree ptrexp = d_array_ptr (result); ptrexp = void_okay_p (ptrexp); @@ -885,9 +884,7 @@ public: tree t2 = build_expr (e->e2); tree expr = stabilize_expr (&t2); - t2 = d_save_expr (t2); result = modify_expr (build_deref (ptrexp), t2); - result = compound_expr (t2, result); this->result_ = compound_expr (expr, result); } diff --git a/gcc/testsuite/gdc.dg/pr96924.d b/gcc/testsuite/gdc.dg/pr96924.d new file mode 100644 index 00000000000..25d9a566fbe --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr96924.d @@ -0,0 +1,14 @@ +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96924 +// { dg-do compile } + +struct Memo +{ + string source; + this(this); +} + +void compile(string src, size_t end) +{ + Memo[] stack; + stack ~= Memo(src[end .. $]); +} diff --git a/gcc/testsuite/gdc.dg/simd13927b.d b/gcc/testsuite/gdc.dg/simd13927b.d deleted file mode 100644 index fbbaf867cd8..00000000000 --- a/gcc/testsuite/gdc.dg/simd13927b.d +++ /dev/null @@ -1,12 +0,0 @@ -// https://issues.dlang.org/show_bug.cgi?id=13927 -// { dg-additional-options "-mavx" { target avx_runtime } } -// { dg-do compile { target { avx_runtime || vect_sizes_16B_8B } } } -import core.simd; - -alias double8 = __vector(double[8]); - -void test13927(double8 a) -{ - double8 b = [long.min, long.min, long.max, long.max]; - auto tmp = a - b; -}