From d4f25124210e3790dc7236255eb0a1660b493268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 11 Dec 2016 19:12:23 +0100 Subject: [PATCH] Tokenizer::simplifyKnownVariables: Added bailout when pointer alias is simplified and loop is encountered --- lib/tokenize.cpp | 4 ++-- test/testtokenize.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 3fb1ab76f..15ffc4266 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6471,8 +6471,8 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign if (pointeralias && Token::Match(tok3, ("!!= " + value).c_str())) break; - // Stop if do is found - if (tok3->str() == "do") + // Stop if a loop is found + if (pointeralias && Token::Match(tok3, "do|for|while")) break; // Stop if unknown function call is seen diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index a21476486..ae4af9fb7 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -1643,6 +1643,10 @@ private: ASSERT_EQUALS( "void foo ( ) { int n ; n = 10 ; for ( int i = 0 ; i < 10 ; ++ i ) { } }", simplifyKnownVariables(code)); + + ASSERT_EQUALS( + "void foo ( int i ) { int n ; n = i ; for ( i = 0 ; i < n ; ++ i ) { } }", + simplifyKnownVariables("void foo(int i) { int n = i; for (i = 0; i < n; ++i) { } }")); } void simplifyKnownVariables22() {