aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-03-06 21:02:18 +0000
committerChris Lattner <sabre@nondot.org>2003-03-06 21:02:18 +0000
commit27accf7692562d247a162a6762391b4c07d2c23d (patch)
treec271e3cb3e75f675001f04cd443374212fdc2c8f
parent42289a30106c16681365a4e535263569ce9c6a4f (diff)
Remove #include
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
-rw-r--r--lib/VMCore/Constants.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp
index 3887e33274..6a91757641 100644
--- a/lib/VMCore/Constants.cpp
+++ b/lib/VMCore/Constants.cpp
@@ -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;
}
}