Skip to content

Commit ca0c13e

Browse files
Fix crash in iscpp11init_impl() (#4743)
1 parent bea6aec commit ca0c13e

2 files changed

Lines changed: 4 additions & 1 deletion

File tree

lib/tokenlist.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ static bool iscpp11init_impl(const Token * const tok)
677677
return false; // trailing return type. The only function body that can contain no semicolon is a void function.
678678
if (Token::simpleMatch(nameToken->previous(), "namespace") || Token::simpleMatch(nameToken, "namespace") /*anonymous namespace*/)
679679
return false;
680-
if (endtok != nullptr && !Token::Match(nameToken, "return|:")) {
680+
if (precedes(nameToken->next(), endtok) && !Token::Match(nameToken, "return|:")) {
681681
// If there is semicolon between {..} this is not a initlist
682682
for (const Token *tok2 = nameToken->next(); tok2 != endtok; tok2 = tok2->next()) {
683683
if (tok2->str() == ";")

test/testtokenize.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7654,6 +7654,9 @@ class TestTokenizer : public TestFixture {
76547654
"};\n",
76557655
"{ } }",
76567656
TokenImpl::Cpp11init::NOINIT);
7657+
7658+
ASSERT_NO_THROW(tokenizeAndStringify("template<typename U> struct X {};\n" // don't crash
7659+
"template<typename T> auto f(T t) -> X<decltype(t + 1)> {}\n"));
76577660
#undef testIsCpp11init
76587661
}
76597662
};

0 commit comments

Comments
 (0)