diff options
-rw-r--r-- | lib/RSGlobalInfoPass.cpp | 20 | ||||
-rw-r--r-- | lib/RSInvokeHelperPass.cpp | 4 | ||||
-rw-r--r-- | lib/RSUtils.h | 3 | ||||
-rw-r--r-- | lib/RSX86TranslateGEPPass.cpp | 1 |
4 files changed, 28 insertions, 0 deletions
diff --git a/lib/RSGlobalInfoPass.cpp b/lib/RSGlobalInfoPass.cpp index 40d658b..d9e64f3 100644 --- a/lib/RSGlobalInfoPass.cpp +++ b/lib/RSGlobalInfoPass.cpp @@ -206,6 +206,10 @@ public: llvm::Value *V = M.getOrInsertGlobal(kRsGlobalEntries, Int32Ty); llvm::GlobalVariable *GlobalEntries = llvm::dyn_cast<llvm::GlobalVariable>(V); + if (!GlobalEntries) { + // Abort when dynamic_cast failed? + return false; + } llvm::Constant *GlobalEntriesInit = llvm::ConstantInt::get(Int32Ty, NumGlobals); GlobalEntries->setInitializer(GlobalEntriesInit); @@ -215,6 +219,10 @@ public: V = M.getOrInsertGlobal(kRsGlobalNames, VoidPtrArrayTy); llvm::GlobalVariable *GlobalNames = llvm::dyn_cast<llvm::GlobalVariable>(V); + if (!GlobalNames) { + // Abort when dynamic_cast failed? + return false; + } llvm::Constant *GlobalNamesInit = llvm::ConstantArray::get(VoidPtrArrayTy, GVNames); GlobalNames->setInitializer(GlobalNamesInit); @@ -224,6 +232,10 @@ public: V = M.getOrInsertGlobal(kRsGlobalAddresses, VoidPtrArrayTy); llvm::GlobalVariable *GlobalAddresses = llvm::dyn_cast<llvm::GlobalVariable>(V); + if (!GlobalAddresses) { + // Abort when dynamic_cast failed? + return false; + } llvm::Constant *GlobalAddressesInit = llvm::ConstantArray::get(VoidPtrArrayTy, GVAddresses); GlobalAddresses->setInitializer(GlobalAddressesInit); @@ -234,6 +246,10 @@ public: V = M.getOrInsertGlobal(kRsGlobalSizes, SizeArrayTy); llvm::GlobalVariable *GlobalSizes = llvm::dyn_cast<llvm::GlobalVariable>(V); + if (!GlobalSizes) { + // Abort when dynamic_cast failed? + return false; + } llvm::Constant *GlobalSizesInit; if (PointerSizeInBits == 32) { GlobalSizesInit = llvm::ConstantDataArray::get(M.getContext(), GVSizes32); @@ -247,6 +263,10 @@ public: V = M.getOrInsertGlobal(kRsGlobalProperties, Int32ArrayTy); llvm::GlobalVariable *GlobalProperties = llvm::dyn_cast<llvm::GlobalVariable>(V); + if (!GlobalProperties) { + // Abort when dynamic_cast failed? + return false; + } llvm::Constant *GlobalPropertiesInit = llvm::ConstantDataArray::get(M.getContext(), GVProperties); GlobalProperties->setInitializer(GlobalPropertiesInit); diff --git a/lib/RSInvokeHelperPass.cpp b/lib/RSInvokeHelperPass.cpp index 99316ce..a22909f 100644 --- a/lib/RSInvokeHelperPass.cpp +++ b/lib/RSInvokeHelperPass.cpp @@ -177,6 +177,10 @@ public: continue; llvm::StructType *argStructType = llvm::dyn_cast<llvm::StructType>(argType->getPointerElementType()); + if (!argStructType) { + // Abort when dynamic_cast failed? + continue; + } for (unsigned int i = 0; i < argStructType->getNumElements(); i++) { llvm::Type *currentType = argStructType->getElementType(i); diff --git a/lib/RSUtils.h b/lib/RSUtils.h index e7ce1b5..f30f4d1 100644 --- a/lib/RSUtils.h +++ b/lib/RSUtils.h @@ -28,6 +28,9 @@ namespace { static inline llvm::StringRef getUnsuffixedStructName(const llvm::StructType *T) { + if (!T) { + abort(); // exit? + } #ifdef _DEBUG // Bug: 22926131 // When building with assertions enabled, LLVM cannot read the name of a diff --git a/lib/RSX86TranslateGEPPass.cpp b/lib/RSX86TranslateGEPPass.cpp index 52dee0d..113ca28 100644 --- a/lib/RSX86TranslateGEPPass.cpp +++ b/lib/RSX86TranslateGEPPass.cpp @@ -77,6 +77,7 @@ private: if (!OpC) { ALOGE("Operand for struct type is not constant!"); bccAssert(false); + return nullptr; // NOLINT, unreached } // Offset = Offset + EltOffset for index into a struct |