File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 ()) {
Original file line number Diff line number Diff 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 " );
You can’t perform that action at this time.
0 commit comments