Skip to content

Commit 9319258

Browse files
committed
add tests
1 parent f916df0 commit 9319258

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

test/testtokenize.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{

test/testunusedvar.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class TestUnusedVar : public TestFixture {
7272
TEST_CASE(structmember27); // #13367
7373
TEST_CASE(structmember28);
7474
TEST_CASE(structmember29); // #14075
75+
TEST_CASE(structmember30); // #14130
7576
TEST_CASE(structmember_macro);
7677
TEST_CASE(structmember_template_argument); // #13887 - do not report that member used in template argument is unused
7778
TEST_CASE(classmember);
@@ -2023,6 +2024,15 @@ class TestUnusedVar : public TestFixture {
20232024
ASSERT_EQUALS("[test.cpp:4:56]: (style) struct member 'S::storage' is never used. [unusedStructMember]\n", errout_str());
20242025
}
20252026

2027+
void structmember30() { // #14130
2028+
checkStructMemberUsage("struct S\n"
2029+
"{\n"
2030+
" [[maybe_unused]] int i1{};\n"
2031+
" int i2 [[maybe_unused]] {};\n"
2032+
"};\n");
2033+
ASSERT_EQUALS("", errout_str());
2034+
}
2035+
20262036
void structmember_macro() {
20272037
checkStructMemberUsageP("#define S(n) struct n { int a, b, c; };\n"
20282038
"S(unused);\n");

0 commit comments

Comments
 (0)