blob: 2a132fb109dea9e8ad04d0ada246f2f60c3a3232 [file] [log] [blame]
// REQUIRED_ARGS: -unittest
// https://issues.dlang.org/show_bug.cgi?id=4375
// disallow dangling else
void main() {
if (true) {
if (false) {
assert(1);
} else {
assert(2);
}
}
if (true) {
if (false)
assert(7);
} else
assert(8);
if (true) {
if (false)
assert(9);
else
assert(10);
}
{
if (true)
assert(11);
else
assert(12);
}
{
label1:
if (true)
assert(13);
else
assert(14);
}
if (true)
foreach (i; 0 .. 5) {
if (true)
assert(17);
else
assert(18);
}
if (true) {
foreach (i; 0 .. 5)
if (true)
assert(18.1);
} else
assert(18.2);
if (true)
assert(19);
else
assert(20);
if (true)
assert(21);
else if (false)
assert(22);
else
assert(23);
version (A) {
if (true)
assert(26);
} else
assert(27);
version (A) {
if (true)
assert(28);
else
assert(29);
}
version (A)
assert(30);
else version (B)
assert(31);
else
assert(32);
static if (true) {
static if (true)
assert(35);
} else
assert(36);
static if (true) {
static if (true)
assert(37);
else
assert(38);
}
static if (true)
assert(39);
else static if (true)
assert(40);
else
assert(41);
switch (4) {
case 0:
if (true)
assert(42);
else
assert(43);
break;
case 1: .. case 5:
if (true)
assert(44);
else
assert(45);
break;
default:
if (true)
assert(46);
else
assert(47);
break;
}
// (o_O)
switch (1)
default:
if (true)
assert(113);
else
assert(114);
// (o_O)
final switch (1)
case 1:
if (true)
assert(117);
else
assert(118);
mixin(q{
if (true)
assert(56);
else
assert(57);
});
while (false)
if (true)
assert(66);
else
assert(67);
if (true)
while (false)
assert(68);
else
assert(69);
do
if (true)
assert(72);
else
assert(73);
while (false);
if (true)
do
if (true)
assert(74);
else
assert(75);
while (false);
for (
if (true) // (o_O)
assert(78);
else
assert(79);
false; false
)
if (true)
assert(80);
else
assert(81);
if (true)
for (if (true) assert(84); else assert(85); false;)
assert(86);
if (true)
if (true)
if (true)
if (true)
if (true)
assert(87);
auto x = new C;
if (true)
while (false)
for (;;)
scope (exit)
synchronized (x)
assert(88);
else
assert(89);
if (true)
while (false)
for (;;) {
scope (exit)
synchronized (x)
if (true)
assert(90);
else
assert(89);
}
if (true)
while (false)
for (;;)
scope (exit)
synchronized (x)
if (true)
assert(90);
else
assert(89);
else
assert(12);
with (x)
if (false)
assert(92);
else
assert(93);
try
if (true)
assert(94);
else
assert(95);
catch (Exception e)
if (true)
assert(96);
else
assert(97);
finally
if (true)
assert(98);
else
assert(99);
if (true)
try
if (true)
assert(100);
else
assert(101);
finally
assert(102);
if (true)
try
assert(109);
catch(Exception e)
if (true)
assert(110);
else
assert(112);
finally
assert(111);
static struct F {
static if (true)
int x;
else
int y;
static if (true) {
static if (false)
int z;
} else
int w;
static if (true)
int t;
else static if (false)
int u;
else
int v;
}
if (true)
if (true)
assert(113);
else
assert(114);
else
assert(115);
static if (true)
static if (true)
assert(116);
else
assert(117);
else
assert(118);
}
unittest {
if (true)
assert(50);
else
assert(51);
}
class C {
invariant() {
if (true)
assert(58);
else
assert(59);
}
int f()
in {
if (true)
assert(60);
else
assert(61);
}
out(res) {
if (true)
assert(62);
else
assert(63);
}
do {
if (true)
assert(64);
else
assert(65);
return 0;
}
}
enum q = q{
if(true)
if(true)
assert(54.1);
else
assert(55.2);
};
static if (true)
struct F0 {}
else static if (true)
struct F1 {}
else
struct F2 {}
static if (true) {
static if (false)
struct F3 {}
} else
struct F4 {}
version(A) {
version(B)
struct F5 {}
} else
struct F6 {}
version(A) {
version(B)
struct F5a {}
else
struct F5b {}
}
version (C)
struct F5c {}
else
struct F5d {}
struct F7 {
static if (true)
int x;
else
float x;
private:
static if (true)
int y;
else
float y;
}
template F8() {
static if (true)
int x;
else
float x;
}
static if (true)
align(1)
static if (false)
struct F9 {}
static if (true)
align(1) {
extern(C)
pure
static if (false)
void F10(){}
else
void F11(){}
}
void f() {
int[] x;
static if (5 > 0)
version (Y)
scope (failure)
foreach (i, e; x)
while (i > 20)
with (e)
if (e < 0)
synchronized(e)
assert(1);
else
assert(2);
else
x = null;
else
x = null;
}