/*
- currently fails with extra safety checks
- PERMUTE_FIXME_ARGS: -dip1000
+REQUIRED_ARGS: -preview=dip1000
*/
struct Cache
{
ubyte[1] v;
- ubyte[] set(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 scope ref 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);
+}