From 519aec3f4dea0b159f2489a22a8c11bc36915c92 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Wed, 14 Dec 2016 19:04:09 -0800 Subject: [PATCH] static arrays don't have indirections --- src/escape.d | 6 +++++- test/fail_compilation/retscope.d | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/escape.d b/src/escape.d index 6eac1b9884c6..2925a9c6d22b 100644 --- a/src/escape.d +++ b/src/escape.d @@ -774,7 +774,11 @@ private void escapeByValue(Expression e, EscapeByResults* er) } Type t1b = e.e1.type.toBasetype(); if (t1b.ty == Tsarray) - escapeByRef(e.e1, er); + { + Type tb = e.type.toBasetype(); + if (tb.ty != Tsarray) + escapeByRef(e.e1, er); + } else e.e1.accept(this); } diff --git a/test/fail_compilation/retscope.d b/test/fail_compilation/retscope.d index 6ca7be36aae2..494ae0b4cf66 100644 --- a/test/fail_compilation/retscope.d +++ b/test/fail_compilation/retscope.d @@ -287,3 +287,18 @@ int* escape6() @safe return foo6(&b); } +/***************************************************/ + +struct S7 +{ + int[10] a; + int[3] abc(int i) @safe + { + return a[0 .. 3]; // should not error + } +} + +/***************************************************/ + +int[3] escape8(scope int[] p) @safe { return p[0 .. 3]; } // should not error +char*[3] escape9(scope char*[] p) @safe { return p[0 .. 3]; }