hans updated this revision to Diff 554312. hans added a comment. Add release note.
CHANGES SINCE LAST ACTION https://reviews.llvm.org/D159083/new/ https://reviews.llvm.org/D159083 Files: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaDeclCXX.cpp clang/test/SemaCXX/warn-unused-private-field.cpp Index: clang/test/SemaCXX/warn-unused-private-field.cpp =================================================================== --- clang/test/SemaCXX/warn-unused-private-field.cpp +++ clang/test/SemaCXX/warn-unused-private-field.cpp @@ -284,3 +284,14 @@ private: int n; // expected-warning{{private field 'n' is not used}} }; + +namespace pr61334 { +class [[maybe_unused]] MaybeUnusedClass {}; +enum [[maybe_unused]] MaybeUnusedEnum {}; +typedef int MaybeUnusedTypedef [[maybe_unused]]; +class C { + MaybeUnusedClass c; // no-warning + MaybeUnusedEnum e; // no-warning + MaybeUnusedTypedef t; // no-warning +}; +} Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -3729,10 +3729,20 @@ if (!Diags.isIgnored(diag::warn_unused_private_field, FD->getLocation())) { // Remember all explicit private FieldDecls that have a name, no side // effects and are not part of a dependent type declaration. + + auto DeclHasUnusedAttr = [](const QualType &T) { + if (const TagDecl *TD = T->getAsTagDecl()) + return TD->hasAttr<UnusedAttr>(); + if (const TypedefType *TDT = T->getAs<TypedefType>()) + return TDT->getDecl()->hasAttr<UnusedAttr>(); + return false; + }; + if (!FD->isImplicit() && FD->getDeclName() && FD->getAccess() == AS_private && !FD->hasAttr<UnusedAttr>() && !FD->getParent()->isDependentContext() && + !DeclHasUnusedAttr(FD->getType()) && !InitializationHasSideEffects(*FD)) UnusedPrivateFields.insert(FD); } Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -193,6 +193,9 @@ (`#64876 <https://github.com/llvm/llvm-project/issues/64876>`_) - Fixed an assertion if a function has cleanups and fatal erors. (`#48974 <https://github.com/llvm/llvm-project/issues/48974>`_) +- Clang's ``-Wunused-private-field`` no longer warns on fields whose type is + declared with ``[[maybe_unused]]``. + (`#61334 <https://github.com/llvm/llvm-project/issues/61334>`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Index: clang/test/SemaCXX/warn-unused-private-field.cpp =================================================================== --- clang/test/SemaCXX/warn-unused-private-field.cpp +++ clang/test/SemaCXX/warn-unused-private-field.cpp @@ -284,3 +284,14 @@ private: int n; // expected-warning{{private field 'n' is not used}} }; + +namespace pr61334 { +class [[maybe_unused]] MaybeUnusedClass {}; +enum [[maybe_unused]] MaybeUnusedEnum {}; +typedef int MaybeUnusedTypedef [[maybe_unused]]; +class C { + MaybeUnusedClass c; // no-warning + MaybeUnusedEnum e; // no-warning + MaybeUnusedTypedef t; // no-warning +}; +} Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -3729,10 +3729,20 @@ if (!Diags.isIgnored(diag::warn_unused_private_field, FD->getLocation())) { // Remember all explicit private FieldDecls that have a name, no side // effects and are not part of a dependent type declaration. + + auto DeclHasUnusedAttr = [](const QualType &T) { + if (const TagDecl *TD = T->getAsTagDecl()) + return TD->hasAttr<UnusedAttr>(); + if (const TypedefType *TDT = T->getAs<TypedefType>()) + return TDT->getDecl()->hasAttr<UnusedAttr>(); + return false; + }; + if (!FD->isImplicit() && FD->getDeclName() && FD->getAccess() == AS_private && !FD->hasAttr<UnusedAttr>() && !FD->getParent()->isDependentContext() && + !DeclHasUnusedAttr(FD->getType()) && !InitializationHasSideEffects(*FD)) UnusedPrivateFields.insert(FD); } Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -193,6 +193,9 @@ (`#64876 <https://github.com/llvm/llvm-project/issues/64876>`_) - Fixed an assertion if a function has cleanups and fatal erors. (`#48974 <https://github.com/llvm/llvm-project/issues/48974>`_) +- Clang's ``-Wunused-private-field`` no longer warns on fields whose type is + declared with ``[[maybe_unused]]``. + (`#61334 <https://github.com/llvm/llvm-project/issues/61334>`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits