Author: alexfh Date: Thu Feb 1 08:39:12 2018 New Revision: 323980 URL: http://llvm.org/viewvc/llvm-project?rev=323980&view=rev Log: [clang-tidy] misc-redundant-expression: fix a crash under ubsan
Modified: clang-tools-extra/trunk/clang-tidy/misc/RedundantExpressionCheck.cpp clang-tools-extra/trunk/test/clang-tidy/misc-redundant-expression.cpp Modified: clang-tools-extra/trunk/clang-tidy/misc/RedundantExpressionCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/RedundantExpressionCheck.cpp?rev=323980&r1=323979&r2=323980&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/misc/RedundantExpressionCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/misc/RedundantExpressionCheck.cpp Thu Feb 1 08:39:12 2018 @@ -22,7 +22,6 @@ #include "llvm/Support/Casting.h" #include <algorithm> #include <cassert> -#include <cmath> #include <cstdint> #include <string> #include <vector> @@ -967,6 +966,13 @@ void RedundantExpressionCheck::checkRela } } +unsigned intLog2(uint64_t X) { + unsigned Result = 0; + while (X >>= 1) + ++Result; + return Result; +} + void RedundantExpressionCheck::check(const MatchFinder::MatchResult &Result) { if (const auto *BinOp = Result.Nodes.getNodeAs<BinaryOperator>("binary")) { // If the expression's constants are macros, check whether they are @@ -1043,11 +1049,11 @@ void RedundantExpressionCheck::check(con // If ShiftingConst is shifted left with more bits than the position of the // leftmost 1 in the bit representation of AndValue, AndConstant is // ineffective. - if (floor(log2(AndValue.getExtValue())) >= ShiftingValue) + if (intLog2(AndValue.getExtValue()) >= ShiftingValue) return; auto Diag = diag(BinaryAndExpr->getOperatorLoc(), - "ineffective bitwise and operation."); + "ineffective bitwise and operation"); } // Check for the following bound expressions: Modified: clang-tools-extra/trunk/test/clang-tidy/misc-redundant-expression.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-redundant-expression.cpp?rev=323980&r1=323979&r2=323980&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/misc-redundant-expression.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/misc-redundant-expression.cpp Thu Feb 1 08:39:12 2018 @@ -674,7 +674,7 @@ int operatorConfusion(int X, int Y, long { // Ineffective & expressions. Y = (Y << 8) & 0xff; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: ineffective bitwise and operation. + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: ineffective bitwise and operation Y = (Y << 12) & 0xfff; // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: ineffective bitwise and Y = (Y << 12) & 0xff; @@ -686,7 +686,7 @@ int operatorConfusion(int X, int Y, long // Tests for unmatched types Z = (Z << 8) & 0xff; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: ineffective bitwise and operation. + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: ineffective bitwise and operation Y = (Y << 12) & 0xfffL; // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: ineffective bitwise and Z = (Y << 12) & 0xffLL; @@ -694,6 +694,11 @@ int operatorConfusion(int X, int Y, long Y = (Z << 8L) & 0x77L; // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: ineffective bitwise and + Y = (Y << 8) & 0; + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: ineffective bitwise and + + Y = (Y << 8) & -1; + // Effective expressions. Do not check. Y = (Y << 4) & 0x15; Y = (Y << 3) & 0x250; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits