diff options
author | Chih-hung Hsieh <chh@google.com> | 2023-01-17 19:09:42 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-01-17 19:09:42 +0000 |
commit | 9a8cd5ab756009d2baa8429cef0c8dfac0005c41 (patch) | |
tree | 4850f24fbea0fbd80883d9e31a6a670997ec3ae8 | |
parent | 57c1f39451af9e208db7c4d32fb556ee02542f5e (diff) | |
parent | 5be250c4de7f811d8cd0afeecf36d648b5c414b9 (diff) | |
download | libbcc-9a8cd5ab756009d2baa8429cef0c8dfac0005c41.tar.gz |
Merge "Fix/suppress potential nullptr dereference warnings." am: 5be250c4deandroid-u-beta-1-gpl
Original change: https://android-review.googlesource.com/c/platform/frameworks/compile/libbcc/+/2367028
Change-Id: Ifb6acbc0126d2f173706e9295f178cbb231ba508
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-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 |