This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGa4fbc0918462: Clang: Don't warn about unused private fields of types declared maybe_unused (authored by hans).
Changed prior to commit: https://reviews.llvm.org/D159083?vs=554312&id=554594#toc Repository: rG LLVM Github Monorepo 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 @@ -202,6 +202,9 @@ - Clang now emits an error if it is not possible to deduce array size for a variable with incomplete array type. (`#37257 <https://github.com/llvm/llvm-project/issues/37257>`_) +- 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 @@ -202,6 +202,9 @@ - Clang now emits an error if it is not possible to deduce array size for a variable with incomplete array type. (`#37257 <https://github.com/llvm/llvm-project/issues/37257>`_) +- 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