# HG changeset patch # User Frits van Bommel # Date 1242049713 -7200 # Node ID 3297edb697eb8d348a71c7bc8c3cf3977f9ec905 # Parent c21a6654cce254cf7d8c4c2dfbdd0b67167647ba Re-enable consistency check for fixed LLVM versions. diff -r c21a6654cce2 -r 3297edb697eb gen/metadata.h --- a/gen/metadata.h Mon May 11 11:59:22 2009 +0200 +++ b/gen/metadata.h Mon May 11 15:48:33 2009 +0200 @@ -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 -r c21a6654cce2 -r 3297edb697eb gen/passes/GarbageCollect2Stack.cpp --- a/gen/passes/GarbageCollect2Stack.cpp Mon May 11 11:59:22 2009 +0200 +++ b/gen/passes/GarbageCollect2Stack.cpp Mon May 11 15:48:33 2009 +0200 @@ -397,8 +397,10 @@ 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 -r c21a6654cce2 -r 3297edb697eb gen/typinf.cpp --- a/gen/typinf.cpp Mon May 11 11:59:22 2009 +0200 +++ b/gen/typinf.cpp Mon May 11 15:48:33 2009 +0200 @@ -296,7 +296,7 @@ // 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);