digitalmars.D.bugs - [Issue 14649] New: ICE on invalid array operation with string literals
- via Digitalmars-d-bugs (53/53) Jun 03 2015 https://issues.dlang.org/show_bug.cgi?id=14649
https://issues.dlang.org/show_bug.cgi?id=14649 Issue ID: 14649 Summary: ICE on invalid array operation with string literals Product: D Version: D2 Hardware: All OS: All Status: NEW Keywords: ice Severity: major Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: k.hara.pg gmail.com I found this issue during a check for D2 behavior of issue 1511. With D2 compiler (2.067 or HEAD:a74d774), adding two char arrays makes "invalid array operation". void test1() { char[] a, b; string x, y; auto c = a + b; // Error: invalid array operation a + b (possible missing []) auto z = x + y; // Error: invalid array operation x + y (possible missing []) } And if you apply slice operator, they'll make array operations intentionally. void test2() { char[] a = "abc".dup; char[] b = [char(1), char(2), char(3)]; char[] r = new char[](3); string x = "abc"; string y = [char(1), char(2), char(3)]; r[] = a[] + b[]; assert(r == "bdf"); r[] = x[] + y[]; assert(r == "bdf"); } However, using string literals as the operands will cause ICE. void test3() { char[] r = new char[](3); //r[] = "hel" + "lo."; // Error: invalid array operation x + y (possible missing []) // --> expected r[] = "hel"[] + "lo."[]; // --> Assertion failure (...) on line 1909 in file 'e2ir.c', with HEAD enum s = "abc"; r[] = s[0..3] + "def"[0..3]; // --> Assertion failure (...) on line 1909 in file 'e2ir.c', with HEAD } --
Jun 03 2015