diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2020-09-04 22:54:22 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2020-09-04 23:01:46 +0200 |
commit | f8eabd47ac5335ebab0d83ff61fb680a46888be8 (patch) | |
tree | 4fb1eb8e402c83c61978be708eceb58d78bba9a0 | |
parent | f923c40f9baba19e58f65afa7e5572f08cee93ff (diff) | |
download | gcc-f8eabd47ac5335ebab0d83ff61fb680a46888be8.zip gcc-f8eabd47ac5335ebab0d83ff61fb680a46888be8.tar.gz gcc-f8eabd47ac5335ebab0d83ff61fb680a46888be8.tar.bz2 |
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.
-rw-r--r-- | gcc/d/expr.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/pr96924.d | 14 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd13927b.d | 12 |
3 files changed, 14 insertions, 15 deletions
diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc index 2b13615..79f212c 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 0000000..25d9a56 --- /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 fbbaf86..0000000 --- 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; -} |