Merge pull request #11732 from nkcsgexi/range-null-check-swift-4.0
[4.0] RangeInfo: Add several defensive null pointer checks. rdar://32047178
diff --git a/lib/IDE/SwiftSourceDocInfo.cpp b/lib/IDE/SwiftSourceDocInfo.cpp
index f3923ed..67843e1 100644
--- a/lib/IDE/SwiftSourceDocInfo.cpp
+++ b/lib/IDE/SwiftSourceDocInfo.cpp
@@ -712,11 +712,13 @@
// For each continue/break statement, record its target's range and the
// orphan kind.
if (auto *CS = dyn_cast<ContinueStmt>(S)) {
- Ranges.emplace_back(CS->getTarget()->getSourceRange(),
- OrphanKind::Continue);
+ if (auto *Target = CS->getTarget()) {
+ Ranges.emplace_back(Target->getSourceRange(), OrphanKind::Continue);
+ }
} else if (auto *BS = dyn_cast<BreakStmt>(S)) {
- Ranges.emplace_back(BS->getTarget()->getSourceRange(),
- OrphanKind::Break);
+ if (auto *Target = BS->getTarget()) {
+ Ranges.emplace_back(Target->getSourceRange(), OrphanKind::Break);
+ }
}
return true;
}
@@ -832,6 +834,11 @@
void analyzeDeclRef(ValueDecl *VD, SourceLoc Start, Type Ty,
ReferenceMetaData Data) {
+ // Add defensive check in case the given type is null.
+ // FIXME: we should receive error type instead of null type.
+ if (Ty.isNull())
+ return;
+
// Only collect decl ref.
if (Data.Kind != SemaReferenceKind::DeclRef)
return;