Skip to content

Commit a9d61d1

Browse files
committed
Fix #14075 (False positive: unusedStructMember, member usage by alignas is ignored)
1 parent 5e54366 commit a9d61d1

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

lib/checkunusedvar.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,6 +1628,15 @@ void CheckUnusedVar::checkStructMemberUsage()
16281628
break;
16291629
}
16301630
}
1631+
// Member referenced in alignas
1632+
if (tok->hasAttributeAlignas()) {
1633+
for (const std::string& alignasExpr : tok->getAttributeAlignas()) {
1634+
if (alignasExpr == var.name()) {
1635+
use = true;
1636+
break;
1637+
}
1638+
}
1639+
}
16311640
if (tok->variable() != &var)
16321641
continue;
16331642
if (tok != var.nameToken()) {

test/testunusedvar.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class TestUnusedVar : public TestFixture {
7171
TEST_CASE(structmember26); // #13345
7272
TEST_CASE(structmember27); // #13367
7373
TEST_CASE(structmember28);
74+
TEST_CASE(structmember29); // #14075
7475
TEST_CASE(structmember_macro);
7576
TEST_CASE(structmember_template_argument); // #13887 - do not report that member used in template argument is unused
7677
TEST_CASE(classmember);
@@ -2010,6 +2011,15 @@ class TestUnusedVar : public TestFixture {
20102011
ASSERT_EQUALS("[test.cpp:2:18]: (style) struct member 'S::a' is never used. [unusedStructMember]\n", errout_str());
20112012
}
20122013

2014+
void structmember29() { // #14075 - alignas false positive
2015+
checkStructMemberUsage("struct S {\n"
2016+
" static constexpr size_t cDataAlign = 8;\n"
2017+
" static constexpr size_t cDataSize = 128;\n"
2018+
" alignas(cDataAlign) std::array<uint8_t, cDataSize> storage{};\n"
2019+
"};\n");
2020+
ASSERT_EQUALS("[test.cpp:4:56]: (style) struct member 'S::storage' is never used. [unusedStructMember]\n", errout_str());
2021+
}
2022+
20132023
void structmember_macro() {
20142024
checkStructMemberUsageP("#define S(n) struct n { int a, b, c; };\n"
20152025
"S(unused);\n");

0 commit comments

Comments
 (0)