Skip to content

Commit 52693c4

Browse files
committed
[NFC-ish] Fix some crashes from early Decl::dump()
Changes dump output used in one test; otherwise NFC.
1 parent 70be6b5 commit 52693c4

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

lib/AST/ASTDumper.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,9 +1382,13 @@ namespace {
13821382
OS << "\")";
13831383
});
13841384
}
1385-
auto lifetimeString = getDumpString(VD->getLifetimeAnnotation());
1386-
if (!lifetimeString.empty())
1387-
printFlag(lifetimeString);
1385+
// In some cases, getLifetimeAnnotation() can fail before extension
1386+
// binding. hasResolvedImports() approximates an extension binding check.
1387+
if (VD->getModuleContext()->hasResolvedImports()) {
1388+
auto lifetimeString = getDumpString(VD->getLifetimeAnnotation());
1389+
if (!lifetimeString.empty())
1390+
printFlag(lifetimeString);
1391+
}
13881392
}
13891393

13901394
void printCommon(NominalTypeDecl *NTD, const char *Name, StringRef Label,
@@ -1904,8 +1908,13 @@ void swift::printContext(raw_ostream &os, DeclContext *dc) {
19041908
break;
19051909

19061910
case DeclContextKind::ExtensionDecl:
1907-
if (auto extendedNominal = cast<ExtensionDecl>(dc)->getExtendedNominal()) {
1911+
if (auto repr = cast<ExtensionDecl>(dc)->getExtendedTypeRepr()) {
1912+
repr->print(os);
1913+
} else if (cast<ExtensionDecl>(dc)->hasBeenBound()) {
1914+
auto extendedNominal = cast<ExtensionDecl>(dc)->getExtendedNominal();
19081915
printName(os, extendedNominal->getName());
1916+
} else {
1917+
os << "<unbound>";
19091918
}
19101919
os << " extension";
19111920
break;

test/type/parameterized_protocol.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// RUN: %target-typecheck-verify-swift -disable-availability-checking
22

3-
// RUN: not %target-swift-frontend -typecheck %s -debug-generic-signatures -disable-availability-checking 2>&1 | %FileCheck %s
4-
3+
// RUN: not %target-swift-frontend -typecheck %s -debug-generic-signatures -disable-availability-checking >%t.output 2>&1
4+
// RUN: %FileCheck --input-file %t.output %s
55

66
/// Test some invalid syntax first
77

@@ -176,7 +176,7 @@ struct OpaqueTypes<E> {
176176
// CHECK: Generic signature: <Self where Self : Sequence, Self.[Sequence]Element == Int>
177177
extension Sequence<Int> {
178178

179-
// CHECK-LABEL: parameterized_protocol.(file).Sequence extension.doSomethingGeneric@
179+
// CHECK-LABEL: parameterized_protocol.(file).Sequence<Int> extension.doSomethingGeneric@
180180
// CHECK: Generic signature: <Self, E where Self : Sequence, Self.[Sequence]Element == Int>
181181
func doSomethingGeneric<E>(_: E) {}
182182
}

0 commit comments

Comments
 (0)