/* REQUIRED_ARGS: -preview=dip1000 */ struct Cache { ubyte[1] v; ubyte[] set(ubyte[1] v) return { return this.v[] = v[]; } } /*********************************/ // https://github.com/dlang/dmd/pull/9220 @safe: struct OnlyResult { private this(Values)(scope ref Values values) { this.s = values; } string s; } auto only(Values)(Values vv) { return OnlyResult(vv); } void test() @nogc @safe pure { only(null); } /************************************/ // https://github.com/dlang/dmd/pull/9220 auto callWrappedOops(scope string dArgs) { string callWrappedImpl() { return dArgs; } } /************************************/ struct Constant { int* member; this(Repeat!(int*) grid) @safe { foreach(ref x; grid) member = x; foreach(ref x; grid) x = member; } int* foo(return scope Repeat!(int*) grid) @safe { foreach(ref x; grid) x = member; foreach(ref x; grid) return x; return null; } alias Repeat(T...) = T; } /************************************/ // https://issues.dlang.org/show_bug.cgi?id=19387 struct C { void* u; this(this) @safe { } } struct S { C c; } void foo(scope S s) @safe { } void bar(scope S s) @safe { foo(s); } /************************************/ // https://issues.dlang.org/show_bug.cgi?id=20675 struct D { int pos; char* p; } void test(scope ref D d) @safe { D[] da; da ~= D(d.pos, null); } /************************************/ void withEscapes() { static D get() @safe; with (get()) { } } /************************************/ // https://issues.dlang.org/show_bug.cgi?id=20682 int f1_20682(return scope ref D d) @safe { return d.pos; } ref int f2_20682(return ref scope D d) @safe { return d.pos; } void test_20682(scope ref D d) @safe { int[] a; a ~= f1_20682(d); a ~= f2_20682(d); a ~= cast(int) d.p; } // Phobos failure void formattedWrite(immutable char[2] args) @safe { scope immutable char[] val = args; } void ctfeRead(const ubyte[2] array) @safe { short result; foreach_reverse (b; array) result = cast(short) ((result << 8) | b); foreach (b; array) result = cast(short) ((result << 8) | b); } void demangle() @safe { static struct DotSplitter { const(char)[] s; @safe: @property bool empty() const { return !s.length; } @property const(char)[] front() const return { immutable i = indexOfDot(); return s; } void popFront() {} private ptrdiff_t indexOfDot() const { return -1; } } foreach (comp; DotSplitter("")) { const copy = comp; } } void fileCtor() @safe { static struct S { int i; } // static S get() // { // return S(); // } with (S()) { int* ptr = &i; } } // Missing test coverage int*[4] testArray() @safe { return typeof(return).init; } /************************************/ // https://issues.dlang.org/show_bug.cgi?id=21209 void testForeach(T)(const(T)[] ts) { static int g; g++; // force impure for https://issues.dlang.org/show_bug.cgi?id=20150 foreach (c; ts) { } foreach_reverse(c0; ts) { foreach(c1; ts) { } } } @safe void main21209() { char[10] cs; float[10] fs; testForeach(cs); testForeach(fs); }