changeset 1557:d11aeae19b95

Disable metadata for typeid(void).
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Fri, 31 Jul 2009 01:44:47 +0200
parents 4897323d47b5
children 3adcb70700cb
files gen/typinf.cpp
diffstat 1 files changed, 18 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/gen/typinf.cpp	Fri Jul 31 01:16:30 2009 +0200
+++ b/gen/typinf.cpp	Fri Jul 31 01:44:47 2009 +0200
@@ -302,21 +302,24 @@
 
     tid->ir.irGlobal = irg;
 
-    // Add some metadata for use by optimization passes.
-    std::string metaname = std::string(TD_PREFIX) + mangle;
-    llvm::NamedMDNode* meta = gIR->module->getNamedMetadata(metaname);
-    // Don't generate metadata for non-concrete types
-    // (such as tuple types, slice types, typeof(expr), etc.)
-    if (!meta && tid->tinfo->toBasetype()->ty < Terror) {
-        // Construct the fields
-        MDNodeField* mdVals[TD_NumFields];
-        if (TD_Confirm >= 0)
-            mdVals[TD_Confirm] = llvm::cast<MDNodeField>(irg->value);
-        mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo));
-        // Construct the metadata
-        llvm::MetadataBase* metadata = gIR->context().getMDNode(mdVals, TD_NumFields);
-        // Insert it into the module
-        llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module);
+    // don't do this for void or llvm will crash
+    if (tid->tinfo->ty != Tvoid) {
+        // Add some metadata for use by optimization passes.
+        std::string metaname = std::string(TD_PREFIX) + mangle;
+        llvm::NamedMDNode* meta = gIR->module->getNamedMetadata(metaname);
+        // Don't generate metadata for non-concrete types
+        // (such as tuple types, slice types, typeof(expr), etc.)
+        if (!meta && tid->tinfo->toBasetype()->ty < Terror) {
+            // Construct the fields
+            MDNodeField* mdVals[TD_NumFields];
+            if (TD_Confirm >= 0)
+                mdVals[TD_Confirm] = llvm::cast<MDNodeField>(irg->value);
+            mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo));
+            // Construct the metadata
+            llvm::MetadataBase* metadata = gIR->context().getMDNode(mdVals, TD_NumFields);
+            // Insert it into the module
+            llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module);
+        }
     }
 
     DtoDeclareTypeInfo(tid);