Added a command line option that allows the user to specify a list of
functions that allocate memory.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24862 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp
index 75ad018..3e6d424 100644
--- a/lib/Analysis/DataStructure/Local.cpp
+++ b/lib/Analysis/DataStructure/Local.cpp
@@ -39,6 +39,12 @@
 TrackIntegersAsPointers("dsa-track-integers", cl::Hidden,
          cl::desc("If this is set, track integers as potential pointers"));
 
+static cl::list<std::string>
+AllocList("alloc-list",
+          cl::value_desc("list"),
+          cl::desc("List of functions that allocate memory from the heap"),
+          cl::CommaSeparated);
+
 namespace llvm {
 namespace DS {
   // isPointerType - Return true if this type is big enough to hold a pointer.
@@ -548,6 +554,19 @@
           N->setModifiedMarker();
         return;
       default:
+        // Determine if the called function is one of the specified heap
+        // allocation functions
+        for (cl::list<std::string>::iterator AllocFunc = AllocList.begin(),
+             LastAllocFunc = AllocList.end();
+             AllocFunc != LastAllocFunc;
+             ++AllocFunc) {
+          if (F->getName() == *(AllocFunc)) {
+            setDestTo(*CS.getInstruction(),
+                      createNode()->setHeapNodeMarker()->setModifiedMarker());
+            return;
+          }
+        }
+
         if (F->getName() == "calloc" || F->getName() == "posix_memalign" ||
             F->getName() == "memalign" || F->getName() == "valloc") {
           setDestTo(*CS.getInstruction(),