Changes in directory llvm/lib/VMCore:
Type.cpp updated: 1.168 -> 1.169 --- Log message: 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. --- Diffs of the changes: (+15 -28) Type.cpp | 43 +++++++++++++++---------------------------- 1 files changed, 15 insertions(+), 28 deletions(-) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.168 llvm/lib/VMCore/Type.cpp:1.169 --- llvm/lib/VMCore/Type.cpp:1.168 Mon Feb 5 14:47:20 2007 +++ llvm/lib/VMCore/Type.cpp Fri Feb 9 16:24:04 2007 @@ -347,34 +347,21 @@ // 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); //===----------------------------------------------------------------------===// _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits