summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-02-09 22:24:04 +0000
committerChris Lattner <sabre@nondot.org>2007-02-09 22:24:04 +0000
commitd2e8e55ae0d7b9099a2354e8a29bc762adf5f0c1 (patch)
tree4f6db24ecb4b3825b5781f9be00730a957074464 /llvm/lib
parent8b7700f14661c5d31981b3219327a9a0c596dabf (diff)
downloadbcm5719-llvm-d2e8e55ae0d7b9099a2354e8a29bc762adf5f0c1.tar.gz
bcm5719-llvm-d2e8e55ae0d7b9099a2354e8a29bc762adf5f0c1.zip
Fix clients like this:
delete ParseBytecodeFile(InputFilename, 0, &ErrorMessage); llvm_shutdown(); delete ParseBytecodeFile(InputFilename, 0, &ErrorMessage); The primitive type objects failed to ressurect themselves after shutdown, leading to crashes in clients that used them after llvm_shutdown(). This solution isn't wonderful, because we clearly have static ctors. However, the code it replaces was just as bad, so it's not a regression. llvm-svn: 34106
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/VMCore/Type.cpp43
1 files changed, 15 insertions, 28 deletions
diff --git a/llvm/lib/VMCore/Type.cpp b/llvm/lib/VMCore/Type.cpp
index a6e57971bd5..6bfdfd7a184 100644
--- a/llvm/lib/VMCore/Type.cpp
+++ b/llvm/lib/VMCore/Type.cpp
@@ -347,34 +347,21 @@ const Type *StructType::getTypeAtIndex(const Value *V) const {
// Primitive 'Type' data
//===----------------------------------------------------------------------===//
-#define DeclarePrimType(TY, Str) \
- namespace { \
- struct VISIBILITY_HIDDEN TY##Type : public Type { \
- TY##Type() : Type(Str, Type::TY##TyID) {} \
- }; \
- } \
- static ManagedStatic<TY##Type> The##TY##Ty; \
- const Type *Type::TY##Ty = &*The##TY##Ty
-
-#define DeclareIntegerType(TY, BitWidth) \
- namespace { \
- struct VISIBILITY_HIDDEN TY##Type : public IntegerType { \
- TY##Type() : IntegerType(BitWidth) {} \
- }; \
- } \
- static ManagedStatic<TY##Type> The##TY##Ty; \
- const IntegerType *Type::TY##Ty = &*The##TY##Ty
-
-DeclarePrimType(Void, "void");
-DeclarePrimType(Float, "float");
-DeclarePrimType(Double, "double");
-DeclarePrimType(Label, "label");
-DeclareIntegerType(Int1, 1);
-DeclareIntegerType(Int8, 8);
-DeclareIntegerType(Int16, 16);
-DeclareIntegerType(Int32, 32);
-DeclareIntegerType(Int64, 64);
-#undef DeclarePrimType
+const Type *Type::VoidTy = new Type("void", Type::VoidTyID);
+const Type *Type::FloatTy = new Type("float", Type::FloatTyID);
+const Type *Type::DoubleTy = new Type("double", Type::DoubleTyID);
+const Type *Type::LabelTy = new Type("label", Type::LabelTyID);
+
+namespace {
+ struct BuiltinIntegerType : public IntegerType {
+ BuiltinIntegerType(unsigned W) : IntegerType(W) {}
+ };
+}
+const IntegerType *Type::Int1Ty = new BuiltinIntegerType(1);
+const IntegerType *Type::Int8Ty = new BuiltinIntegerType(8);
+const IntegerType *Type::Int16Ty = new BuiltinIntegerType(16);
+const IntegerType *Type::Int32Ty = new BuiltinIntegerType(32);
+const IntegerType *Type::Int64Ty = new BuiltinIntegerType(64);
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud