Skip to content

Commit 2ac6184

Browse files
authored
[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 <[email protected]> --------- Signed-off-by: Soumi Manna <[email protected]>
1 parent bdd9437 commit 2ac6184

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,9 +1380,9 @@ void CodeGenModule::Release() {
13801380
for (const auto &Type : TypesWithAspects) {
13811381
StringRef Name = Type.first;
13821382
const RecordDecl *RD = Type.second;
1383-
AspectsMD->addOperand(getAspectsMD(Context, TheModule.getContext(),
1384-
Name,
1385-
RD->getAttr<SYCLUsesAspectsAttr>()));
1383+
if (const auto *Attr = RD->getAttr<SYCLUsesAspectsAttr>())
1384+
AspectsMD->addOperand(
1385+
getAspectsMD(Context, TheModule.getContext(), Name, Attr));
13861386
}
13871387
}
13881388

clang/lib/Sema/SemaDecl.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16542,16 +16542,19 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
1654216542
DiscardCleanupsInEvaluationContext();
1654316543
}
1654416544

16545-
if (FD && ((LangOpts.OpenMP && (LangOpts.OpenMPIsTargetDevice ||
16546-
!LangOpts.OMPTargetTriples.empty())) ||
16547-
LangOpts.CUDA || LangOpts.SYCLIsDevice)) {
16545+
if (!FD)
16546+
return dcl;
16547+
16548+
if ((LangOpts.OpenMP &&
16549+
(LangOpts.OpenMPIsTargetDevice || !LangOpts.OMPTargetTriples.empty())) ||
16550+
LangOpts.CUDA || LangOpts.SYCLIsDevice) {
1654816551
auto ES = getEmissionStatus(FD);
1654916552
if (ES == Sema::FunctionEmissionStatus::Emitted ||
1655016553
ES == Sema::FunctionEmissionStatus::Unknown)
1655116554
DeclsToCheckForDeferredDiags.insert(FD);
1655216555
}
1655316556

16554-
if (FD && !FD->isDeleted())
16557+
if (!FD->isDeleted())
1655516558
checkTypeSupport(FD->getType(), FD->getLocation(), FD);
1655616559

1655716560
// Handle free functions.

0 commit comments

Comments
 (0)