From 7119550ddee22c84b96533b1229c98a517b8dad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Fri, 12 Sep 2014 06:45:45 +0200 Subject: [PATCH] Too big shift: fix FP when cast is used --- lib/checktype.h | 15 ++++++++------- test/testtype.cpp | 11 +++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/checktype.h b/lib/checktype.h index af4b2f429..ddd0425c4 100644 --- a/lib/checktype.h +++ b/lib/checktype.h @@ -44,19 +44,20 @@ public: /** @brief Run checks against the normal token list */ void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) { - (void)tokenizer; - (void)settings; - (void)errorLogger; - } - - /** @brief Run checks against the simplified token list */ - void runSimplifiedChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) { + // These are not "simplified" because casts can't be ignored CheckType checkType(tokenizer, settings, errorLogger); checkType.checkTooBigBitwiseShift(); checkType.checkIntegerOverflow(); checkType.checkSignConversion(); } + /** @brief Run checks against the simplified token list */ + void runSimplifiedChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) { + (void)tokenizer; + (void)settings; + (void)errorLogger; + } + /** @brief %Check for bitwise shift with too big right operand */ void checkTooBigBitwiseShift(); diff --git a/test/testtype.cpp b/test/testtype.cpp index 4bc595dd7..d9e0dd66b 100644 --- a/test/testtype.cpp +++ b/test/testtype.cpp @@ -59,12 +59,6 @@ private: // Check.. CheckType checkType(&tokenizer, settings, this); checkType.runChecks(&tokenizer, settings, this); - const std::string str1(tokenizer.tokens()->stringifyList(0,true)); - tokenizer.simplifyTokenList2(); - const std::string str2(tokenizer.tokens()->stringifyList(0,true)); - if (str1 != str2) - warn(("Unsimplified code in test case\nstr1="+str1+"\nstr2="+str2).c_str()); - checkType.runSimplifiedChecks(&tokenizer, settings, this); } void checkTooBigShift() { @@ -80,6 +74,11 @@ private: " return x << 2;\n" "}",&settings); ASSERT_EQUALS("", errout.str()); + + check("int foo(int x) {\n" + " return (long long)x << 40;\n" + "}",&settings); + ASSERT_EQUALS("", errout.str()); } void checkIntegerOverflow() {