Skip to content

Commit a0af9fa

Browse files
Merge pull request #11158 from MoonlightSentinel/depr-import
Fix Issue 20840 - No deprecation for template from deprecated selecti…
2 parents 5b3480a + d233c39 commit a0af9fa

4 files changed

Lines changed: 54 additions & 0 deletions

File tree

src/dmd/dtemplate.d

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6299,6 +6299,14 @@ extern (C++) class TemplateInstance : ScopeDsymbol
62996299
}
63006300
}
63016301

6302+
// The template might originate from a selective import which implies that
6303+
// s is a lowered AliasDeclaration of the actual TemplateDeclaration.
6304+
// This is the last place where we see the deprecated alias because it is
6305+
// stripped below, so check if the selective import was deprecated.
6306+
// See https://issues.dlang.org/show_bug.cgi?id=20840.
6307+
if (s.isAliasDeclaration())
6308+
s.checkDeprecated(this.loc, sc);
6309+
63026310
if (!updateTempDecl(sc, s))
63036311
{
63046312
return false;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
REQUIRED_ARGS: -de
3+
EXTRA_FILES: imports/deprecatedImporta.d imports/deprecatedImportb.d
4+
5+
TEST_OUTPUT:
6+
----
7+
fail_compilation/deprecatedImports.d(19): Deprecation: alias `deprecatedImporta.foo` is deprecated - Please import deprecatedImportb directly!
8+
fail_compilation/deprecatedImports.d(21): Deprecation: alias `deprecatedImporta.bar` is deprecated - Please import deprecatedImportb directly!
9+
fail_compilation/deprecatedImports.d(23): Deprecation: alias `deprecatedImporta.AliasSeq` is deprecated - Please import deprecatedImportb directly!
10+
fail_compilation/deprecatedImports.d(27): Deprecation: alias `deprecatedImporta.S` is deprecated - Please import deprecatedImportb directly!
11+
fail_compilation/deprecatedImports.d(29): Deprecation: alias `deprecatedImporta.C` is deprecated - Please import deprecatedImportb directly!
12+
fail_compilation/deprecatedImports.d(31): Deprecation: alias `deprecatedImporta.I` is deprecated - Please import deprecatedImportb directly!
13+
fail_compilation/deprecatedImports.d(25): Deprecation: alias `deprecatedImporta.E` is deprecated - Please import deprecatedImportb directly!
14+
----
15+
*/
16+
17+
import imports.deprecatedImporta;
18+
19+
alias f = foo;
20+
21+
alias b = bar!(int);
22+
23+
alias Types = AliasSeq!(int);
24+
25+
int x = E;
26+
27+
S s;
28+
29+
C c;
30+
31+
I i;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
deprecated("Please import deprecatedImportb directly!")
2+
public import imports.deprecatedImportb : AliasSeq, foo, bar, E, S, C, I;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
alias AliasSeq(T...) = T;
2+
3+
void foo() {}
4+
5+
void bar(T)(T t) {}
6+
7+
enum E = 2;
8+
9+
struct S {}
10+
11+
class C {}
12+
13+
interface I {}

0 commit comments

Comments
 (0)