From 46d9c9c35f7bd91293aaa9cc59c15994ce21f6fd Mon Sep 17 00:00:00 2001 From: k-hara Date: Mon, 31 Oct 2011 20:35:56 +0900 Subject: [PATCH] Issue 3990 - Deferencing a dynamic array as pointer --- src/expression.c | 10 +++++++--- test/runnable/deprecate1.d | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/expression.c b/src/expression.c index 4d0020956ee9..64db22ad095b 100644 --- a/src/expression.c +++ b/src/expression.c @@ -8072,9 +8072,13 @@ Expression *PtrExp::semantic(Scope *sc) case Tsarray: case Tarray: - type = ((TypeArray *)tb)->next; - e1 = e1->castTo(sc, type->pointerTo()); - break; + if (global.params.useDeprecated) + { + type = ((TypeArray *)tb)->next; + e1 = e1->castTo(sc, type->pointerTo()); + break; + } + // fall through default: error("can only * a pointer, not a '%s'", e1->type->toChars()); diff --git a/test/runnable/deprecate1.d b/test/runnable/deprecate1.d index 2129686cdedf..1bd33745c129 100644 --- a/test/runnable/deprecate1.d +++ b/test/runnable/deprecate1.d @@ -1196,6 +1196,22 @@ void test34_test52() } } +/******************************************/ +// 3990 + +void test3990() +{ + int[] a1 = [5, 4, 3]; + assert(*a1 == 5); + alias typeof(a1) T1; + assert(is(typeof(*T1))); + + int[3] a2 = [5, 4, 3]; + assert(*a2 == 5); + alias typeof(a2) T2; + assert(is(typeof(*T2))); +} + /******************************************/ int main() @@ -1253,5 +1269,7 @@ int main() test23_test67(); test34_test14(); test34_test52(); + test3990(); + return 0; }