]> granicus.if.org Git - llvm/commitdiff
Remove #include
authorChris Lattner <sabre@nondot.org>
Thu, 6 Mar 2003 21:02:18 +0000 (21:02 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 6 Mar 2003 21:02:18 +0000 (21:02 +0000)
Extend getNullValue to work with struct and array types

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5718 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Constants.cpp

index 3887e33274a693d72cae36299a8f2ac9e491822c..6a91757641a7c42a2e227c6e00bc7479a3e4d1ed 100644 (file)
@@ -9,7 +9,6 @@
 #include "llvm/iMemory.h"
 #include "llvm/SymbolTable.h"
 #include "llvm/Module.h"
-#include "llvm/SlotCalculator.h"
 #include "Support/StringExtras.h"
 #include <algorithm>
 
@@ -80,7 +79,25 @@ Constant *Constant::getNullValue(const Type *Ty) {
 
   case Type::PointerTyID: 
     return ConstantPointerNull::get(cast<PointerType>(Ty));
+  case Type::StructTyID: {
+    const StructType *ST = cast<StructType>(Ty);
+
+    const StructType::ElementTypes &ETs = ST->getElementTypes();
+    std::vector<Constant*> Elements;
+    Elements.resize(ETs.size());
+    for (unsigned i = 0, e = ETs.size(); i != e; ++i)
+      Elements[i] = Constant::getNullValue(ETs[i]);
+    return ConstantStruct::get(ST, Elements);
+  }
+  case Type::ArrayTyID: {
+    const ArrayType *AT = cast<ArrayType>(Ty);
+    Constant *El = Constant::getNullValue(AT->getElementType());
+    unsigned NumElements = AT->getNumElements();
+    return ConstantArray::get(AT, std::vector<Constant*>(NumElements, El));
+  }
   default:
+    // Function, Type, Label, or Opaque type?
+    assert(0 && "Cannot create a null constant of that type!");
     return 0;
   }
 }