Do not perform checks on nodes that cannot be registered.
llvm-svn: 87525
diff --git a/safecode/lib/InsertPoolChecks/insert.cpp b/safecode/lib/InsertPoolChecks/insert.cpp
index b7aaf7c..bf6b49a 100755
--- a/safecode/lib/InsertPoolChecks/insert.cpp
+++ b/safecode/lib/InsertPoolChecks/insert.cpp
@@ -147,6 +147,20 @@
// Static Functions
////////////////////////////////////////////////////////////////////////////
+static inline bool
+isNodeRegistered (DSNode * Node) {
+ // Do not perform checks on the pointer if its DSNode does not have a known
+ // allocation site.
+ if (!((Node->isAllocaNode()) ||
+ (Node->isHeapNode()) ||
+ (Node->isGlobalNode()))) {
+ ++NoSHGBoundsChecks;
+ return false;
+ }
+
+ return true;
+}
+
//Do not replace these with check results
static std::set<Value*> AddedValues;
@@ -918,6 +932,10 @@
// If there is no DSNode, do not perform a check
if (!Node) return Dest;
+ // If we do not know the allocation site, don't bother checking it
+ if (!(isNodeRegistered (Node)))
+ return Dest;
+
// Record statistics on the incomplete checks we do. Note that a node may
// be counted more than once.
if (Node->isIncomplete())
@@ -2832,6 +2850,7 @@
// Now check if the GEP is inside a loop with monotonically increasing
//loop bounds
//We use the LoopInfo Pass this
+#if 0
Loop *L = LI->getLoopFor(MAI->getParent());
bool monotonicOpt = false;
if (L && (MAI->getNumOperands() == 2)) {
@@ -2886,6 +2905,7 @@
Instruction *nextIns = MAI->getNext();
insertBoundsCheck (MAI, MAI->getPointerOperand(), MAI, nextIns);
}
+#endif
}
}
} else {
@@ -3285,6 +3305,12 @@
return;
//
+ // If the node is not registered, don't bother to check it.
+ //
+ if (!(isNodeRegistered (Node)))
+ return;
+
+ //
// We will perform checks on incomplete or unknown nodes, but we must accept
// the possibility that the object will not be found.
//