From bc9fae17a8db7e5bca136b73ca149d4c10df2417 Mon Sep 17 00:00:00 2001 From: Frits van Bommel Date: Sun, 15 Mar 2009 15:58:38 +0100 Subject: [PATCH] Another "pointers are 32 bits" issue in the frontend. long/ulong constants cast to pointers were truncated to 32-bit values. Closes #234. --- dmd/expression.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dmd/expression.c b/dmd/expression.c index 5b018ffc..31d03122 100644 --- a/dmd/expression.c +++ b/dmd/expression.c @@ -1348,11 +1348,17 @@ integer_t IntegerExp::toInteger() case Twchar: case Tuns16: value = (d_uns16) value; break; case Tint32: value = (d_int32) value; break; - case Tpointer: case Tdchar: case Tuns32: value = (d_uns32) value; break; case Tint64: value = (d_int64) value; break; case Tuns64: value = (d_uns64) value; break; + case Tpointer: + // FIXME: Other pointer widths than 32 and 64? + if (PTRSIZE == 4) + value = (d_uns32) value; + else + value = (d_uns64) value; + break; case Tenum: { @@ -1512,6 +1518,7 @@ void IntegerExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) break; case Tuns64: + L4: buf->printf("%juLU", v); break; @@ -1524,7 +1531,11 @@ void IntegerExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) buf->writestring("cast("); buf->writestring(t->toChars()); buf->writeByte(')'); - goto L3; + // FIXME: Other pointer widths than 32 and 64? + if (PTRSIZE == 4) + goto L3; + else + goto L4; default: /* This can happen if errors, such as