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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits