https://github.com/smanna12 updated https://github.com/llvm/llvm-project/pull/94368
>From b6d45ded3d0d1ad6a50a1292d4f8275081089150 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Tue, 4 Jun 2024 08:33:51 -0700 Subject: [PATCH 01/11] [Clang] Fix potential null pointer dereferences in Sema::AddInitializerToDecl This patch adds null check for 'Init' before dereferencing it to prevent potential null pointer dereferences reported by static Analyzer tool in the function. --- clang/lib/Sema/SemaDecl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 34e46e12859bb2..cd50df646b8b2b 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13728,7 +13728,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { // paths through the function. This should be revisited if // -Wrepeated-use-of-weak is made flow-sensitive. if (FunctionScopeInfo *FSI = getCurFunction()) - if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || + if (Init && (VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc())) >From 14d874cbfa18b321c15b5bea7409efc5aa388da2 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Tue, 4 Jun 2024 08:44:23 -0700 Subject: [PATCH 02/11] Fix Clang format errors --- clang/lib/Sema/SemaDecl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index cd50df646b8b2b..474e393de669c6 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13728,7 +13728,8 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { // paths through the function. This should be revisited if // -Wrepeated-use-of-weak is made flow-sensitive. if (FunctionScopeInfo *FSI = getCurFunction()) - if (Init && (VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || + if (Init && + (VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc())) >From fc124205388bd5c87aa9848d9b7ba51476c83d8b Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Tue, 4 Jun 2024 09:31:09 -0700 Subject: [PATCH 03/11] Address review comments --- clang/lib/Sema/SemaDecl.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 474e393de669c6..292236bf1a0ee1 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13681,6 +13681,8 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { } Init = Result.getAs<Expr>(); + assert (Init && "Init must not be null"); + IsParenListInit = !InitSeq.steps().empty() && InitSeq.step_begin()->Kind == InitializationSequence::SK_ParenthesizedListInit; @@ -13728,8 +13730,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { // paths through the function. This should be revisited if // -Wrepeated-use-of-weak is made flow-sensitive. if (FunctionScopeInfo *FSI = getCurFunction()) - if (Init && - (VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || + if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc())) >From 5b2da669506c49f4bdb2d9a6c53758c0f8480b72 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Tue, 4 Jun 2024 09:36:23 -0700 Subject: [PATCH 04/11] Fix clang format errors --- clang/lib/Sema/SemaDecl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 292236bf1a0ee1..5439aedec08859 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13681,7 +13681,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { } Init = Result.getAs<Expr>(); - assert (Init && "Init must not be null"); + assert(Init && "Init must not be null"); IsParenListInit = !InitSeq.steps().empty() && InitSeq.step_begin()->Kind == >From 400d6851767aa675fe34dc509256d37089d22ee9 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Fri, 28 Jun 2024 14:18:13 -0700 Subject: [PATCH 05/11] Fix lit failure --- clang/lib/Sema/SemaDecl.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 5439aedec08859..f13c9a3efc9e6b 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13687,8 +13687,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { InitSeq.step_begin()->Kind == InitializationSequence::SK_ParenthesizedListInit; QualType VDeclType = VDecl->getType(); - if (Init && !Init->getType().isNull() && - !Init->getType()->isDependentType() && !VDeclType->isDependentType() && + if (!Init->getType()->isDependentType() && !VDeclType->isDependentType() && Context.getAsIncompleteArrayType(VDeclType) && Context.getAsIncompleteArrayType(Init->getType())) { // Bail out if it is not possible to deduce array size from the >From 2b600b5a634933d4a82a7e538e0f53c551a0e986 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Fri, 2 Aug 2024 13:42:28 -0700 Subject: [PATCH 06/11] Remove assert --- clang/lib/Sema/SemaDecl.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index f13c9a3efc9e6b..09ca04f66d2202 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13681,13 +13681,18 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { } Init = Result.getAs<Expr>(); - assert(Init && "Init must not be null"); + + if (!Init) { + VDecl->setInvalidDecl(); + return; + } IsParenListInit = !InitSeq.steps().empty() && InitSeq.step_begin()->Kind == InitializationSequence::SK_ParenthesizedListInit; QualType VDeclType = VDecl->getType(); - if (!Init->getType()->isDependentType() && !VDeclType->isDependentType() && + if (Init && !Init->getType().isNull() && + !Init->getType()->isDependentType() && !VDeclType->isDependentType() && Context.getAsIncompleteArrayType(VDeclType) && Context.getAsIncompleteArrayType(Init->getType())) { // Bail out if it is not possible to deduce array size from the >From 586c34d875d798cbc39710aefb0f8daf7819b6bc Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Mon, 19 Aug 2024 12:35:54 -0700 Subject: [PATCH 07/11] Address review comments --- clang/lib/Sema/SemaDecl.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 09ca04f66d2202..d344f7b7eb1d29 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13477,7 +13477,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { } // WebAssembly tables can't be used to initialise a variable. - if (Init && !Init->getType().isNull() && + if (!Init->getType().isNull() && Init->getType()->isWebAssemblyTableType()) { Diag(Init->getExprLoc(), diag::err_wasm_table_art) << 0; VDecl->setInvalidDecl(); @@ -13682,10 +13682,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { Init = Result.getAs<Expr>(); - if (!Init) { - VDecl->setInvalidDecl(); - return; - } + assert(Init && "Should have a valid initializer at this point"); IsParenListInit = !InitSeq.steps().empty() && InitSeq.step_begin()->Kind == >From 3e983f9fa3fae660be553b94380966951a649bf7 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Mon, 19 Aug 2024 13:01:29 -0700 Subject: [PATCH 08/11] Address clang format issues --- clang/lib/Sema/SemaDecl.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index d344f7b7eb1d29..4e0c5776839af9 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13477,8 +13477,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { } // WebAssembly tables can't be used to initialise a variable. - if (!Init->getType().isNull() && - Init->getType()->isWebAssemblyTableType()) { + if (!Init->getType().isNull() && Init->getType()->isWebAssemblyTableType()) { Diag(Init->getExprLoc(), diag::err_wasm_table_art) << 0; VDecl->setInvalidDecl(); return; @@ -13688,7 +13687,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { InitSeq.step_begin()->Kind == InitializationSequence::SK_ParenthesizedListInit; QualType VDeclType = VDecl->getType(); - if (Init && !Init->getType().isNull() && + if (!Init->getType().isNull() && !Init->getType()->isDependentType() && !VDeclType->isDependentType() && Context.getAsIncompleteArrayType(VDeclType) && Context.getAsIncompleteArrayType(Init->getType())) { >From 9b0236f5e3dcf67294dfcf27a72a234d5977589c Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Mon, 19 Aug 2024 13:13:01 -0700 Subject: [PATCH 09/11] Fix code --- clang/lib/Sema/SemaDecl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 4e0c5776839af9..0e25ec639fb386 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13687,7 +13687,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { InitSeq.step_begin()->Kind == InitializationSequence::SK_ParenthesizedListInit; QualType VDeclType = VDecl->getType(); - if (!Init->getType().isNull() && + if (Init && !Init->getType().isNull() && !Init->getType()->isDependentType() && !VDeclType->isDependentType() && Context.getAsIncompleteArrayType(VDeclType) && Context.getAsIncompleteArrayType(Init->getType())) { >From c9346fb661997ef12358aae222f76f56b866413f Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Mon, 19 Aug 2024 16:09:02 -0700 Subject: [PATCH 10/11] update patch --- clang/lib/Sema/SemaDecl.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 0e25ec639fb386..992e1601db0175 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13681,7 +13681,9 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { Init = Result.getAs<Expr>(); - assert(Init && "Should have a valid initializer at this point"); + // Assert that Init is non-null only if no errors have occurred. + assert((!Result.isInvalid() && Init) && + "Should have a valid initializer at this point"); IsParenListInit = !InitSeq.steps().empty() && InitSeq.step_begin()->Kind == >From ea34dff36b21d44411aa735aff577c696260c9d6 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" <soumi.ma...@intel.com> Date: Tue, 20 Aug 2024 12:21:36 -0700 Subject: [PATCH 11/11] Fix test failure --- clang/lib/Sema/SemaDecl.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 992e1601db0175..3073e754908f02 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13681,9 +13681,8 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { Init = Result.getAs<Expr>(); - // Assert that Init is non-null only if no errors have occurred. - assert((!Result.isInvalid() && Init) && - "Should have a valid initializer at this point"); + assert((Init || InitSeq.steps().empty()) && + "Should have a valid initializer or no initialization steps at this point"); IsParenListInit = !InitSeq.steps().empty() && InitSeq.step_begin()->Kind == _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits