Author: xazax Date: Sat Dec 12 05:31:25 2015 New Revision: 255431 URL: http://llvm.org/viewvc/llvm-project?rev=255431&view=rev Log: [clang-tidy] Fix PR25812.
Modified: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp Modified: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp?rev=255431&r1=255430&r2=255431&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp Sat Dec 12 05:31:25 2015 @@ -15,24 +15,22 @@ using namespace clang::ast_matchers; static bool isContainer(llvm::StringRef ClassName) { - static const char *const ContainerNames[] = { - "std::array", - "std::deque", - "std::forward_list", - "std::list", - "std::map", - "std::multimap", - "std::multiset", - "std::priority_queue", - "std::queue", - "std::set", - "std::stack", - "std::unordered_map", - "std::unordered_multimap", - "std::unordered_multiset", - "std::unordered_set", - "std::vector" - }; + static const char *const ContainerNames[] = {"std::array", + "std::deque", + "std::forward_list", + "std::list", + "std::map", + "std::multimap", + "std::multiset", + "std::priority_queue", + "std::queue", + "std::set", + "std::stack", + "std::unordered_map", + "std::unordered_multimap", + "std::unordered_multiset", + "std::unordered_set", + "std::vector"}; return std::binary_search(std::begin(ContainerNames), std::end(ContainerNames), ClassName); } @@ -65,7 +63,8 @@ void ContainerSizeEmptyCheck::registerMa anyOf(has(integerLiteral(equals(0))), allOf(anyOf(hasOperatorName("<"), hasOperatorName(">="), hasOperatorName(">"), hasOperatorName("<=")), - hasEitherOperand(integerLiteral(equals(1)))))) + hasEitherOperand( + ignoringImpCasts(integerLiteral(equals(1))))))) .bind("SizeBinaryOp")), hasParent(implicitCastExpr( hasImplicitDestinationType(isBoolType()), @@ -101,19 +100,21 @@ void ContainerSizeEmptyCheck::check(cons if (BinaryOp) { // Determine the correct transformation. bool Negation = false; - const bool ContainerIsLHS = !llvm::isa<IntegerLiteral>(BinaryOp->getLHS()); + const bool ContainerIsLHS = + !llvm::isa<IntegerLiteral>(BinaryOp->getLHS()->IgnoreImpCasts()); const auto OpCode = BinaryOp->getOpcode(); uint64_t Value = 0; if (ContainerIsLHS) { - if (const auto *Literal = - llvm::dyn_cast<IntegerLiteral>(BinaryOp->getRHS())) + if (const auto *Literal = llvm::dyn_cast<IntegerLiteral>( + BinaryOp->getRHS()->IgnoreImpCasts())) Value = Literal->getValue().getLimitedValue(); else return; } else { - Value = llvm::dyn_cast<IntegerLiteral>(BinaryOp->getLHS()) - ->getValue() - .getLimitedValue(); + Value = + llvm::dyn_cast<IntegerLiteral>(BinaryOp->getLHS()->IgnoreImpCasts()) + ->getValue() + .getLimitedValue(); } // Constant that is not handled. Modified: clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp?rev=255431&r1=255430&r2=255431&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/readability-container-size-empty.cpp Sat Dec 12 05:31:25 2015 @@ -3,7 +3,7 @@ namespace std { template <typename T> struct vector { vector() {} - int size() const {} + unsigned long size() const {} bool empty() const {} }; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits