mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
150 lines
4.3 KiB
D
150 lines
4.3 KiB
D
/+
|
|
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
|
|
}
|
|
}
|