From 2ac6184d2edb64c549668561aaa36f9accdafe51 Mon Sep 17 00:00:00 2001 From: smanna12 Date: Mon, 1 Jul 2024 00:59:18 -0700 Subject: [PATCH] [SYCL][NFC] Fix Static Analyzer bugs (#14349) This patch fixes two possible null pointer dereferences issues: 1. In CodeGenModule::Release(): Dereferencing a pointer that might be nullptr RD->getAttr() when calling getAspectsMD(). 2. In Sema::ActOnFinishFunctionBody(): Passing null pointer FD to hasAttr, which dereferences it. Signed-off-by: Soumi Manna --------- Signed-off-by: Soumi Manna --- clang/lib/CodeGen/CodeGenModule.cpp | 6 +++--- clang/lib/Sema/SemaDecl.cpp | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index ba02161f9c829..e9c202e4d39d2 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1380,9 +1380,9 @@ void CodeGenModule::Release() { for (const auto &Type : TypesWithAspects) { StringRef Name = Type.first; const RecordDecl *RD = Type.second; - AspectsMD->addOperand(getAspectsMD(Context, TheModule.getContext(), - Name, - RD->getAttr())); + if (const auto *Attr = RD->getAttr()) + AspectsMD->addOperand( + getAspectsMD(Context, TheModule.getContext(), Name, Attr)); } } diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index a9fa63a5e3fa9..fbafc428be6cb 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -16542,16 +16542,19 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, DiscardCleanupsInEvaluationContext(); } - if (FD && ((LangOpts.OpenMP && (LangOpts.OpenMPIsTargetDevice || - !LangOpts.OMPTargetTriples.empty())) || - LangOpts.CUDA || LangOpts.SYCLIsDevice)) { + if (!FD) + return dcl; + + if ((LangOpts.OpenMP && + (LangOpts.OpenMPIsTargetDevice || !LangOpts.OMPTargetTriples.empty())) || + LangOpts.CUDA || LangOpts.SYCLIsDevice) { auto ES = getEmissionStatus(FD); if (ES == Sema::FunctionEmissionStatus::Emitted || ES == Sema::FunctionEmissionStatus::Unknown) DeclsToCheckForDeferredDiags.insert(FD); } - if (FD && !FD->isDeleted()) + if (!FD->isDeleted()) checkTypeSupport(FD->getType(), FD->getLocation(), FD); // Handle free functions.