From e4e07baf877d2ba508e873c4430e778004fa8c50 Mon Sep 17 00:00:00 2001 From: Frits van Bommel Date: Mon, 11 May 2009 15:48:33 +0200 Subject: [PATCH] Re-enable consistency check for fixed LLVM versions. --- gen/metadata.h | 9 +++++++-- gen/passes/GarbageCollect2Stack.cpp | 6 ++++-- gen/typinf.cpp | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gen/metadata.h b/gen/metadata.h index 6050b978..949f8a7d 100644 --- a/gen/metadata.h +++ b/gen/metadata.h @@ -42,9 +42,14 @@ /// The fields in the metadata node for a TypeInfo instance. /// (Its name will be TD_PREFIX ~ ) enum TypeDataFields { - // TD_Confirm is disabled for now due to an LLVM bug when MDNodes contain - // globals (see http://llvm.org/PR4180 / http://llvm.org/PR4046 ) +#if LLVM_REV < 71407 + // TD_Confirm is disabled for older revisions due to an LLVM bug when + // MDNodes contain globals + // (see http://llvm.org/PR4180 / http://llvm.org/PR4046 ) TD_Confirm = -1,/// The TypeInfo this node is for. +#else + TD_Confirm, /// The TypeInfo this node is for. +#endif TD_Type, /// A value of the LLVM type corresponding to this D type diff --git a/gen/passes/GarbageCollect2Stack.cpp b/gen/passes/GarbageCollect2Stack.cpp index 976ae673..a2940775 100644 --- a/gen/passes/GarbageCollect2Stack.cpp +++ b/gen/passes/GarbageCollect2Stack.cpp @@ -397,8 +397,10 @@ const Type* Analysis::getTypeFor(Value* typeinfo) const { if (!node) return NULL; - if (MD_GetNumElements(node) != TD_NumFields || - (TD_Confirm >= 0 && MD_GetElement(node, TD_Confirm)->stripPointerCasts() != ti_global)) + if (MD_GetNumElements(node) != TD_NumFields) + return NULL; + if (TD_Confirm >= 0 && (!MD_GetElement(node, TD_Confirm) || + MD_GetElement(node, TD_Confirm)->stripPointerCasts() != ti_global)) return NULL; return MD_GetElement(node, TD_Type)->getType(); diff --git a/gen/typinf.cpp b/gen/typinf.cpp index 4a817bc5..a9a8b4b4 100644 --- a/gen/typinf.cpp +++ b/gen/typinf.cpp @@ -296,7 +296,7 @@ void DtoResolveTypeInfo(TypeInfoDeclaration* tid) // Construct the fields MDNodeField* mdVals[TD_NumFields]; if (TD_Confirm >= 0) - mdVals[TD_Confirm] = llvm::cast(irg->value); + mdVals[TD_Confirm] = llvm::cast(irg->value); mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo)); // Construct the metadata llvm::MDNode* metadata = llvm::MDNode::get(mdVals, TD_NumFields);