From 404eb6c7469d40dbac72c5aabf6167097e4030f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 9 Sep 2018 16:40:56 +0200 Subject: [PATCH] Fixed #8745 (Syntax error: AST broken (or)) --- lib/tokenize.cpp | 2 ++ test/testtokenize.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 43731bc97..ea9b19f86 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6252,6 +6252,8 @@ bool Tokenizer::simplifyCAlternativeTokens() if (cOpIt != cAlternativeTokens.end()) { if (!Token::Match(tok->previous(), "%name%|%num%|%char%|)|]|> %name% %name%|%num%|%char%|%op%|(")) continue; + if (Token::Match(tok->next(), "%assign%|%or%|%oror%|&&|*|/|%|^")) + continue; tok->str(cOpIt->second); ret = true; } else if (Token::Match(tok, "not|compl")) { diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 94c01cbc0..f945a9546 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -5950,6 +5950,8 @@ private: ASSERT_EQUALS("void f ( ) { if ( not = x ) { } }", tokenizeAndStringify("void f() { if (not=x){} }", false, true, Settings::Native, "test.cpp")); // #8029 ASSERT_EQUALS("void f ( struct S * s ) { x = s . and + 1 ; }", tokenizeAndStringify("void f(struct S *s) { x = s->and + 1; }", false, true, Settings::Native, "test.c")); + // #8745 + ASSERT_EQUALS("void f ( ) { if ( x ) { or = 0 ; } }", tokenizeAndStringify("void f() { if (x) or = 0; }")); } void simplifyCalculations() {