From fd19ab4ed18cb23f2ee4de8ebb29504341bb1d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 26 Jul 2016 08:50:00 +0200 Subject: [PATCH] fix garbage code handling --- lib/tokenize.cpp | 2 +- test/testgarbage.cpp | 8 ++++---- test/testtokenize.cpp | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 8c7987797..96ffe32d5 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -8087,7 +8087,7 @@ const Token * Tokenizer::findGarbageCode() const { for (const Token *tok = tokens(); tok; tok = tok->next()) { if (Token::Match(tok, "if|while|for|switch")) { // switch (EXPR) { ... } - if (!Token::Match(tok->previous(), ";|{|}|(|)|,|else")) + if (tok->previous() && !Token::Match(tok->previous(), ":|;|{|}|(|)|,|else|do")) return tok; if (!Token::Match(tok->next(), "( !!)")) return tok; diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index 25b290144..8a06c6985 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -1229,7 +1229,7 @@ private: } void garbageCode151() { // #4175 - checkCode(">{ x while (y) z int = }"); + ASSERT_THROW(checkCode(">{ x while (y) z int = }"), InternalError); checkCode("void f() {\n" // #4911 - bad simplification => don't crash " int a;\n" " do { a=do_something() } while (a);\n" @@ -1317,9 +1317,9 @@ private: void garbageAST() { checkCode("--"); // don't crash - checkCode("N 1024 float a[N], b[N + 3], c[N]; void N; (void) i;\n" - "int #define for (i = avx_test i < c[i]; i++)\n" - "b[i + 3] = a[i] * {}"); // Don't hang (#5787) + ASSERT_THROW(checkCode("N 1024 float a[N], b[N + 3], c[N]; void N; (void) i;\n" + "int #define for (i = avx_test i < c[i]; i++)\n" + "b[i + 3] = a[i] * {}"), InternalError); // Don't hang (#5787) checkCode("START_SECTION([EXTRA](bool isValid(const String &filename)))"); // Don't crash (#5991) } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index b556de8a8..467f52335 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -1148,7 +1148,8 @@ private: void ifAddBraces15() { // ticket #2616 - unknown macro before if - ASSERT_EQUALS("{ A if ( x ) { y ( ) ; } }", tokenizeAndStringify("{A if(x)y();}", false)); + // TODO: Move to TestGarbage + ASSERT_THROW(tokenizeAndStringify("{A if(x)y();}", false), InternalError); } void ifAddBraces16() {