From 7ab84bef0cb4380151da1d126439c674b7c70975 Mon Sep 17 00:00:00 2001 From: IOBYTE Date: Mon, 15 Feb 2021 02:12:29 -0500 Subject: [PATCH] fix daca crash in intel-compute-runtime (#3132) --- lib/tokenize.cpp | 2 +- test/testsimplifyusing.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 1ce451908..0780fd65a 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2308,7 +2308,7 @@ bool Tokenizer::simplifyUsing() const ScopeInfo3 * memberFuncScope = nullptr; const Token * memberFuncEnd = nullptr; bool skip = false; // don't erase type aliases we can't parse - for (Token* tok1 = startToken; tok1 != endToken; tok1 = tok1->next()) { + for (Token* tok1 = startToken; tok1 && tok1 != endToken; tok1 = tok1->next()) { if ((Token::Match(tok1, "{|}|namespace|class|struct|union") && tok1->strAt(-1) != "using") || Token::Match(tok1, "using namespace %name% ;|::")) { setScopeInfo(tok1, ¤tScope1); diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index 2de0ec692..0b3ec5275 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -64,6 +64,7 @@ private: TEST_CASE(simplifyUsing15); TEST_CASE(simplifyUsing16); TEST_CASE(simplifyUsing17); + TEST_CASE(simplifyUsing18); TEST_CASE(simplifyUsing8970); TEST_CASE(simplifyUsing8971); @@ -457,6 +458,11 @@ private: ASSERT_EQUALS(expected, tok(code, false)); } + void simplifyUsing18() { + const char code[] = "{ { { using a = a; using a; } } }"; + tok(code, false); // don't crash + } + void simplifyUsing8970() { const char code[] = "using V = std::vector;\n" "struct A {\n"