From 22b23a5213b57ce1834f5b50fbbf8a50297efc8a Mon Sep 17 00:00:00 2001 From: Akshay Khadse Date: Sun, 23 Apr 2023 12:06:54 +0800 Subject: [PATCH] [Coverity] Fix explicit null dereferences This change fixes static code analysis errors Reviewed By: skan Differential Revision: https://reviews.llvm.org/D148912 --- llvm/include/llvm/ADT/SparseSet.h | 1 + llvm/include/llvm/CodeGen/PBQP/CostAllocator.h | 2 +- llvm/include/llvm/CodeGen/SelectionDAGNodes.h | 1 + llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 1 + llvm/lib/CodeGen/ScheduleDAG.cpp | 2 ++ llvm/lib/CodeGen/ValueTypes.cpp | 1 + llvm/lib/IR/Mangler.cpp | 1 + llvm/lib/TableGen/Record.cpp | 3 +++ llvm/lib/Target/X86/X86InstrInfo.cpp | 1 + llvm/utils/TableGen/GlobalISelEmitter.cpp | 1 + 10 files changed, 13 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/ADT/SparseSet.h b/llvm/include/llvm/ADT/SparseSet.h index c9895d7..4a999e6 100644 --- a/llvm/include/llvm/ADT/SparseSet.h +++ b/llvm/include/llvm/ADT/SparseSet.h @@ -203,6 +203,7 @@ public: /// iterator findIndex(unsigned Idx) { assert(Idx < Universe && "Key out of range"); + assert(Sparse != nullptr && "Invalid sparse type"); const unsigned Stride = std::numeric_limits::max() + 1u; for (unsigned i = Sparse[Idx], e = size(); i < e; i += Stride) { const unsigned FoundIdx = ValIndexOf(Dense[i]); diff --git a/llvm/include/llvm/CodeGen/PBQP/CostAllocator.h b/llvm/include/llvm/CodeGen/PBQP/CostAllocator.h index 0d6d8a3..7a8ee69 100644 --- a/llvm/include/llvm/CodeGen/PBQP/CostAllocator.h +++ b/llvm/include/llvm/CodeGen/PBQP/CostAllocator.h @@ -100,7 +100,7 @@ public: auto P = std::make_shared(*this, std::move(ValueKey)); EntrySet.insert(P.get()); - return PoolRef(std::move(P), &P->getValue()); + return PoolRef(P, &P->getValue()); } }; diff --git a/llvm/include/llvm/CodeGen/SelectionDAGNodes.h b/llvm/include/llvm/CodeGen/SelectionDAGNodes.h index 620fdfc..62083b6 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/llvm/include/llvm/CodeGen/SelectionDAGNodes.h @@ -1135,6 +1135,7 @@ inline SDValue::SDValue(SDNode *node, unsigned resno) } inline unsigned SDValue::getOpcode() const { + assert(Node != nullptr && "Invalid Node"); return Node->getOpcode(); } diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 0a803d8..71207ed 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1273,6 +1273,7 @@ AsmPrinter::getFunctionCFISectionType(const Function &F) const { F.needsUnwindTableEntry()) return CFISection::EH; + assert(MMI != nullptr && "Invalid machine module info"); if (MMI->hasDebugInfo() || TM.Options.ForceDwarfFrameSection) return CFISection::Debug; diff --git a/llvm/lib/CodeGen/ScheduleDAG.cpp b/llvm/lib/CodeGen/ScheduleDAG.cpp index ef886ad..14ec419 100644 --- a/llvm/lib/CodeGen/ScheduleDAG.cpp +++ b/llvm/lib/CodeGen/ScheduleDAG.cpp @@ -724,6 +724,8 @@ void ScheduleDAGTopologicalSort::AddSUnitWithoutPredecessors(const SUnit *SU) { bool ScheduleDAGTopologicalSort::IsReachable(const SUnit *SU, const SUnit *TargetSU) { + assert(TargetSU != nullptr && "Invalid target SUnit"); + assert(SU != nullptr && "Invalid SUnit"); FixOrder(); // If insertion of the edge SU->TargetSU would create a cycle // then there is a path from TargetSU to SU. diff --git a/llvm/lib/CodeGen/ValueTypes.cpp b/llvm/lib/CodeGen/ValueTypes.cpp index 1b317bd..d514e16 100644 --- a/llvm/lib/CodeGen/ValueTypes.cpp +++ b/llvm/lib/CodeGen/ValueTypes.cpp @@ -571,6 +571,7 @@ Type *EVT::getTypeForEVT(LLVMContext &Context) const { /// pointers as MVT::iPTR. If HandleUnknown is true, unknown types are returned /// as Other, otherwise they are invalid. MVT MVT::getVT(Type *Ty, bool HandleUnknown){ + assert(Ty != nullptr && "Invalid type"); switch (Ty->getTypeID()) { default: if (HandleUnknown) return MVT(MVT::Other); diff --git a/llvm/lib/IR/Mangler.cpp b/llvm/lib/IR/Mangler.cpp index 93d5639..8d9880e 100644 --- a/llvm/lib/IR/Mangler.cpp +++ b/llvm/lib/IR/Mangler.cpp @@ -119,6 +119,7 @@ static void addByteCountSuffix(raw_ostream &OS, const Function *F, void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, bool CannotUsePrivateLabel) const { ManglerPrefixTy PrefixTy = Default; + assert(GV != nullptr && "Invalid Global Value"); if (GV->hasPrivateLinkage()) { if (CannotUsePrivateLabel) PrefixTy = LinkerPrivate; diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp index df1a4d4..07776cb 100644 --- a/llvm/lib/TableGen/Record.cpp +++ b/llvm/lib/TableGen/Record.cpp @@ -318,8 +318,11 @@ RecTy *llvm::resolveTypes(RecTy *T1, RecTy *T2) { return resolveRecordTypes(RecTy1, RecTy2); } + assert(T1 != nullptr && "Invalid record type"); if (T1->typeIsConvertibleTo(T2)) return T2; + + assert(T2 != nullptr && "Invalid record type"); if (T2->typeIsConvertibleTo(T1)) return T1; diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index 004104c..7458df7 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -3603,6 +3603,7 @@ static unsigned getLoadStoreRegOpcode(Register Reg, bool HasAVX512 = STI.hasAVX512(); bool HasVLX = STI.hasVLX(); + assert(RC != nullptr && "Invalid target register class"); switch (STI.getRegisterInfo()->getSpillSize(*RC)) { default: llvm_unreachable("Unknown spill size"); diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index fc32ebc..84c5559 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -3958,6 +3958,7 @@ Expected GlobalISelEmitter::addBuiltinPredicates( } } + assert(SrcGIEquivOrNull != nullptr && "Invalid SrcGIEquivOrNull value"); // No check required. We already did it by swapping the opcode. if (!SrcGIEquivOrNull->isValueUnset("IfSignExtend") && Predicate.isSignExtLoad()) -- 2.7.4