Mercurial > projects > ldc
comparison gen/typinf.cpp @ 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 | ed0cffe895ec |
children | 3adcb70700cb |
comparison
equal
deleted
inserted
replaced
1556:4897323d47b5 | 1557:d11aeae19b95 |
---|---|
300 irg->value = new llvm::GlobalVariable(*gIR->module, irg->type.get(), true, | 300 irg->value = new llvm::GlobalVariable(*gIR->module, irg->type.get(), true, |
301 TYPEINFO_LINKAGE_TYPE, NULL, mangle); | 301 TYPEINFO_LINKAGE_TYPE, NULL, mangle); |
302 | 302 |
303 tid->ir.irGlobal = irg; | 303 tid->ir.irGlobal = irg; |
304 | 304 |
305 // Add some metadata for use by optimization passes. | 305 // don't do this for void or llvm will crash |
306 std::string metaname = std::string(TD_PREFIX) + mangle; | 306 if (tid->tinfo->ty != Tvoid) { |
307 llvm::NamedMDNode* meta = gIR->module->getNamedMetadata(metaname); | 307 // Add some metadata for use by optimization passes. |
308 // Don't generate metadata for non-concrete types | 308 std::string metaname = std::string(TD_PREFIX) + mangle; |
309 // (such as tuple types, slice types, typeof(expr), etc.) | 309 llvm::NamedMDNode* meta = gIR->module->getNamedMetadata(metaname); |
310 if (!meta && tid->tinfo->toBasetype()->ty < Terror) { | 310 // Don't generate metadata for non-concrete types |
311 // Construct the fields | 311 // (such as tuple types, slice types, typeof(expr), etc.) |
312 MDNodeField* mdVals[TD_NumFields]; | 312 if (!meta && tid->tinfo->toBasetype()->ty < Terror) { |
313 if (TD_Confirm >= 0) | 313 // Construct the fields |
314 mdVals[TD_Confirm] = llvm::cast<MDNodeField>(irg->value); | 314 MDNodeField* mdVals[TD_NumFields]; |
315 mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo)); | 315 if (TD_Confirm >= 0) |
316 // Construct the metadata | 316 mdVals[TD_Confirm] = llvm::cast<MDNodeField>(irg->value); |
317 llvm::MetadataBase* metadata = gIR->context().getMDNode(mdVals, TD_NumFields); | 317 mdVals[TD_Type] = llvm::UndefValue::get(DtoType(tid->tinfo)); |
318 // Insert it into the module | 318 // Construct the metadata |
319 llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module); | 319 llvm::MetadataBase* metadata = gIR->context().getMDNode(mdVals, TD_NumFields); |
320 // Insert it into the module | |
321 llvm::NamedMDNode::Create(metaname, &metadata, 1, gIR->module); | |
322 } | |
320 } | 323 } |
321 | 324 |
322 DtoDeclareTypeInfo(tid); | 325 DtoDeclareTypeInfo(tid); |
323 } | 326 } |
324 | 327 |