blob: 95c784627fa5ec657c9a70b78ce6213c2e48687f [file] [log] [blame]
/*
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);
}