Author: Vlad Tsyrklevich Date: 2019-10-29T10:48:03-07:00 New Revision: efed314118c7c287a71b8a8d67953a98d8a718d5
URL: https://github.com/llvm/llvm-project/commit/efed314118c7c287a71b8a8d67953a98d8a718d5 DIFF: https://github.com/llvm/llvm-project/commit/efed314118c7c287a71b8a8d67953a98d8a718d5.diff LOG: Revert "[clang-format] Remove the dependency on frontend" This reverts commit ec66603ac7ea655be5c2c5f508c5bf0d5eaeb65b. It was causing ubsan failures like the following on the ubsan bot: llvm/lib/Support/SourceMgr.cpp:440:48: runtime error: pointer index expression with base 0x000000000000 overflowed to 0xfffffffffffffffa Added: Modified: clang/tools/clang-format/CMakeLists.txt clang/tools/clang-format/ClangFormat.cpp Removed: ################################################################################ diff --git a/clang/tools/clang-format/CMakeLists.txt b/clang/tools/clang-format/CMakeLists.txt index 35ecdb11253c..28ac4fb5913e 100644 --- a/clang/tools/clang-format/CMakeLists.txt +++ b/clang/tools/clang-format/CMakeLists.txt @@ -7,6 +7,7 @@ add_clang_tool(clang-format set(CLANG_FORMAT_LIB_DEPS clangBasic clangFormat + clangFrontend clangRewrite clangToolingCore ) diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp index cbbb52bd0aa8..db00d41d0351 100644 --- a/clang/tools/clang-format/ClangFormat.cpp +++ b/clang/tools/clang-format/ClangFormat.cpp @@ -18,6 +18,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/Version.h" #include "clang/Format/Format.h" +#include "clang/Frontend/TextDiagnosticPrinter.h" #include "clang/Rewrite/Core/Rewriter.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" @@ -299,9 +300,12 @@ emitReplacementWarnings(const Replacements &Replaces, StringRef AssumedFileName, IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); DiagOpts->ShowColors = (ShowColors && !NoShowColors); + TextDiagnosticPrinter *DiagsBuffer = + new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts, false); + IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); IntrusiveRefCntPtr<DiagnosticsEngine> Diags( - new DiagnosticsEngine(DiagID, &*DiagOpts)); + new DiagnosticsEngine(DiagID, &*DiagOpts, DiagsBuffer)); IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( new llvm::vfs::InMemoryFileSystem); @@ -310,40 +314,24 @@ emitReplacementWarnings(const Replacements &Replaces, StringRef AssumedFileName, FileID FileID = createInMemoryFile(AssumedFileName, Code.get(), Sources, Files, InMemoryFileSystem.get()); - FileManager &FileMgr = Sources.getFileManager(); - llvm::ErrorOr<const FileEntry *> FileEntryPtr = - FileMgr.getFile(AssumedFileName); + const unsigned ID = Diags->getCustomDiagID( + WarningsAsErrors ? clang::DiagnosticsEngine::Error + : clang::DiagnosticsEngine::Warning, + "code should be clang-formatted [-Wclang-format-violations]"); unsigned Errors = 0; + DiagsBuffer->BeginSourceFile(LangOptions(), nullptr); if (WarnFormat && !NoWarnFormat) { for (const auto &R : Replaces) { - PresumedLoc PLoc = Sources.getPresumedLoc( - Sources.getLocForStartOfFile(FileID).getLocWithOffset(R.getOffset())); - - SourceLocation LineBegin = - Sources.translateFileLineCol(FileEntryPtr.get(), PLoc.getLine(), 1); - SourceLocation NextLineBegin = Sources.translateFileLineCol( - FileEntryPtr.get(), PLoc.getLine() + 1, 1); - - const char *StartBuf = Sources.getCharacterData(LineBegin); - const char *EndBuf = Sources.getCharacterData(NextLineBegin); - - StringRef Line(StartBuf, (EndBuf - StartBuf) - 1); - - SMDiagnostic Diags( - llvm::SourceMgr(), SMLoc(), AssumedFileName, PLoc.getLine(), - PLoc.getColumn(), - WarningsAsErrors ? SourceMgr::DiagKind::DK_Error - : SourceMgr::DiagKind::DK_Warning, - "code should be clang-formatted [-Wclang-format-violations]", Line, - ArrayRef<std::pair<unsigned, unsigned>>()); - - Diags.print(nullptr, llvm::errs(), (ShowColors && !NoShowColors)); + Diags->Report( + Sources.getLocForStartOfFile(FileID).getLocWithOffset(R.getOffset()), + ID); Errors++; if (ErrorLimit && Errors >= ErrorLimit) break; } } + DiagsBuffer->EndSourceFile(); return WarningsAsErrors; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits