Mercurial > projects > ldc
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);