Skip to content

Commit d299de5

Browse files
committed
add tests
1 parent 9433184 commit d299de5

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
@@ -273,6 +273,10 @@ class TestTokenizer : public TestFixture {
273273
TEST_CASE(functionAttributeListBefore);
274274
TEST_CASE(functionAttributeListAfter);
275275

276+
TEST_CASE(cppMaybeUnusedBefore);
277+
TEST_CASE(cppMaybeUnusedAfter);
278+
TEST_CASE(cppMaybeUnusedStructuredBinding);
279+
276280
TEST_CASE(splitTemplateRightAngleBrackets);
277281

278282
TEST_CASE(cpp03template1);
@@ -4192,6 +4196,47 @@ class TestTokenizer : public TestFixture {
41924196
ASSERT(func8 && func8->isAttributeNoreturn() && func8->isAttributePure() && func8->isAttributeNothrow() && func8->isAttributeConst());
41934197
}
41944198

4199+
void cppMaybeUnusedBefore() {
4200+
const char code[] = "[[maybe_unused]] int var {};";
4201+
const char expected[] = "int var { } ;";
4202+
4203+
SimpleTokenizer tokenizer(settings0, *this);
4204+
ASSERT(tokenizer.tokenize(code));
4205+
4206+
ASSERT_EQUALS(expected, tokenizer.tokens()->stringifyList(nullptr, false));
4207+
4208+
const Token *var = Token::findsimplematch(tokenizer.tokens(), "var");
4209+
ASSERT(var && var->isAttributeMaybeUnused());
4210+
}
4211+
4212+
void cppMaybeUnusedAfter() {
4213+
const char code[] = "int var [[maybe_unused]] {};";
4214+
const char expected[] = "int var { } ;";
4215+
4216+
SimpleTokenizer tokenizer(settings0, *this);
4217+
ASSERT(tokenizer.tokenize(code));
4218+
4219+
ASSERT_EQUALS(expected, tokenizer.tokens()->stringifyList(nullptr, false));
4220+
4221+
const Token *var = Token::findsimplematch(tokenizer.tokens(), "var");
4222+
ASSERT(var && var->isAttributeMaybeUnused());
4223+
}
4224+
4225+
void cppMaybeUnusedStructuredBinding() {
4226+
const char code[] = "[[maybe_unused]] auto [var1, var2] = f();";
4227+
const char expected[] = "auto [ var1 , var2 ] = f ( ) ;";
4228+
4229+
SimpleTokenizer tokenizer(settings0, *this);
4230+
ASSERT(tokenizer.tokenize(code));
4231+
4232+
ASSERT_EQUALS(expected, tokenizer.tokens()->stringifyList(nullptr, false));
4233+
4234+
const Token *var1 = Token::findsimplematch(tokenizer.tokens(), "var1");
4235+
ASSERT(var1 && var1->isAttributeMaybeUnused());
4236+
const Token *var2 = Token::findsimplematch(tokenizer.tokens(), "var2");
4237+
ASSERT(var2 && var2->isAttributeMaybeUnused());
4238+
}
4239+
41954240

41964241
void splitTemplateRightAngleBrackets() {
41974242
{

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)