// REQUIRED_ARGS: // PERMUTE_ARGS: /***************************************************/ // immutable field /+ TEST_OUTPUT: --- fail_compilation/fail9665a.d(19): Error: immutable field 'v' initialized multiple times --- +/ struct S1A { immutable int v; this(int) { v = 1; v = 2; // multiple initialization } } /+ TEST_OUTPUT: --- fail_compilation/fail9665a.d(37): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(42): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(47): Error: immutable field 'v' initialized multiple times --- +/ 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 } } /+ TEST_OUTPUT: --- fail_compilation/fail9665a.d(65): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(70): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(75): Error: immutable field 'v' initialized multiple times --- +/ 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 /+ TEST_OUTPUT: --- fail_compilation/fail9665a.d(98): Error: immutable field 'v' initialization is not allowed in loops or after labels fail_compilation/fail9665a.d(103): Error: immutable field 'v' initialization is not allowed in loops or after labels fail_compilation/fail9665a.d(108): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(113): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(118): Error: immutable field 'v' initialized multiple times --- +/ 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 /+ TEST_OUTPUT: --- fail_compilation/fail9665a.d(139): Error: immutable field 'v' initialized multiple times fail_compilation/fail9665a.d(143): Error: immutable field 'w' initialized multiple times --- +/ 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) /+ TEST_OUTPUT: --- fail_compilation/fail9665a.d(163): Error: static assert `__traits(compiles, this.v = 1)` is false --- +/ struct S4 { immutable int v; this(int) { static assert(__traits(compiles, v = 1)); v = 1; static assert(__traits(compiles, v = 1)); // multiple initialization } }