ldc::DIType ldc::DIBuilder::CreateEnumType(Type *type) { llvm::Type *T = DtoType(type); assert(type->ty == Tenum && "only enums allowed for debug info in dwarfEnumType"); TypeEnum *te = static_cast<TypeEnum *>(type); #if LDC_LLVM_VER >= 306 llvm::SmallVector<llvm::Metadata *, 8> subscripts; #else llvm::SmallVector<llvm::Value *, 8> subscripts; #endif for (auto m : *te->sym->members) { EnumMember *em = m->isEnumMember(); llvm::StringRef Name(em->toChars()); uint64_t Val = em->value->toInteger(); auto Subscript = DBuilder.createEnumerator(Name, Val); subscripts.push_back(Subscript); } llvm::StringRef Name = te->toChars(); unsigned LineNumber = te->sym->loc.linnum; ldc::DIFile File(CreateFile(te->sym->loc)); return DBuilder.createEnumerationType( GetCU(), Name, File, LineNumber, getTypeBitSize(T), // size (bits) getABITypeAlign(T) * 8, // align (bits) DBuilder.getOrCreateArray(subscripts), // subscripts CreateTypeDescription(te->sym->memtype, false)); }
llvm::DIType ldc::DIBuilder::CreateEnumType(Type *type) { llvm::Type *T = DtoType(type); assert(type->ty == Tenum && "only enums allowed for debug info in dwarfEnumType"); TypeEnum *te = static_cast<TypeEnum *>(type); llvm::SmallVector<llvm::Value *, 8> subscripts; for (ArrayIter<Dsymbol> it(te->sym->members); it.more(); it.next()) { EnumMember *em = it->isEnumMember(); llvm::StringRef Name(em->toChars()); uint64_t Val = em->value->toInteger(); llvm::Value *Subscript = DBuilder.createEnumerator(Name, Val); subscripts.push_back(Subscript); } llvm::StringRef Name = te->toChars(); unsigned LineNumber = te->sym->loc.linnum; llvm::DIFile File = CreateFile(te->sym->loc); return DBuilder.createEnumerationType( llvm::DICompileUnit(GetCU()), Name, File, LineNumber, getTypeBitSize(T), // size (bits) getABITypeAlign(T)*8, // align (bits) DBuilder.getOrCreateArray(subscripts) // subscripts #if LDC_LLVM_VER >= 302 , CreateTypeDescription(te->sym->memtype, NULL) #endif ); }
ldc::DIType ldc::DIBuilder::CreateEnumType(Type *type) { assert(type->ty == Tenum); llvm::Type *T = DtoType(type); TypeEnum *te = static_cast<TypeEnum *>(type); llvm::SmallVector<LLMetadata *, 8> subscripts; for (auto m : *te->sym->members) { EnumMember *em = m->isEnumMember(); llvm::StringRef Name(em->toChars()); uint64_t Val = em->value()->toInteger(); auto Subscript = DBuilder.createEnumerator(Name, Val); subscripts.push_back(Subscript); } llvm::StringRef Name = te->toChars(); unsigned LineNumber = te->sym->loc.linnum; ldc::DIFile File(CreateFile(te->sym)); return DBuilder.createEnumerationType( GetCU(), Name, File, LineNumber, getTypeAllocSize(T) * 8, // size (bits) getABITypeAlign(T) * 8, // align (bits) DBuilder.getOrCreateArray(subscripts), // subscripts CreateTypeDescription(te->sym->memtype, false)); }