https://github.com/smanna12 updated https://github.com/llvm/llvm-project/pull/97220
>From 63f45c952ff8ab7df261a150355a34267e4a645c Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Sun, 30 Jun 2024 08:40:27 -0700 Subject: [PATCH 1/3] [Clang] Prevent null pointer dereference in designated initializer check This patch adds a null check for the current method declaration before attempting to determine if it is a designated initializer. This prevents a potential null pointer dereference when `getCurMethodDecl()` returns nullptr, reported by static analyzer tool in clang::SemaObjC::BuildInstanceMessage(). --- clang/lib/Sema/SemaExprObjC.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 7ccecf055feed..05aa30e16ed8e 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -3206,9 +3206,11 @@ ExprResult SemaObjC::BuildInstanceMessage( } if (!isDesignatedInitChain) { const ObjCMethodDecl *InitMethod = nullptr; + auto *CurMD = SemaRef.getCurMethodDecl(); + if (!CurMD) + return nullptr; bool isDesignated = - SemaRef.getCurMethodDecl()->isDesignatedInitializerForTheInterface( - &InitMethod); + CurMD->isDesignatedInitializerForTheInterface(&InitMethod); assert(isDesignated && InitMethod); (void)isDesignated; Diag(SelLoc, SuperLoc.isValid() ? >From 44c309e87d2101b554321741b1c751247a5b6478 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Sun, 30 Jun 2024 09:47:03 -0700 Subject: [PATCH 2/3] Fix build failure --- clang/lib/Sema/SemaExprObjC.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 05aa30e16ed8e..f943b5f3b5339 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -3208,7 +3208,7 @@ ExprResult SemaObjC::BuildInstanceMessage( const ObjCMethodDecl *InitMethod = nullptr; auto *CurMD = SemaRef.getCurMethodDecl(); if (!CurMD) - return nullptr; + return ExprResult((Expr*)nullptr); bool isDesignated = CurMD->isDesignatedInitializerForTheInterface(&InitMethod); assert(isDesignated && InitMethod); >From ca4a91f41048e30dc373a40a019216813df0e7c0 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Sun, 30 Jun 2024 10:00:26 -0700 Subject: [PATCH 3/3] Fix Clang format errors --- clang/lib/Sema/SemaExprObjC.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index f943b5f3b5339..80e35f79a172d 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -3208,7 +3208,7 @@ ExprResult SemaObjC::BuildInstanceMessage( const ObjCMethodDecl *InitMethod = nullptr; auto *CurMD = SemaRef.getCurMethodDecl(); if (!CurMD) - return ExprResult((Expr*)nullptr); + return ExprResult((Expr *)nullptr); bool isDesignated = CurMD->isDesignatedInitializerForTheInterface(&InitMethod); assert(isDesignated && InitMethod); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits