From 8be4c2ad9570423e9808d71a5e3c5b70b1658794 Mon Sep 17 00:00:00 2001 From: Andreas Hollandt Date: Sun, 29 Jun 2014 13:03:23 +0200 Subject: [PATCH] Add changes from D-Programming-Language/dmd#3685 --- dmd2/optimize.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dmd2/optimize.c b/dmd2/optimize.c index c6a72756e3f..1f8b02090bd 100644 --- a/dmd2/optimize.c +++ b/dmd2/optimize.c @@ -336,11 +336,21 @@ Expression *AddrExp::optimize(int result, bool keepLvalue) ex = ((PtrExp *)e1)->e1; if (type->equals(ex->type)) e = ex; +#if IN_LLVM // Backport of D-Programming-Language/dmd#3685 + else if (type->toBasetype()->immutableOf()->equals(ex->type->toBasetype()->immutableOf())) + { + e = ex->copy(); + e->type = type; + } + else + return this; +#else else { e = ex->copy(); e->type = type; } +#endif return e; } if (e1->op == TOKvar) @@ -392,8 +402,8 @@ Expression *PtrExp::optimize(int result, bool keepLvalue) ex = ((AddrExp *)e1)->e1; if (type->equals(ex->type)) e = ex; -#if IN_LLVM // Backport of D-Programming-Language/dmd#3662. - else if (ex->type->implicitConvTo(type) >= MATCHconst) +#if IN_LLVM // Backport of D-Programming-Language/dmd#3685 + else if (type->toBasetype()->immutableOf()->equals(ex->type->toBasetype()->immutableOf())) { e = ex->copy(); e->type = type;