This revision was automatically updated to reflect the committed changes. Closed by commit rGaf9923674787: Don't diagnose unused but set when the Cleanup attribute is used. (authored by mbenfield).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109862/new/ https://reviews.llvm.org/D109862 Files: clang/lib/Sema/SemaDecl.cpp clang/test/Sema/warn-unused-but-set-variables.c Index: clang/test/Sema/warn-unused-but-set-variables.c =================================================================== --- clang/test/Sema/warn-unused-but-set-variables.c +++ clang/test/Sema/warn-unused-but-set-variables.c @@ -49,3 +49,13 @@ x = 0; (void) sizeof(x); } + +void for_cleanup(int *x) { + *x = 0; +} + +void f3(void) { + // Don't warn if the __cleanup__ attribute is used. + __attribute__((__cleanup__(for_cleanup))) int x; + x = 5; +} Index: clang/lib/Sema/SemaDecl.cpp =================================================================== --- clang/lib/Sema/SemaDecl.cpp +++ clang/lib/Sema/SemaDecl.cpp @@ -1921,8 +1921,10 @@ } void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD) { - // If it's not referenced, it can't be set. - if (!VD->isReferenced() || !VD->getDeclName() || VD->hasAttr<UnusedAttr>()) + // If it's not referenced, it can't be set. If it has the Cleanup attribute, + // it's not really unused. + if (!VD->isReferenced() || !VD->getDeclName() || VD->hasAttr<UnusedAttr>() || + VD->hasAttr<CleanupAttr>()) return; const auto *Ty = VD->getType().getTypePtr()->getBaseElementTypeUnsafe();
Index: clang/test/Sema/warn-unused-but-set-variables.c =================================================================== --- clang/test/Sema/warn-unused-but-set-variables.c +++ clang/test/Sema/warn-unused-but-set-variables.c @@ -49,3 +49,13 @@ x = 0; (void) sizeof(x); } + +void for_cleanup(int *x) { + *x = 0; +} + +void f3(void) { + // Don't warn if the __cleanup__ attribute is used. + __attribute__((__cleanup__(for_cleanup))) int x; + x = 5; +} Index: clang/lib/Sema/SemaDecl.cpp =================================================================== --- clang/lib/Sema/SemaDecl.cpp +++ clang/lib/Sema/SemaDecl.cpp @@ -1921,8 +1921,10 @@ } void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD) { - // If it's not referenced, it can't be set. - if (!VD->isReferenced() || !VD->getDeclName() || VD->hasAttr<UnusedAttr>()) + // If it's not referenced, it can't be set. If it has the Cleanup attribute, + // it's not really unused. + if (!VD->isReferenced() || !VD->getDeclName() || VD->hasAttr<UnusedAttr>() || + VD->hasAttr<CleanupAttr>()) return; const auto *Ty = VD->getType().getTypePtr()->getBaseElementTypeUnsafe();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits