Author: d0k Date: Wed Jan 18 10:22:58 2017 New Revision: 292405 URL: http://llvm.org/viewvc/llvm-project?rev=292405&view=rev Log: [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. Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp?rev=292405&r1=292404&r2=292405&view=diff ============================================================================== --- clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp (original) +++ clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp Wed Jan 18 10:22:58 2017 @@ -118,14 +118,14 @@ bool IncludeFixerActionFactory::runInvoc 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 @@ static void addDiagnosticsForContext(Typ // 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 @@ static void addDiagnosticsForContext(Typ << 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 @@ clang::TypoCorrection IncludeFixerSemaSo 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(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits