[Modules] Do not diagnose missing import in recovery mode if there isn't a decl to lookup

Clang often tries to create implicit module import for error recovery,
which does a great job helping out with diagnostics. However, sometimes
clang does not have enough information given that it's using an invalid
context to move on. Be more strict in those cases to avoid crashes.

We hit crash on invalids because of this but unfortunately there are no
testcases and I couldn't manage to create one. The crashtrace however
indicates pretty clear why it's happening.

rdar://problem/39313933

llvm-svn: 332491
This commit is contained in:
Bruno Cardoso Lopes 2018-05-16 17:00:24 +00:00
parent 11fd14c1ac
commit c39e85d12c
1 changed files with 1 additions and 1 deletions

View File

@ -7613,7 +7613,7 @@ bool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
// If the user is going to see an error here, recover by making the // If the user is going to see an error here, recover by making the
// definition visible. // definition visible.
bool TreatAsComplete = Diagnoser && !isSFINAEContext(); bool TreatAsComplete = Diagnoser && !isSFINAEContext();
if (Diagnoser) if (Diagnoser && SuggestedDef)
diagnoseMissingImport(Loc, SuggestedDef, MissingImportKind::Definition, diagnoseMissingImport(Loc, SuggestedDef, MissingImportKind::Definition,
/*Recover*/TreatAsComplete); /*Recover*/TreatAsComplete);
return !TreatAsComplete; return !TreatAsComplete;