Skip to content

Commit a4f2f11

Browse files
committed
generate typedef nodes for ptr/ref and array
1 parent 3c30dbb commit a4f2f11

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ fn build_fixed_size_array_di_node<'ll, 'tcx>(
120120
unsafe { Some(llvm::LLVMRustDIBuilderGetOrCreateSubrange(DIB(cx), 0, upper_bound)) };
121121

122122
let subscripts = create_DIArray(DIB(cx), &[subrange]);
123-
let di_node = unsafe {
123+
let mut di_node = unsafe {
124124
llvm::LLVMRustDIBuilderCreateArrayType(
125125
DIB(cx),
126126
size.bits(),
@@ -130,6 +130,21 @@ fn build_fixed_size_array_di_node<'ll, 'tcx>(
130130
)
131131
};
132132

133+
if cpp_like_debuginfo(cx.tcx) {
134+
let array_type_name = compute_debuginfo_type_name(cx.tcx, array_type, false);
135+
di_node = unsafe {
136+
llvm::LLVMRustDIBuilderCreateTypedef(
137+
DIB(cx),
138+
di_node,
139+
array_type_name.as_c_char_ptr(),
140+
array_type_name.len(),
141+
unknown_file_metadata(cx),
142+
UNKNOWN_LINE_NUMBER,
143+
None,
144+
)
145+
};
146+
}
147+
133148
DINodeCreationResult::new(di_node, false)
134149
}
135150

@@ -183,8 +198,19 @@ fn build_pointer_or_reference_di_node<'ll, 'tcx>(
183198
ptr_type_debuginfo_name.len(),
184199
)
185200
};
201+
let typedefed_ptr = unsafe {
202+
llvm::LLVMRustDIBuilderCreateTypedef(
203+
DIB(cx),
204+
di_node,
205+
ptr_type_debuginfo_name.as_c_char_ptr(),
206+
ptr_type_debuginfo_name.len(),
207+
unknown_file_metadata(cx),
208+
UNKNOWN_LINE_NUMBER,
209+
None,
210+
)
211+
};
186212

187-
DINodeCreationResult { di_node, already_stored_in_typemap: false }
213+
DINodeCreationResult { di_node: typedefed_ptr, already_stored_in_typemap: false }
188214
}
189215
Some(wide_pointer_kind) => {
190216
type_map::build_type_with_children(

0 commit comments

Comments
 (0)