[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