diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 0ad9ddef1d6..6a2fa498c8f 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6359,6 +6359,8 @@ void Tokenizer::dump(std::ostream &out) const outs += " isAttributeMaybeUnused=\"true\""; if (tok->isAttributeUnused()) outs += " isAttributeUnused=\"true\""; + if (tok->isAttributeUsed()) + outs += " isAttributeUsed=\"true\""; if (tok->isAttributeFallthrough()) outs += " isAttributeFallthrough=\"true\""; if (tok->isInitBracket()) diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index ad15ef06a70..d5c770169e4 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -537,6 +537,7 @@ class TestTokenizer : public TestFixture { TEST_CASE(simplifyPlatformTypes); TEST_CASE(dumpFallthrough); + TEST_CASE(dumpAttributeUsed); TEST_CASE(simplifyRedundantParentheses); @@ -9389,6 +9390,16 @@ class TestTokenizer : public TestFixture { ASSERT(dump.find(" isAttributeFallthrough=\"true\"") != std::string::npos); } + void dumpAttributeUsed() { + const char code[] = "static int x __attribute__((used));\n"; + SimpleTokenizer tokenizer(settingsDefault, *this, false); + ASSERT(tokenizer.tokenize(code)); + std::ostringstream ostr; + tokenizer.dump(ostr); + const std::string dump = ostr.str(); + ASSERT(dump.find(" isAttributeUsed=\"true\"") != std::string::npos); + } + void simplifyRedundantParentheses() { const char code[] = "int f(struct S s) {\n" " return g(1, &(int){ s.i });\n"