# HG changeset patch # User Christian Kamm # Date 1232210463 -3600 # Node ID d8c44f1e08e1f45d0319e1960cf311f9e959bdb2 # Parent 7f6eeb7b003e91d4a260008e6c74e59afd623e61 Fix #164. diff -r 7f6eeb7b003e -r d8c44f1e08e1 dmd/optimize.c --- a/dmd/optimize.c Sat Jan 17 14:53:32 2009 +0100 +++ b/dmd/optimize.c Sat Jan 17 17:41:03 2009 +0100 @@ -352,6 +352,9 @@ type->next->equals(e1->type->next) ) { + // make a copy before adjusting type to avoid + // messing up the type of an existing initializer + e1 = e1->syntaxCopy(); e1->type = type; return e1; } @@ -362,6 +365,7 @@ if (e1->op == TOKnull && (type->ty == Tpointer || type->ty == Tclass)) { + e1 = e1->syntaxCopy(); e1->type = type; return e1; } @@ -377,6 +381,7 @@ cdto = type->isClassHandle(); if (cdto->isBaseOf(cdfrom, &offset) && offset == 0) { + e1 = e1->syntaxCopy(); e1->type = type; return e1; } @@ -391,6 +396,7 @@ if (type->size() == e1->type->size() && type->toBasetype()->ty != Tsarray) { + e1 = e1->syntaxCopy(); e1->type = type; return e1; } diff -r 7f6eeb7b003e -r d8c44f1e08e1 tests/mini/compile_bug164_stringinitcast.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/mini/compile_bug164_stringinitcast.d Sat Jan 17 17:41:03 2009 +0100 @@ -0,0 +1,2 @@ +const C = "foo"; +char[] var = C;