changeset 1344:3297edb697eb

Re-enable consistency check for fixed LLVM versions.
author Frits van Bommel <fvbommel wxs.nl>
date Mon, 11 May 2009 15:48:33 +0200
parents c21a6654cce2
children 712662f45ee4
files gen/metadata.h gen/passes/GarbageCollect2Stack.cpp gen/typinf.cpp
diffstat 3 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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 ~ <Name of TypeInfo global>)
 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
     
--- 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();
--- 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<LLConstant>(irg->value);
+            mdVals[TD_Confirm] = llvm::cast<MDNodeField>(irg->value);
         mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo));
         // Construct the metadata
         llvm::MDNode* metadata = llvm::MDNode::get(mdVals, TD_NumFields);