[include-fixer] Don't return a correction if the header insertion failed.
This is could happen in cases involving macros and we don't want to
return an invalid fixit for it or a confusing error message with no
fixit.
git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@292405 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include-fixer/IncludeFixer.cpp b/include-fixer/IncludeFixer.cpp
index 3023caf..1944d73 100644
--- a/include-fixer/IncludeFixer.cpp
+++ b/include-fixer/IncludeFixer.cpp
@@ -118,14 +118,14 @@
return !Compiler.getDiagnostics().hasFatalErrorOccurred();
}
-static void addDiagnosticsForContext(TypoCorrection &Correction,
+static bool addDiagnosticsForContext(TypoCorrection &Correction,
const IncludeFixerContext &Context,
StringRef Code, SourceLocation StartOfFile,
ASTContext &Ctx) {
auto Reps = createIncludeFixerReplacements(
Code, Context, format::getLLVMStyle(), /*AddQualifiers=*/false);
- if (!Reps)
- return;
+ if (!Reps || Reps->size() != 1)
+ return false;
unsigned DiagID = Ctx.getDiagnostics().getCustomDiagID(
DiagnosticsEngine::Note, "Add '#include %0' to provide the missing "
@@ -133,7 +133,6 @@
// FIXME: Currently we only generate a diagnostic for the first header. Give
// the user choices.
- assert(Reps->size() == 1 && "Expected exactly one replacement");
const tooling::Replacement &Placed = *Reps->begin();
auto Begin = StartOfFile.getLocWithOffset(Placed.getOffset());
@@ -143,6 +142,7 @@
<< FixItHint::CreateReplacement(CharSourceRange::getCharRange(Begin, End),
Placed.getReplacementText());
Correction.addExtraDiagnostic(std::move(PD));
+ return true;
}
/// Callback for incomplete types. If we encounter a forward declaration we
@@ -286,12 +286,12 @@
FileID FID = SM.getFileID(Typo.getLoc());
StringRef Code = SM.getBufferData(FID);
SourceLocation StartOfFile = SM.getLocForStartOfFile(FID);
- addDiagnosticsForContext(
- Correction,
- getIncludeFixerContext(SM, CI->getPreprocessor().getHeaderSearchInfo(),
- MatchedSymbols),
- Code, StartOfFile, CI->getASTContext());
- return Correction;
+ if (addDiagnosticsForContext(
+ Correction, getIncludeFixerContext(
+ SM, CI->getPreprocessor().getHeaderSearchInfo(),
+ MatchedSymbols),
+ Code, StartOfFile, CI->getASTContext()))
+ return Correction;
}
return TypoCorrection();
}