kallehuttunen added a comment. The checker gives quite many warnings on LLVM code base. For example, running it for lib/Transforms/Scalar:
/home/kalle/llvm/lib/Transforms/Scalar/GVN.cpp:119:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator==(const Expression &other) const { ^ /home/kalle/llvm/lib/Transforms/Scalar/GVN.cpp:119:3: note: commutative not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVN.cpp:119:3: note: other.commutative not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:151:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator==(const CHIArg &A) { return VN == A.VN; } ^ /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:151:3: note: Dest not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:151:3: note: I not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:151:3: note: A.Dest not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:151:3: note: A.I not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:152:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator!=(const CHIArg &A) { return !(*this == A); } ^ /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:152:3: note: Dest not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:152:3: note: I not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:152:3: note: A.Dest not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNHoist.cpp:152:3: note: A.I not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator>(const SinkingInstructionCandidate &Other) const { ^ /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: NumBlocks not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: NumInstructions not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: NumPHIs not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: NumMemoryInsts not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: Blocks not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: Other.NumBlocks not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: Other.NumInstructions not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: Other.NumPHIs not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: Other.NumMemoryInsts not accessed /home/kalle/llvm/lib/Transforms/Scalar/GVNSink.cpp:211:3: note: Other.Blocks not accessed /home/kalle/llvm/lib/Transforms/Scalar/MergeICmps.cpp:90:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator<(const BCEAtom &O) const { ^ /home/kalle/llvm/lib/Transforms/Scalar/MergeICmps.cpp:90:3: note: GEP not accessed /home/kalle/llvm/lib/Transforms/Scalar/MergeICmps.cpp:90:3: note: LoadI not accessed /home/kalle/llvm/lib/Transforms/Scalar/MergeICmps.cpp:90:3: note: O.GEP not accessed /home/kalle/llvm/lib/Transforms/Scalar/MergeICmps.cpp:90:3: note: O.LoadI not accessed /home/kalle/llvm/lib/Transforms/Scalar/NewGVN.cpp:436:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator==(const Expression &Other) const { ^ /home/kalle/llvm/lib/Transforms/Scalar/NewGVN.cpp:436:3: note: Other.Opcode not accessed /home/kalle/llvm/lib/Transforms/Scalar/NewGVN.cpp:436:3: note: Other.HashVal not accessed /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:206:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] friend LLVM_ATTRIBUTE_UNUSED bool operator<(const Slice &LHS, ^ /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:206:3: note: LHS.EndOffset not accessed /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:206:3: note: LHS.UseAndIsSplittable not accessed /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:210:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] friend LLVM_ATTRIBUTE_UNUSED bool operator<(uint64_t LHSOffset, ^ /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:210:3: note: RHS.EndOffset not accessed /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:210:3: note: RHS.UseAndIsSplittable not accessed /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:582:3: warning: incomplete comparison operator [bugprone-incomplete-comparison-operator] bool operator==(const partition_iterator &RHS) const { ^ /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:582:3: note: MaxSplitSliceEndOffset not accessed /home/kalle/llvm/lib/Transforms/Scalar/SROA.cpp:582:3: note: RHS.MaxSplitSliceEndOffset not accessed Running the checker on 100k SLOC proprietary code base I'm working with resulted in finding 5 bugs and 1 false positive (the code had a comment that one member was not accessed on purpose). I'm anticipating that the checker can produce lots of false positives in some code bases because of `operator<`. That's why I'm making the checked operators configurable from the start. Repository: rCTE Clang Tools Extra CHANGES SINCE LAST ACTION https://reviews.llvm.org/D59103/new/ https://reviews.llvm.org/D59103 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits