aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChih-hung Hsieh <chh@google.com>2023-01-17 19:09:42 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-01-17 19:09:42 +0000
commit9a8cd5ab756009d2baa8429cef0c8dfac0005c41 (patch)
tree4850f24fbea0fbd80883d9e31a6a670997ec3ae8
parent57c1f39451af9e208db7c4d32fb556ee02542f5e (diff)
parent5be250c4de7f811d8cd0afeecf36d648b5c414b9 (diff)
downloadlibbcc-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.cpp20
-rw-r--r--lib/RSInvokeHelperPass.cpp4
-rw-r--r--lib/RSUtils.h3
-rw-r--r--lib/RSX86TranslateGEPPass.cpp1
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