From: Chris Lattner Date: Thu, 6 Mar 2003 21:02:18 +0000 (+0000) Subject: Remove #include X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=27accf7692562d247a162a6762391b4c07d2c23d;p=llvm 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 --- diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 3887e33274a..6a91757641a 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 @@ -80,7 +79,25 @@ Constant *Constant::getNullValue(const Type *Ty) { case Type::PointerTyID: return ConstantPointerNull::get(cast(Ty)); + case Type::StructTyID: { + const StructType *ST = cast(Ty); + + const StructType::ElementTypes &ETs = ST->getElementTypes(); + std::vector 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(Ty); + Constant *El = Constant::getNullValue(AT->getElementType()); + unsigned NumElements = AT->getNumElements(); + return ConstantArray::get(AT, std::vector(NumElements, El)); + } default: + // Function, Type, Label, or Opaque type? + assert(0 && "Cannot create a null constant of that type!"); return 0; } }