File tree Expand file tree Collapse file tree 2 files changed +21
-0
lines changed Expand file tree Collapse file tree 2 files changed +21
-0
lines changed Original file line number Diff line number Diff line change @@ -1628,6 +1628,17 @@ void CheckUnusedVar::checkStructMemberUsage()
16281628 break ;
16291629 }
16301630 }
1631+ // Member referenced in alignas
1632+ if (tok->hasAttributeAlignas ()) {
1633+ const std::vector<std::string> alignasExpressions = tok->getAttributeAlignas ();
1634+ use = std::any_of (alignasExpressions.cbegin (),
1635+ alignasExpressions.cend (),
1636+ [&var](const std::string& alignasExpr){
1637+ return alignasExpr == var.name ();
1638+ });
1639+ if (use)
1640+ break ;
1641+ }
16311642 if (tok->variable () != &var)
16321643 continue ;
16331644 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);
@@ -2013,6 +2014,15 @@ class TestUnusedVar : public TestFixture {
20132014 ASSERT_EQUALS (" [test.cpp:2:18]: (style) struct member 'S::a' is never used. [unusedStructMember]\n " , errout_str ());
20142015 }
20152016
2017+ void structmember29 () { // #14075 - alignas false positive
2018+ checkStructMemberUsage (" struct S {\n "
2019+ " static constexpr size_t cDataAlign = 8;\n "
2020+ " static constexpr size_t cDataSize = 128;\n "
2021+ " alignas(cDataAlign) std::array<uint8_t, cDataSize> storage{};\n "
2022+ " };\n " );
2023+ ASSERT_EQUALS (" [test.cpp:4:56]: (style) struct member 'S::storage' is never used. [unusedStructMember]\n " , errout_str ());
2024+ }
2025+
20162026 void structmember_macro () {
20172027 checkStructMemberUsageP (" #define S(n) struct n { int a, b, c; };\n "
20182028 " S(unused);\n " );
You can’t perform that action at this time.
0 commit comments