From 812b6c51c34bc7ed53bb8ddbbceeb5151ac01c94 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Fri, 19 Oct 2018 08:35:24 +0000 Subject: [PATCH] [clangd] Remove the overflow log. Summary: LLVM codebase has generated files (all are build/Target/XXX/*.inc) that exceed the MaxLine & MaxColumn. Printing these log would be noisy. Reviewers: sammccall Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D53400 llvm-svn: 344777 --- clang-tools-extra/clangd/XRefs.cpp | 6 ++++++ clang-tools-extra/clangd/index/Index.cpp | 2 -- clang-tools-extra/clangd/index/Index.h | 4 ++++ clang-tools-extra/unittests/clangd/IndexTests.cpp | 5 +++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp index 54ab994..7f0e354 100644 --- a/clang-tools-extra/clangd/XRefs.cpp +++ b/clang-tools-extra/clangd/XRefs.cpp @@ -37,6 +37,11 @@ const Decl *getDefinition(const Decl *D) { return nullptr; } +void logIfOverflow(const SymbolLocation &Loc) { + if (Loc.Start.hasOverflow() || Loc.End.hasOverflow()) + log("Possible overflow in symbol location: {0}", Loc); +} + // Convert a SymbolLocation to LSP's Location. // HintPath is used to resolve the path of URI. // FIXME: figure out a good home for it, and share the implementation with @@ -61,6 +66,7 @@ llvm::Optional toLSPLocation(const SymbolLocation &Loc, LSPLoc.range.start.character = Loc.Start.column(); LSPLoc.range.end.line = Loc.End.line(); LSPLoc.range.end.character = Loc.End.column(); + logIfOverflow(Loc); return LSPLoc; } diff --git a/clang-tools-extra/clangd/index/Index.cpp b/clang-tools-extra/clangd/index/Index.cpp index af1ffb5..9972241 100644 --- a/clang-tools-extra/clangd/index/Index.cpp +++ b/clang-tools-extra/clangd/index/Index.cpp @@ -23,7 +23,6 @@ constexpr uint32_t SymbolLocation::Position::MaxLine; constexpr uint32_t SymbolLocation::Position::MaxColumn; void SymbolLocation::Position::setLine(uint32_t L) { if (L > MaxLine) { - log("Set an overflowed Line {0}", L); Line = MaxLine; return; } @@ -31,7 +30,6 @@ void SymbolLocation::Position::setLine(uint32_t L) { } void SymbolLocation::Position::setColumn(uint32_t Col) { if (Col > MaxColumn) { - log("Set an overflowed Column {0}", Col); Column = MaxColumn; return; } diff --git a/clang-tools-extra/clangd/index/Index.h b/clang-tools-extra/clangd/index/Index.h index 49910b3..9fe6b38 100644 --- a/clang-tools-extra/clangd/index/Index.h +++ b/clang-tools-extra/clangd/index/Index.h @@ -43,6 +43,10 @@ struct SymbolLocation { void setColumn(uint32_t Column); uint32_t column() const { return Column; } + bool hasOverflow() const { + return Line >= MaxLine || Column >= MaxColumn; + } + static constexpr uint32_t MaxLine = (1 << 20) - 1; static constexpr uint32_t MaxColumn = (1 << 12) - 1; diff --git a/clang-tools-extra/unittests/clangd/IndexTests.cpp b/clang-tools-extra/unittests/clangd/IndexTests.cpp index 2e6ce8f..bccbcb7 100644 --- a/clang-tools-extra/unittests/clangd/IndexTests.cpp +++ b/clang-tools-extra/unittests/clangd/IndexTests.cpp @@ -46,10 +46,15 @@ TEST(SymbolLocation, Position) { EXPECT_EQ(1u, Pos.line()); Pos.setColumn(2); EXPECT_EQ(2u, Pos.column()); + EXPECT_FALSE(Pos.hasOverflow()); Pos.setLine(Position::MaxLine + 1); // overflow + EXPECT_TRUE(Pos.hasOverflow()); EXPECT_EQ(Pos.line(), Position::MaxLine); + Pos.setLine(1); // reset the overflowed line. + Pos.setColumn(Position::MaxColumn + 1); // overflow + EXPECT_TRUE(Pos.hasOverflow()); EXPECT_EQ(Pos.column(), Position::MaxColumn); } -- 2.7.4