diff options
author | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-04-11 21:10:49 +0000 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-04-11 21:10:49 +0000 |
commit | 258ad81197cbd24452286d38975b0302342cffe0 (patch) | |
tree | a810310c1446a69e5fcff424692321ca05cd806d /gcc/d | |
parent | 9eda9f9231f287599413c684351b16576f2ee4d2 (diff) | |
download | gcc-258ad81197cbd24452286d38975b0302342cffe0.zip gcc-258ad81197cbd24452286d38975b0302342cffe0.tar.gz gcc-258ad81197cbd24452286d38975b0302342cffe0.tar.bz2 |
d/dmd: Merge upstream dmd d7ed327ed
Fixes ICE when accessing empty array in CTFE.
Reviewed-on: https://github.com/dlang/dmd/pull/9563
From-SVN: r270294
Diffstat (limited to 'gcc/d')
-rw-r--r-- | gcc/d/dmd/MERGE | 2 | ||||
-rw-r--r-- | gcc/d/dmd/dinterpret.c | 7 |
2 files changed, 6 insertions, 3 deletions
diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index 31ea106..800be95 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -5dd3eccc3b0758346f77bee3cdc3f6bd15de339b +d7ed327edb0b01ad56e7e73e77b3401cd565675e The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/dinterpret.c b/gcc/d/dmd/dinterpret.c index 777f89c..40f3e77 100644 --- a/gcc/d/dmd/dinterpret.c +++ b/gcc/d/dmd/dinterpret.c @@ -6272,11 +6272,14 @@ Expression *scrubReturnValue(Loc loc, Expression *e) /* Returns: true if e is void, * or is an array literal or struct literal of void elements. */ -static bool isVoid(Expression *e) +static bool isVoid(Expression *e, bool checkArray = false) { if (e->op == TOKvoid) return true; + if (checkArray && e->type->ty != Tsarray) + return false; + if (e->op == TOKarrayliteral) return isEntirelyVoid(((ArrayLiteralExp *)e)->elements); @@ -6314,7 +6317,7 @@ Expression *scrubArray(Loc loc, Expressions *elems, bool structlit) // A struct .init may contain void members. // Static array members are a weird special case (bug 10994). - if (structlit && isVoid(e)) + if (structlit && isVoid(e, true)) { e = NULL; } |