|
25 | 25 | #include "swift/AST/ASTMangler.h"
|
26 | 26 | #include "swift/AST/Attr.h"
|
27 | 27 | #include "swift/AST/Decl.h"
|
| 28 | +#include "swift/AST/DeclContext.h" |
28 | 29 | #include "swift/AST/Expr.h"
|
29 | 30 | #include "swift/AST/GenericEnvironment.h"
|
30 | 31 | #include "swift/AST/IRGenOptions.h"
|
|
34 | 35 | #include "swift/AST/Pattern.h"
|
35 | 36 | #include "swift/AST/TypeDifferenceVisitor.h"
|
36 | 37 | #include "swift/AST/TypeWalker.h"
|
| 38 | +#include "swift/AST/Types.h" |
37 | 39 | #include "swift/Basic/Assertions.h"
|
38 | 40 | #include "swift/Basic/Compiler.h"
|
39 | 41 | #include "swift/Basic/SourceManager.h"
|
|
65 | 67 | #include "llvm/IR/DebugInfo.h"
|
66 | 68 | #include "llvm/IR/IntrinsicInst.h"
|
67 | 69 | #include "llvm/IR/Module.h"
|
| 70 | +#include "llvm/Support/Casting.h" |
68 | 71 | #include "llvm/Support/CommandLine.h"
|
69 | 72 | #include "llvm/Support/Debug.h"
|
70 | 73 | #include "llvm/Support/FileSystem.h"
|
@@ -2343,11 +2346,16 @@ createSpecializedStructOrClassType(NominalOrBoundGenericNominalType *Type,
|
2343 | 2346 | if (visitedOriginallyDefinedIn)
|
2344 | 2347 | return TypeWalker::Action::Stop;
|
2345 | 2348 |
|
2346 |
| - // A typealias inside a function used that function's signature as part of |
| 2349 | + DeclContext *D = nullptr; |
| 2350 | + if (auto *TAT = llvm::dyn_cast<TypeAliasType>(T)) |
| 2351 | + D = TAT->getDecl()->getDeclContext(); |
| 2352 | + else if (auto *NT = llvm::dyn_cast<NominalOrBoundGenericNominalType>(T)) |
| 2353 | + D = NT->getDecl()->getDeclContext(); |
| 2354 | + |
| 2355 | + // A type inside a function uses that function's signature as part of |
2347 | 2356 | // its mangling, so check if any types in the generic signature are
|
2348 | 2357 | // annotated with @_originallyDefinedIn.
|
2349 |
| - if (auto *TAT = llvm::dyn_cast<TypeAliasType>(T)) { |
2350 |
| - auto D = TAT->getDecl()->getDeclContext(); |
| 2358 | + if (D) { |
2351 | 2359 | if (auto AFD = llvm::dyn_cast<AbstractFunctionDecl>(D)) {
|
2352 | 2360 | OriginallyDefinedInFinder InnerWalker;
|
2353 | 2361 | AFD->getInterfaceType().walk(InnerWalker);
|
|
0 commit comments