[clang] 3cb16f6 - [Sema][ObjC] Invalidate BlockDecl with invalid ParmVarDecl

via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 24 03:32:55 PDT 2023


Author: dingfei
Date: 2023-07-24T18:32:46+08:00
New Revision: 3cb16f6d2ddd030c35df7ad3eb7985f1947173cb

URL: https://github.com/llvm/llvm-project/commit/3cb16f6d2ddd030c35df7ad3eb7985f1947173cb
DIFF: https://github.com/llvm/llvm-project/commit/3cb16f6d2ddd030c35df7ad3eb7985f1947173cb.diff

LOG: [Sema][ObjC] Invalidate BlockDecl with invalid ParmVarDecl

BlockDecl should be invalidated because of its invalid ParmVarDecl.

Fixes #1 of https://github.com/llvm/llvm-project/issues/64005

Differential Revision: https://reviews.llvm.org/D155984

Added: 
    

Modified: 
    clang/docs/ReleaseNotes.rst
    clang/lib/Sema/SemaExpr.cpp
    clang/test/AST/ast-dump-recovery.m

Removed: 
    


################################################################################
diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index e686e83583919f..5d09c454dea290 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -674,6 +674,8 @@ Bug Fixes in This Version
   value exprs is invalid. Propagating the error info up by replacing BlockExpr
   with a RecoveryExpr. This fixes:
   (`#63863 <https://github.com/llvm/llvm-project/issues/63863>_`)
+- Invalidate BlockDecl with invalid ParmVarDecl
+  (`#64005 <https://github.com/llvm/llvm-project/issues/64005>_`)
 
 Bug Fixes to Compiler Builtins
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

diff  --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3c9d0efca8a1ee..716383412cc58c 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -16959,6 +16959,9 @@ void Sema::ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo,
 
       PushOnScopeChains(AI, CurBlock->TheScope);
     }
+
+    if (AI->isInvalidDecl())
+      CurBlock->TheDecl->setInvalidDecl();
   }
 }
 

diff  --git a/clang/test/AST/ast-dump-recovery.m b/clang/test/AST/ast-dump-recovery.m
index c2bd078959aba1..37fa8045c0b941 100644
--- a/clang/test/AST/ast-dump-recovery.m
+++ b/clang/test/AST/ast-dump-recovery.m
@@ -24,3 +24,9 @@ void k(Foo *foo) {
 int (^gh63863)() = ^() {
   return undef;
 };
+
+// CHECK:      `-BlockExpr {{.*}} 'int (^)(int, int)'
+// CHECK-NEXT:   `-BlockDecl {{.*}} invalid
+int (^gh64005)(int, int) = ^(int, undefined b) {
+   return 1;
+};


        


More information about the cfe-commits mailing list