Fix/suppress potential nullptr dereference warnings.

These are probably all false positives if
the dynamic_cast can never fail.
Yet we need to help the static analyzer
with the additional checks to suppress the warnings.
It might not matter if we return false,
or call abort or exit for those unreachable cases.

Bug: 263274255
Test: presubmit; make tidy-frameworks-compile_subset
Change-Id: Ie29a17672534ce0f64e2e6ccded6781a668449ac
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 @@
     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 @@
     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 @@
     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 @@
     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 @@
     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 @@
         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 @@
         if (!OpC) {
           ALOGE("Operand for struct type is not constant!");
           bccAssert(false);
+          return nullptr;  // NOLINT, unreached
         }
 
         // Offset = Offset + EltOffset for index into a struct