Skip to content

Commit 0a4e53d

Browse files
committed
fix #21630: enum and alias ignored on runtime foreach loop variables
1 parent e33c664 commit 0a4e53d

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

compiler/src/dmd/statementsem.d

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,16 @@ Statement statementSemanticVisit(Statement s, Scope* sc)
14611461
*/
14621462

14631463
//printf("ForeachRangeStatement::semantic() %p\n", fs);
1464+
1465+
if (fs.param.storageClass & STC.manifest)
1466+
{
1467+
error(fs.loc, "cannot declare `enum` loop variables for non-unrolled foreach");
1468+
}
1469+
if (fs.param.storageClass & STC.alias_)
1470+
{
1471+
error(fs.loc, "cannot declare `alias` loop variables for non-unrolled foreach");
1472+
}
1473+
14641474
auto loc = fs.loc;
14651475
fs.lwr = fs.lwr.expressionSemantic(sc);
14661476
fs.lwr = resolveProperties(sc, fs.lwr);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/+
2+
TEST_OUTPUT:
3+
---
4+
fail_compilation/issue21630.d(14): Error: cannot declare `enum` loop variables for non-unrolled foreach
5+
fail_compilation/issue21630.d(15): Error: cannot declare `alias` loop variables for non-unrolled foreach
6+
fail_compilation/issue21630.d(16): Error: cannot declare `enum` loop variables for non-unrolled foreach
7+
fail_compilation/issue21630.d(17): Error: cannot declare `alias` loop variables for non-unrolled foreach
8+
---
9+
+/
10+
11+
void main()
12+
{
13+
enum a = [1, 2, 3];
14+
foreach(enum i; a) { } // error
15+
foreach(alias i; a) { } // error
16+
foreach(enum i; 0 .. 3) { } // error
17+
foreach(alias i; 0 .. 3) { } // error
18+
}

0 commit comments

Comments
 (0)