DeclareFn(nullptr), ValueFn(nullptr),
AllowUnresolvedNodes(AllowUnresolvedNodes) {}
-static bool isUnresolved(MDNode *N) {
- return N && (isa<MDNodeFwdDecl>(N) || !cast<GenericMDNode>(N)->isResolved());
-}
-
void DIBuilder::trackIfUnresolved(MDNode *N) {
- if (!AllowUnresolvedNodes) {
- assert(!isUnresolved(N) && "Cannot handle unresolved nodes");
+ if (!N)
return;
- }
- if (isUnresolved(N))
- UnresolvedNodes.emplace_back(N);
- return;
+ if (N->isResolved())
+ return;
+
+ assert(AllowUnresolvedNodes && "Cannot handle unresolved nodes");
+ UnresolvedNodes.emplace_back(N);
}
void DIBuilder::finalize() {
// cycles.
for (const auto &N : UnresolvedNodes)
if (N)
- cast<GenericMDNode>(N)->resolveCycles();
+ cast<UniquableMDNode>(N)->resolveCycles();
UnresolvedNodes.clear();
// Can't handle unresolved nodes anymore.
return DIDerivedType(MDNode::get(VMContext, Elts));
}
-DIDerivedType DIBuilder::createMemberPointerType(DIType PointeeTy,
- DIType Base) {
+DIDerivedType
+DIBuilder::createMemberPointerType(DIType PointeeTy, DIType Base,
+ uint64_t SizeInBits, uint64_t AlignInBits) {
// Pointer types are encoded in DIDerivedType format.
Metadata *Elts[] = {HeaderBuilder::get(dwarf::DW_TAG_ptr_to_member_type)
.concat(StringRef())
.concat(0) // Line
- .concat(0) // Size
- .concat(0) // Align
+ .concat(SizeInBits) // Size
+ .concat(AlignInBits) // Align
.concat(0) // Offset
.concat(0) // Flags
.get(VMContext),