[clang] 877210f - [Sema] Do not emit -Wunused-variable for variables declared with cleanup attribute
Nathan Chancellor via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 5 10:55:06 PDT 2023
Author: Nathan Chancellor
Date: 2023-06-05T10:54:47-07:00
New Revision: 877210faa447f4cc7db87812f8ed80e398fedd61
URL: https://github.com/llvm/llvm-project/commit/877210faa447f4cc7db87812f8ed80e398fedd61
DIFF: https://github.com/llvm/llvm-project/commit/877210faa447f4cc7db87812f8ed80e398fedd61.diff
LOG: [Sema] Do not emit -Wunused-variable for variables declared with cleanup attribute
A variable declared with __attribute__((cleanup)) cannot be unused, as
its address is passed to the clean up function. Do not emit
-Wunused-variable for variables declared with the cleanup attribute,
which matches GCC's behavior: https://godbolt.org/z/dz5YfTsan
Reviewed By: erichkeane, nickdesaulniers
Differential Revision: https://reviews.llvm.org/D152180
Added:
Modified:
clang/lib/Sema/SemaDecl.cpp
clang/test/Sema/warn-unused-variables.c
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index b8aba816283d6..12fd378fb170c 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -1992,7 +1992,8 @@ static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
return false;
}
- if (D->hasAttr<UnusedAttr>() || D->hasAttr<ObjCPreciseLifetimeAttr>())
+ if (D->hasAttr<UnusedAttr>() || D->hasAttr<ObjCPreciseLifetimeAttr>() ||
+ D->hasAttr<CleanupAttr>())
return false;
if (isa<LabelDecl>(D))
diff --git a/clang/test/Sema/warn-unused-variables.c b/clang/test/Sema/warn-unused-variables.c
index d482c353f0ad1..26b18720849f9 100644
--- a/clang/test/Sema/warn-unused-variables.c
+++ b/clang/test/Sema/warn-unused-variables.c
@@ -30,3 +30,8 @@ int f3(void) {
(void)(^() { int X = 4; }); // expected-warning{{unused}}
(void)(^() { int X = 4; return Y + X; }); // expected-error {{use of undeclared identifier 'Y'}}
}
+
+void c1(int *);
+void f4(void) {
+ int __attribute__((cleanup(c1))) X1 = 4;
+}
More information about the cfe-commits
mailing list