Author: hokein Date: Wed Aug 1 04:24:50 2018 New Revision: 338517 URL: http://llvm.org/viewvc/llvm-project?rev=338517&view=rev Log: [clangd] Make SymbolLocation => bool conversion explicitly.
Summary: The implicit bool conversion could happen superisingly, e.g. when checking `if (Loc1 == Loc2)`, the compiler will convert SymbolLocation to bool before comparing (because we don't define operator `==` for SymbolLocation). Reviewers: sammccall Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, cfe-commits Differential Revision: https://reviews.llvm.org/D49657 Modified: clang-tools-extra/trunk/clangd/index/Index.h Modified: clang-tools-extra/trunk/clangd/index/Index.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.h?rev=338517&r1=338516&r2=338517&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Index.h (original) +++ clang-tools-extra/trunk/clangd/index/Index.h Wed Aug 1 04:24:50 2018 @@ -30,6 +30,9 @@ struct SymbolLocation { uint32_t Line = 0; // 0-based // Using UTF-16 code units. uint32_t Column = 0; // 0-based + bool operator==(const Position& P) const { + return Line == P.Line && Column == P.Column; + } }; // The URI of the source file where a symbol occurs. @@ -39,7 +42,11 @@ struct SymbolLocation { Position Start; Position End; - operator bool() const { return !FileURI.empty(); } + explicit operator bool() const { return !FileURI.empty(); } + bool operator==(const SymbolLocation& Loc) const { + return std::tie(FileURI, Start, End) == + std::tie(Loc.FileURI, Loc.Start, Loc.End); + } }; llvm::raw_ostream &operator<<(llvm::raw_ostream &, const SymbolLocation &); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits