Skip to content

Commit adfc376

Browse files
committed
[NFC] Fix some crashes from early Decl::dump()
1 parent 969cb6e commit adfc376

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

lib/AST/ASTDumper.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,9 +1294,13 @@ namespace {
12941294
OS << "\")";
12951295
});
12961296
}
1297-
auto lifetimeString = getDumpString(VD->getLifetimeAnnotation());
1298-
if (!lifetimeString.empty())
1299-
printFlag(lifetimeString);
1297+
// In some cases, getLifetimeAnnotation() can fail before extension
1298+
// binding. hasResolvedImports() approximates an extension binding check.
1299+
if (VD->getModuleContext()->hasResolvedImports()) {
1300+
auto lifetimeString = getDumpString(VD->getLifetimeAnnotation());
1301+
if (!lifetimeString.empty())
1302+
printFlag(lifetimeString);
1303+
}
13001304
}
13011305

13021306
void printCommon(NominalTypeDecl *NTD, const char *Name, StringRef Label,
@@ -1802,8 +1806,13 @@ void swift::printContext(raw_ostream &os, DeclContext *dc) {
18021806
break;
18031807

18041808
case DeclContextKind::ExtensionDecl:
1805-
if (auto extendedNominal = cast<ExtensionDecl>(dc)->getExtendedNominal()) {
1809+
if (auto repr = cast<ExtensionDecl>(dc)->getExtendedTypeRepr()) {
1810+
repr->print(os);
1811+
} else if (cast<ExtensionDecl>(dc)->hasBeenBound()) {
1812+
auto extendedNominal = cast<ExtensionDecl>(dc)->getExtendedNominal();
18061813
printName(os, extendedNominal->getName());
1814+
} else {
1815+
os << "<unbound>";
18071816
}
18081817
os << " extension";
18091818
break;

0 commit comments

Comments
 (0)