[Issue 12153] Ternary operator on static array lvalues creates copy

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Feb 19 02:07:29 PST 2014


https://d.puremagic.com/issues/show_bug.cgi?id=12153



--- Comment #3 from yebblies <yebblies at gmail.com> 2014-02-19 21:07:20 EST ---
(In reply to comment #2)
> (In reply to comment #1)
> > Sigh, the backend sees
> > 
> > int[1] i = 0;
> > int[1] j = 0;
> > bool b = true;
> > (b ? i : j)[] = [4];
> > assert(i == [4]);
> > return 0;
> > 
> > Another bug caused by lowering static array ops to slice ops.
> 
> Translating to the slice ops is not a problem. This is a glue-layer bug for
> cond expression.
> 

Sure it is.  If instead of converting `a = b` (where lhs is a static array)
into `a[] = b[]` the compiler left the lhs intact as a static array, then
converting the condexp to an lvalue would have resulted in `*(b ? &i : &j) =
[4]` and this bug would not have occurred.

> https://github.com/D-Programming-Language/dmd/pull/3285

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list