summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2009-09-15 06:28:26 +0000
committerNick Lewycky <nicholas@mxc.ca>2009-09-15 06:28:26 +0000
commitc5cb3bd92730cd61f5f89e08a5bf26163fd47915 (patch)
treeeac27074c696b25491d37926b4c4d574ee9b0e13 /llvm/lib
parentee8f74f5d1b247f6a2700e1fc77488233bd8d5a8 (diff)
downloadbcm5719-llvm-c5cb3bd92730cd61f5f89e08a5bf26163fd47915.tar.gz
bcm5719-llvm-c5cb3bd92730cd61f5f89e08a5bf26163fd47915.zip
Forbid arrays of function-type and structures with function-typed fields.
While I'm there, change code that does: SomeTy == Type::getFooType(Context) into: SomeTy->getTypeID() == FooTyID to decrease the amount of useless type creation which may involve locking, etc. llvm-svn: 81846
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/VMCore/Type.cpp30
1 files changed, 13 insertions, 17 deletions
diff --git a/llvm/lib/VMCore/Type.cpp b/llvm/lib/VMCore/Type.cpp
index 19c91c5f03d..2ddb8c7d5ac 100644
--- a/llvm/lib/VMCore/Type.cpp
+++ b/llvm/lib/VMCore/Type.cpp
@@ -364,11 +364,10 @@ const IntegerType *Type::getInt64Ty(LLVMContext &C) {
bool FunctionType::isValidReturnType(const Type *RetTy) {
if (RetTy->isFirstClassType()) {
if (const PointerType *PTy = dyn_cast<PointerType>(RetTy))
- return PTy->getElementType() != Type::getMetadataTy(RetTy->getContext());
+ return PTy->getElementType()->getTypeID() != MetadataTyID;
return true;
}
- if (RetTy == Type::getVoidTy(RetTy->getContext()) ||
- RetTy == Type::getMetadataTy(RetTy->getContext()) ||
+ if (RetTy->getTypeID() == VoidTyID || RetTy->getTypeID() == MetadataTyID ||
isa<OpaqueType>(RetTy))
return true;
@@ -389,8 +388,7 @@ bool FunctionType::isValidReturnType(const Type *RetTy) {
bool FunctionType::isValidArgumentType(const Type *ArgTy) {
if ((!ArgTy->isFirstClassType() && !isa<OpaqueType>(ArgTy)) ||
(isa<PointerType>(ArgTy) &&
- cast<PointerType>(ArgTy)->getElementType() ==
- Type::getMetadataTy(ArgTy->getContext())))
+ cast<PointerType>(ArgTy)->getElementType()->getTypeID() == MetadataTyID))
return false;
return true;
@@ -829,13 +827,12 @@ ArrayType *ArrayType::get(const Type *ElementType, uint64_t NumElements) {
}
bool ArrayType::isValidElementType(const Type *ElemTy) {
- if (ElemTy == Type::getVoidTy(ElemTy->getContext()) ||
- ElemTy == Type::getLabelTy(ElemTy->getContext()) ||
- ElemTy == Type::getMetadataTy(ElemTy->getContext()))
+ if (ElemTy->getTypeID() == VoidTyID || ElemTy->getTypeID() == LabelTyID ||
+ ElemTy->getTypeID() == MetadataTyID || isa<FunctionType>(ElemTy))
return false;
if (const PointerType *PTy = dyn_cast<PointerType>(ElemTy))
- if (PTy->getElementType() == Type::getMetadataTy(ElemTy->getContext()))
+ if (PTy->getElementType()->getTypeID() == MetadataTyID)
return false;
return true;
@@ -909,13 +906,12 @@ StructType *StructType::get(LLVMContext &Context, const Type *type, ...) {
}
bool StructType::isValidElementType(const Type *ElemTy) {
- if (ElemTy == Type::getVoidTy(ElemTy->getContext()) ||
- ElemTy == Type::getLabelTy(ElemTy->getContext()) ||
- ElemTy == Type::getMetadataTy(ElemTy->getContext()))
+ if (ElemTy->getTypeID() == VoidTyID || ElemTy->getTypeID() == LabelTyID ||
+ ElemTy->getTypeID() == MetadataTyID || isa<FunctionType>(ElemTy))
return false;
if (const PointerType *PTy = dyn_cast<PointerType>(ElemTy))
- if (PTy->getElementType() == Type::getMetadataTy(ElemTy->getContext()))
+ if (PTy->getElementType()->getTypeID() == MetadataTyID)
return false;
return true;
@@ -928,7 +924,7 @@ bool StructType::isValidElementType(const Type *ElemTy) {
PointerType *PointerType::get(const Type *ValueType, unsigned AddressSpace) {
assert(ValueType && "Can't get a pointer to <null> type!");
- assert(ValueType != Type::getVoidTy(ValueType->getContext()) &&
+ assert(ValueType->getTypeID() != VoidTyID &&
"Pointer to void is not valid, use i8* instead!");
assert(isValidElementType(ValueType) && "Invalid type for pointer element!");
PointerValType PVT(ValueType, AddressSpace);
@@ -955,12 +951,12 @@ PointerType *Type::getPointerTo(unsigned addrs) const {
}
bool PointerType::isValidElementType(const Type *ElemTy) {
- if (ElemTy == Type::getVoidTy(ElemTy->getContext()) ||
- ElemTy == Type::getLabelTy(ElemTy->getContext()))
+ if (ElemTy->getTypeID() == VoidTyID ||
+ ElemTy->getTypeID() == LabelTyID)
return false;
if (const PointerType *PTy = dyn_cast<PointerType>(ElemTy))
- if (PTy->getElementType() == Type::getMetadataTy(ElemTy->getContext()))
+ if (PTy->getElementType()->getTypeID() == MetadataTyID)
return false;
return true;
OpenPOWER on IntegriCloud