From 3a8bdad20aaa6bb0ee33d28ed0a3e57ead634f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 4 Sep 2018 18:10:31 +0200 Subject: [PATCH] Fixed #8232 (segmentation fault on valid C++ code in isOppositeCond()) --- lib/tokenlist.cpp | 3 +++ test/testtokenize.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index dbffcffd5..7838b7c9c 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -391,6 +391,9 @@ static bool iscast(const Token *tok) if (!Token::Match(tok, "( ::| %name%")) return false; + if (Token::simpleMatch(tok->link(), ") ( )")) + return false; + if (tok->previous() && tok->previous()->isName() && tok->previous()->str() != "return") return false; diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 3552f8ff8..c4476a287 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8500,6 +8500,7 @@ private: // not cast ASSERT_EQUALS("AB||", testAst("(A)||(B)")); ASSERT_EQUALS("abc[1&=", testAst("a = (b[c]) & 1;")); + ASSERT_EQUALS("abc::(=", testAst("a = (b::c)();")); } void astlambda() {