[clang] 5d79455 - [Sema][ObjC] Don't warn about implicitly-retained self in an unevaluated
Akira Hatanaka via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 22 12:19:26 PDT 2022
Author: Akira Hatanaka
Date: 2022-08-22T12:16:37-07:00
New Revision: 5d794552bc0c15bbe9852080e60bcecead09302f
URL: https://github.com/llvm/llvm-project/commit/5d794552bc0c15bbe9852080e60bcecead09302f
DIFF: https://github.com/llvm/llvm-project/commit/5d794552bc0c15bbe9852080e60bcecead09302f.diff
LOG: [Sema][ObjC] Don't warn about implicitly-retained self in an unevaluated
context
Added:
Modified:
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaObjCXX/warn-implicit-self-in-block.mm
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 59918464148cb..eb1690c007885 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -2946,7 +2946,7 @@ ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc,
!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))
getCurFunction()->recordUseOfWeak(Result);
}
- if (getLangOpts().ObjCAutoRefCount)
+ if (getLangOpts().ObjCAutoRefCount && !isUnevaluatedContext())
if (const BlockDecl *BD = CurContext->getInnermostBlockDecl())
ImplicitlyRetainedSelfLocs.push_back({Loc, BD});
diff --git a/clang/test/SemaObjCXX/warn-implicit-self-in-block.mm b/clang/test/SemaObjCXX/warn-implicit-self-in-block.mm
index 4842b4b10ba91..7cc811b6b056b 100644
--- a/clang/test/SemaObjCXX/warn-implicit-self-in-block.mm
+++ b/clang/test/SemaObjCXX/warn-implicit-self-in-block.mm
@@ -39,4 +39,8 @@ - (void)testLambdaInBlock{
noescapeFunc(^{ [&](){ (void)_bar; }(); });
escapeFunc(^{ [&](){ (void)_bar; }(); }); // expected-warning {{block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior}}
}
+
+ - (BlockTy)testDeclType{
+ return ^{ decltype(_bar) i = 12; (void)i; };
+ }
@end
More information about the cfe-commits
mailing list