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