@@ -270,6 +270,10 @@ class TestTokenizer : public TestFixture {
270270 TEST_CASE (functionAttributeListBefore);
271271 TEST_CASE (functionAttributeListAfter);
272272
273+ TEST_CASE (cppMaybeUnusedBefore);
274+ TEST_CASE (cppMaybeUnusedAfter);
275+ TEST_CASE (cppMaybeUnusedStructuredBinding);
276+
273277 TEST_CASE (splitTemplateRightAngleBrackets);
274278
275279 TEST_CASE (cpp03template1);
@@ -4164,6 +4168,47 @@ class TestTokenizer : public TestFixture {
41644168 ASSERT (func8 && func8->isAttributeNoreturn () && func8->isAttributePure () && func8->isAttributeNothrow () && func8->isAttributeConst ());
41654169 }
41664170
4171+ void cppMaybeUnusedBefore () {
4172+ const char code[] = " [[maybe_unused]] int var {};" ;
4173+ const char expected[] = " int var { } ;" ;
4174+
4175+ SimpleTokenizer tokenizer (settings0, *this );
4176+ ASSERT (tokenizer.tokenize (code));
4177+
4178+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4179+
4180+ const Token *var = Token::findsimplematch (tokenizer.tokens (), " var" );
4181+ ASSERT (var && var->isAttributeMaybeUnused ());
4182+ }
4183+
4184+ void cppMaybeUnusedAfter () {
4185+ const char code[] = " int var [[maybe_unused]] {};" ;
4186+ const char expected[] = " int var { } ;" ;
4187+
4188+ SimpleTokenizer tokenizer (settings0, *this );
4189+ ASSERT (tokenizer.tokenize (code));
4190+
4191+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4192+
4193+ const Token *var = Token::findsimplematch (tokenizer.tokens (), " var" );
4194+ ASSERT (var && var->isAttributeMaybeUnused ());
4195+ }
4196+
4197+ void cppMaybeUnusedStructuredBinding () {
4198+ const char code[] = " [[maybe_unused]] auto [var1, var2] = f();" ;
4199+ const char expected[] = " auto [ var1 , var2 ] = f ( ) ;" ;
4200+
4201+ SimpleTokenizer tokenizer (settings0, *this );
4202+ ASSERT (tokenizer.tokenize (code));
4203+
4204+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4205+
4206+ const Token *var1 = Token::findsimplematch (tokenizer.tokens (), " var1" );
4207+ ASSERT (var1 && var1->isAttributeMaybeUnused ());
4208+ const Token *var2 = Token::findsimplematch (tokenizer.tokens (), " var2" );
4209+ ASSERT (var2 && var2->isAttributeMaybeUnused ());
4210+ }
4211+
41674212
41684213 void splitTemplateRightAngleBrackets () {
41694214 {
0 commit comments