blob: 3d1b07e716ec22ddef9a68005970bef7e4f97c6c [file] [log] [blame]
/+
TEST_OUTPUT:
---
fail_compilation/fail9665a.d(43): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(42): Previous initialization is here.
fail_compilation/fail9665a.d(53): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(52): Previous initialization is here.
fail_compilation/fail9665a.d(58): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(57): Previous initialization is here.
fail_compilation/fail9665a.d(63): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(62): Previous initialization is here.
fail_compilation/fail9665a.d(73): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(72): Previous initialization is here.
fail_compilation/fail9665a.d(78): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(77): Previous initialization is here.
fail_compilation/fail9665a.d(83): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(82): Previous initialization is here.
fail_compilation/fail9665a.d(96): Error: immutable field `v` initialization is not allowed in loops or after labels
fail_compilation/fail9665a.d(101): Error: immutable field `v` initialization is not allowed in loops or after labels
fail_compilation/fail9665a.d(106): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(105): Previous initialization is here.
fail_compilation/fail9665a.d(111): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(110): Previous initialization is here.
fail_compilation/fail9665a.d(116): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(115): Previous initialization is here.
fail_compilation/fail9665a.d(130): Error: immutable field `v` initialized multiple times
fail_compilation/fail9665a.d(129): Previous initialization is here.
fail_compilation/fail9665a.d(134): Error: immutable field `w` initialized multiple times
fail_compilation/fail9665a.d(133): Previous initialization is here.
fail_compilation/fail9665a.d(148): Error: static assert: `__traits(compiles, this.v = 1)` is false
---
+/
/***************************************************/
// immutable field
struct S1A
{
immutable int v;
this(int)
{
v = 1;
v = 2; // multiple initialization
}
}
struct S1B
{
immutable int v;
this(int)
{
if (true) v = 1; else v = 2;
v = 3; // multiple initialization
}
this(long)
{
if (true) v = 1;
v = 3; // multiple initialization
}
this(string)
{
if (true) {} else v = 2;
v = 3; // multiple initialization
}
}
struct S1C
{
immutable int v;
this(int)
{
true ? (v = 1) : (v = 2);
v = 3; // multiple initialization
}
this(long)
{
auto x = true ? (v = 1) : 2;
v = 3; // multiple initialization
}
this(string)
{
auto x = true ? 1 : (v = 2);
v = 3; // multiple initialization
}
}
/***************************************************/
// with control flow
struct S2
{
immutable int v;
this(int)
{
L:
v = 1; // after labels
}
this(long)
{
foreach (i; 0..1)
v = 1; // in loops
}
this(string)
{
v = 1; // initialization
L: v = 2; // assignment after labels
}
this(wstring)
{
v = 1; // initialization
foreach (i; 0..1) v = 2; // assignment in loops
}
this(dstring)
{
v = 1; return;
v = 2; // multiple initialization
}
}
/***************************************************/
// with immutable constructor
struct S3
{
int v;
int w;
this(int) immutable
{
v = 1;
v = 2; // multiple initialization
if (true)
w = 1;
w = 2; // multiple initialization
}
}
/***************************************************/
// in __traits(compiles)
struct S4
{
immutable int v;
this(int)
{
static assert(__traits(compiles, v = 1));
v = 1;
static assert(__traits(compiles, v = 1)); // multiple initialization
}
}