diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 66dfc49a003..232caf89b37 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -9550,6 +9550,8 @@ void Tokenizer::simplifyCPPAttribute() Token* head = skipCPPOrAlignAttribute(tok)->next(); while (isCPPAttribute(head) || isAlignAttribute(head)) head = skipCPPOrAlignAttribute(head)->next(); + if (!head) + syntaxError(tok); head->isAttributeUnused(true); } else if (Token::Match(tok->previous(), ") [ [ expects|ensures|assert default|audit|axiom| : %name% <|<=|>|>= %num% ] ]")) { const Token *vartok = tok->tokAt(4); diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index aac83163223..d5549cb26cf 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -1771,6 +1771,7 @@ class TestGarbage : public TestFixture { } void garbageCode229() { // #14126 ASSERT_THROW_INTERNAL(checkCode("void f() {} [[maybe_unused]]"), SYNTAX); + ASSERT_THROW_INTERNAL(checkCode("void f() {} [[unused]]"), SYNTAX); }