Skip to content

Commit 2417616

Browse files
update debug information to point it to the correct location for upvars
1 parent 9e04ab9 commit 2417616

File tree

4 files changed

+4
-42
lines changed

4 files changed

+4
-42
lines changed

compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ use rustc_middle::bug;
1414
use rustc_middle::ty::layout::{
1515
HasTypingEnv, LayoutOf, TyAndLayout, WIDE_PTR_ADDR, WIDE_PTR_EXTRA,
1616
};
17-
use rustc_middle::ty::{
18-
self, AdtKind, CoroutineArgsExt, ExistentialTraitRef, Instance, Ty, TyCtxt, Visibility,
19-
};
17+
use rustc_middle::ty::{self, AdtKind, ExistentialTraitRef, Instance, Ty, TyCtxt, Visibility};
2018
use rustc_session::config::{self, DebugInfo, Lto};
2119
use rustc_span::{DUMMY_SP, FileName, FileNameDisplayPreference, SourceFile, Symbol, hygiene};
2220
use rustc_symbol_mangling::typeid_for_trait_ref;
@@ -1101,7 +1099,7 @@ fn build_upvar_field_di_nodes<'ll, 'tcx>(
11011099
closure_or_coroutine_di_node: &'ll DIType,
11021100
) -> SmallVec<&'ll DIType> {
11031101
let (&def_id, up_var_tys) = match closure_or_coroutine_ty.kind() {
1104-
ty::Coroutine(def_id, args) => (def_id, args.as_coroutine().prefix_tys()),
1102+
ty::Coroutine(def_id, args) => (def_id, args.as_coroutine().upvar_tys()),
11051103
ty::Closure(def_id, args) => (def_id, args.as_closure().upvar_tys()),
11061104
ty::CoroutineClosure(def_id, args) => (def_id, args.as_coroutine_closure().upvar_tys()),
11071105
_ => {

compiler/rustc_codegen_llvm/src/debuginfo/metadata/enums/cpp_like.rs

-2
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,6 @@ fn build_union_fields_for_direct_tag_coroutine<'ll, 'tcx>(
724724
let coroutine_layout =
725725
cx.tcx.coroutine_layout(coroutine_def_id, coroutine_args.kind_ty()).unwrap();
726726

727-
let common_upvar_names = cx.tcx.closure_saved_names_of_captured_variables(coroutine_def_id);
728727
let variant_range = coroutine_args.variant_range(coroutine_def_id, cx.tcx);
729728
let variant_count = (variant_range.start.as_u32()..variant_range.end.as_u32()).len();
730729

@@ -764,7 +763,6 @@ fn build_union_fields_for_direct_tag_coroutine<'ll, 'tcx>(
764763
coroutine_type_and_layout,
765764
coroutine_type_di_node,
766765
coroutine_layout,
767-
common_upvar_names,
768766
);
769767

770768
let span = coroutine_layout.variant_source_info[variant_index].span;

compiler/rustc_codegen_llvm/src/debuginfo/metadata/enums/mod.rs

+2-32
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ use rustc_codegen_ssa::debuginfo::type_names::{compute_debuginfo_type_name, cpp_
55
use rustc_codegen_ssa::debuginfo::{tag_base_type, wants_c_like_enum_debuginfo};
66
use rustc_codegen_ssa::traits::MiscCodegenMethods;
77
use rustc_hir::def::CtorKind;
8-
use rustc_index::IndexSlice;
98
use rustc_middle::bug;
109
use rustc_middle::mir::CoroutineLayout;
1110
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
1211
use rustc_middle::ty::{self, AdtDef, CoroutineArgs, CoroutineArgsExt, Ty, VariantDef};
13-
use rustc_span::Symbol;
1412

1513
use super::type_map::{DINodeCreationResult, UniqueTypeId};
1614
use super::{SmallVec, size_and_align_of};
@@ -286,7 +284,6 @@ fn build_coroutine_variant_struct_type_di_node<'ll, 'tcx>(
286284
coroutine_type_and_layout: TyAndLayout<'tcx>,
287285
coroutine_type_di_node: &'ll DIType,
288286
coroutine_layout: &CoroutineLayout<'tcx>,
289-
common_upvar_names: &IndexSlice<FieldIdx, Symbol>,
290287
) -> &'ll DIType {
291288
let variant_name = CoroutineArgs::variant_name(variant_index);
292289
let unique_type_id = UniqueTypeId::for_enum_variant_struct_type(
@@ -297,11 +294,6 @@ fn build_coroutine_variant_struct_type_di_node<'ll, 'tcx>(
297294

298295
let variant_layout = coroutine_type_and_layout.for_variant(cx, variant_index);
299296

300-
let coroutine_args = match coroutine_type_and_layout.ty.kind() {
301-
ty::Coroutine(_, args) => args.as_coroutine(),
302-
_ => unreachable!(),
303-
};
304-
305297
type_map::build_type_with_children(
306298
cx,
307299
type_map::stub(
@@ -316,7 +308,7 @@ fn build_coroutine_variant_struct_type_di_node<'ll, 'tcx>(
316308
),
317309
|cx, variant_struct_type_di_node| {
318310
// Fields that just belong to this variant/state
319-
let state_specific_fields: SmallVec<_> = (0..variant_layout.fields.count())
311+
(0..variant_layout.fields.count())
320312
.map(|field_index| {
321313
let coroutine_saved_local = coroutine_layout.variant_fields[variant_index]
322314
[FieldIdx::from_usize(field_index)];
@@ -339,29 +331,7 @@ fn build_coroutine_variant_struct_type_di_node<'ll, 'tcx>(
339331
None,
340332
)
341333
})
342-
.collect();
343-
344-
// Fields that are common to all states
345-
let common_fields: SmallVec<_> = coroutine_args
346-
.prefix_tys()
347-
.iter()
348-
.zip(common_upvar_names)
349-
.enumerate()
350-
.map(|(index, (upvar_ty, upvar_name))| {
351-
build_field_di_node(
352-
cx,
353-
variant_struct_type_di_node,
354-
upvar_name.as_str(),
355-
cx.size_and_align_of(upvar_ty),
356-
coroutine_type_and_layout.fields.offset(index),
357-
DIFlags::FlagZero,
358-
type_di_node(cx, upvar_ty),
359-
None,
360-
)
361-
})
362-
.collect();
363-
364-
state_specific_fields.into_iter().chain(common_fields).collect()
334+
.collect()
365335
},
366336
|cx| build_generic_type_param_di_nodes(cx, coroutine_type_and_layout.ty),
367337
)

compiler/rustc_codegen_llvm/src/debuginfo/metadata/enums/native.rs

-4
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,6 @@ pub(super) fn build_coroutine_di_node<'ll, 'tcx>(
188188
)
189189
};
190190

191-
let common_upvar_names =
192-
cx.tcx.closure_saved_names_of_captured_variables(coroutine_def_id);
193-
194191
// Build variant struct types
195192
let variant_struct_type_di_nodes: SmallVec<_> = variants
196193
.indices()
@@ -218,7 +215,6 @@ pub(super) fn build_coroutine_di_node<'ll, 'tcx>(
218215
coroutine_type_and_layout,
219216
coroutine_type_di_node,
220217
coroutine_layout,
221-
common_upvar_names,
222218
),
223219
source_info,
224220
}

0 commit comments

Comments
 (0)