Skip to content

Commit 737d7c6

Browse files
FeepingCreatureThe Dlang Bot
authored andcommitted
Fix issue 21001: alias protection is ignored if used before declaration.
1 parent 71bdb1a commit 737d7c6

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

src/dmd/dsymbolsem.d

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6498,6 +6498,12 @@ void aliasSemantic(AliasDeclaration ds, Scope* sc)
64986498
{
64996499
//printf("AliasDeclaration::semantic() %s\n", ds.toChars());
65006500

6501+
// as DsymbolSemanticVisitor::visit(AliasDeclaration), in case we're called first.
6502+
// see https://issues.dlang.org/show_bug.cgi?id=21001
6503+
ds.storage_class |= sc.stc & STC.deprecated_;
6504+
ds.protection = sc.protection;
6505+
ds.userAttribDecl = sc.userAttribDecl;
6506+
65016507
// TypeTraits needs to know if it's located in an AliasDeclaration
65026508
const oldflags = sc.flags;
65036509
sc.flags |= SCOPE.alias_;

test/fail_compilation/fail21001.d

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
TEST_OUTPUT:
3+
---
4+
fail_compilation/fail21001.d(12): Error: undefined identifier `Alias`
5+
---
6+
*/
7+
8+
module fail21001;
9+
10+
import imports.fail21001b;
11+
12+
void main() { Alias var; }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module imports.fail21001b;
2+
3+
private struct S { Alias member; }
4+
5+
private alias Alias = int;

0 commit comments

Comments
 (0)