[Issue 4389] ICE(constfold.c, expression.c), or wrong code: string~=dchar in CTFE
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Jan 20 00:01:49 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=4389
--- Comment #6 from Don <clugdbug at yahoo.com.au> 2011-01-19 23:59:47 PST ---
Fails on D1 because dchar, wchar implicitly convert to char, even if they don't
fit.
PATCH: expression.c, CatAssignExp::semantic(), line 8574. The two 'else'
clauses need to be swapped,
so that we check for an array~char before we check for implicit conversion.
{ // Append array
e2 = e2->castTo(sc, e1->type);
type = e1->type;
e = this;
}
----------- SWAP THIS SECTION WITH THE NEXT ONE
else if ((tb1->ty == Tarray) &&
e2->implicitConvTo(tb1next)
)
{ // Append element
e2 = e2->castTo(sc, tb1next);
type = e1->type;
e = this;
}
-------
else if (tb1->ty == Tarray &&
(tb1next->ty == Tchar || tb1next->ty == Twchar) &&
e2->implicitConvTo(Type::tdchar)
)
{ // Append dchar to char[] or wchar[]
e2 = e2->castTo(sc, Type::tdchar);
type = e1->type;
e = this;
/* Do not allow appending wchar to char[] because if wchar happens
* to be a surrogate pair, nothing good can result.
*/
}
-----------
else
{
if (tb1 != Type::terror && tb2 != Type::terror)
error("cannot append type %s to type %s", tb2->toChars(),
tb1->toChars());
e = new ErrorExp();
}
ALTERNATE PATCH:
Incidentally, if dchar->char is disallowed, all DMD tests still pass. But this
would probably cause existing valid code to break, so probably the first
solution is better.
mtype.c, line 1570, MATCH TypeBasic::implicitConvTo(Type *to)
+ if ((ty == Tdchar || ty == Twchar) && to->ty == Tchar)
+ return MATCHnomatch;
+ if (ty == Tdchar && to->ty == Twchar)
+ return MATCHnomatch;
}
else if (flags & TFLAGSfloating)
{
// Disallow implicit conversion of floating point to integer
if (tob->flags & TFLAGSintegral)
return MATCHnomatch;
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list