Move additional source location info behind -Z option
This commit is contained in:
parent
b6659b0621
commit
a4833a8089
10 changed files with 123 additions and 34 deletions
|
@ -998,7 +998,12 @@ fn build_field_di_node<'ll, 'tcx>(
|
||||||
type_di_node: &'ll DIType,
|
type_di_node: &'ll DIType,
|
||||||
def_id: Option<DefId>,
|
def_id: Option<DefId>,
|
||||||
) -> &'ll DIType {
|
) -> &'ll DIType {
|
||||||
let (file_metadata, line_number) = file_metadata_from_def_id(cx, def_id);
|
let (file_metadata, line_number) =
|
||||||
|
if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
file_metadata_from_def_id(cx, def_id)
|
||||||
|
} else {
|
||||||
|
(unknown_file_metadata(cx), UNKNOWN_LINE_NUMBER)
|
||||||
|
};
|
||||||
unsafe {
|
unsafe {
|
||||||
llvm::LLVMRustDIBuilderCreateMemberType(
|
llvm::LLVMRustDIBuilderCreateMemberType(
|
||||||
DIB(cx),
|
DIB(cx),
|
||||||
|
@ -1050,6 +1055,11 @@ fn build_struct_type_di_node<'ll, 'tcx>(
|
||||||
let containing_scope = get_namespace_for_item(cx, adt_def.did());
|
let containing_scope = get_namespace_for_item(cx, adt_def.did());
|
||||||
let struct_type_and_layout = cx.layout_of(struct_type);
|
let struct_type_and_layout = cx.layout_of(struct_type);
|
||||||
let variant_def = adt_def.non_enum_variant();
|
let variant_def = adt_def.non_enum_variant();
|
||||||
|
let def_location = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(file_metadata_from_def_id(cx, Some(adt_def.did())))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
type_map::build_type_with_children(
|
type_map::build_type_with_children(
|
||||||
cx,
|
cx,
|
||||||
|
@ -1058,7 +1068,7 @@ fn build_struct_type_di_node<'ll, 'tcx>(
|
||||||
Stub::Struct,
|
Stub::Struct,
|
||||||
unique_type_id,
|
unique_type_id,
|
||||||
&compute_debuginfo_type_name(cx.tcx, struct_type, false),
|
&compute_debuginfo_type_name(cx.tcx, struct_type, false),
|
||||||
Some(file_metadata_from_def_id(cx, Some(adt_def.did()))),
|
def_location,
|
||||||
size_and_align_of(struct_type_and_layout),
|
size_and_align_of(struct_type_and_layout),
|
||||||
Some(containing_scope),
|
Some(containing_scope),
|
||||||
visibility_di_flags(cx, adt_def.did(), adt_def.did()),
|
visibility_di_flags(cx, adt_def.did(), adt_def.did()),
|
||||||
|
@ -1078,6 +1088,12 @@ fn build_struct_type_di_node<'ll, 'tcx>(
|
||||||
Cow::Borrowed(f.name.as_str())
|
Cow::Borrowed(f.name.as_str())
|
||||||
};
|
};
|
||||||
let field_layout = struct_type_and_layout.field(cx, i);
|
let field_layout = struct_type_and_layout.field(cx, i);
|
||||||
|
let def_id = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo
|
||||||
|
{
|
||||||
|
Some(f.did)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
build_field_di_node(
|
build_field_di_node(
|
||||||
cx,
|
cx,
|
||||||
owner,
|
owner,
|
||||||
|
@ -1086,7 +1102,7 @@ fn build_struct_type_di_node<'ll, 'tcx>(
|
||||||
struct_type_and_layout.fields.offset(i),
|
struct_type_and_layout.fields.offset(i),
|
||||||
visibility_di_flags(cx, f.did, adt_def.did()),
|
visibility_di_flags(cx, f.did, adt_def.did()),
|
||||||
type_di_node(cx, field_layout.ty),
|
type_di_node(cx, field_layout.ty),
|
||||||
Some(f.did),
|
def_id,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
@ -1236,6 +1252,11 @@ fn build_union_type_di_node<'ll, 'tcx>(
|
||||||
let containing_scope = get_namespace_for_item(cx, union_def_id);
|
let containing_scope = get_namespace_for_item(cx, union_def_id);
|
||||||
let union_ty_and_layout = cx.layout_of(union_type);
|
let union_ty_and_layout = cx.layout_of(union_type);
|
||||||
let type_name = compute_debuginfo_type_name(cx.tcx, union_type, false);
|
let type_name = compute_debuginfo_type_name(cx.tcx, union_type, false);
|
||||||
|
let def_location = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(file_metadata_from_def_id(cx, Some(union_def_id)))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
type_map::build_type_with_children(
|
type_map::build_type_with_children(
|
||||||
cx,
|
cx,
|
||||||
|
@ -1244,7 +1265,7 @@ fn build_union_type_di_node<'ll, 'tcx>(
|
||||||
Stub::Union,
|
Stub::Union,
|
||||||
unique_type_id,
|
unique_type_id,
|
||||||
&type_name,
|
&type_name,
|
||||||
Some(file_metadata_from_def_id(cx, Some(union_def_id))),
|
def_location,
|
||||||
size_and_align_of(union_ty_and_layout),
|
size_and_align_of(union_ty_and_layout),
|
||||||
Some(containing_scope),
|
Some(containing_scope),
|
||||||
DIFlags::FlagZero,
|
DIFlags::FlagZero,
|
||||||
|
@ -1257,6 +1278,12 @@ fn build_union_type_di_node<'ll, 'tcx>(
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, f)| {
|
.map(|(i, f)| {
|
||||||
let field_layout = union_ty_and_layout.field(cx, i);
|
let field_layout = union_ty_and_layout.field(cx, i);
|
||||||
|
let def_id = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo
|
||||||
|
{
|
||||||
|
Some(f.did)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
build_field_di_node(
|
build_field_di_node(
|
||||||
cx,
|
cx,
|
||||||
owner,
|
owner,
|
||||||
|
@ -1265,7 +1292,7 @@ fn build_union_type_di_node<'ll, 'tcx>(
|
||||||
Size::ZERO,
|
Size::ZERO,
|
||||||
DIFlags::FlagZero,
|
DIFlags::FlagZero,
|
||||||
type_di_node(cx, field_layout.ty),
|
type_di_node(cx, field_layout.ty),
|
||||||
Some(f.did),
|
def_id,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
|
|
@ -192,6 +192,12 @@ pub(super) fn build_enum_type_di_node<'ll, 'tcx>(
|
||||||
|
|
||||||
assert!(!wants_c_like_enum_debuginfo(cx.tcx, enum_type_and_layout));
|
assert!(!wants_c_like_enum_debuginfo(cx.tcx, enum_type_and_layout));
|
||||||
|
|
||||||
|
let def_location = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(file_metadata_from_def_id(cx, Some(enum_adt_def.did())))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
type_map::build_type_with_children(
|
type_map::build_type_with_children(
|
||||||
cx,
|
cx,
|
||||||
type_map::stub(
|
type_map::stub(
|
||||||
|
@ -199,7 +205,7 @@ pub(super) fn build_enum_type_di_node<'ll, 'tcx>(
|
||||||
type_map::Stub::Union,
|
type_map::Stub::Union,
|
||||||
unique_type_id,
|
unique_type_id,
|
||||||
&enum_type_name,
|
&enum_type_name,
|
||||||
Some(file_metadata_from_def_id(cx, Some(enum_adt_def.did()))),
|
def_location,
|
||||||
cx.size_and_align_of(enum_type),
|
cx.size_and_align_of(enum_type),
|
||||||
NO_SCOPE_METADATA,
|
NO_SCOPE_METADATA,
|
||||||
visibility_di_flags(cx, enum_adt_def.did(), enum_adt_def.did()),
|
visibility_di_flags(cx, enum_adt_def.did(), enum_adt_def.did()),
|
||||||
|
@ -263,9 +269,14 @@ pub(super) fn build_coroutine_di_node<'ll, 'tcx>(
|
||||||
unique_type_id: UniqueTypeId<'tcx>,
|
unique_type_id: UniqueTypeId<'tcx>,
|
||||||
) -> DINodeCreationResult<'ll> {
|
) -> DINodeCreationResult<'ll> {
|
||||||
let coroutine_type = unique_type_id.expect_ty();
|
let coroutine_type = unique_type_id.expect_ty();
|
||||||
let &ty::Coroutine(coroutine_def_id, _, _) = coroutine_type.kind() else {
|
let def_location = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
let &ty::Coroutine(coroutine_def_id, _) = coroutine_type.kind() else {
|
||||||
bug!("build_coroutine_di_node() called with non-coroutine type: `{:?}`", coroutine_type)
|
bug!("build_coroutine_di_node() called with non-coroutine type: `{:?}`", coroutine_type)
|
||||||
};
|
};
|
||||||
|
Some(file_metadata_from_def_id(cx, Some(coroutine_def_id)))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
let coroutine_type_and_layout = cx.layout_of(coroutine_type);
|
let coroutine_type_and_layout = cx.layout_of(coroutine_type);
|
||||||
let coroutine_type_name = compute_debuginfo_type_name(cx.tcx, coroutine_type, false);
|
let coroutine_type_name = compute_debuginfo_type_name(cx.tcx, coroutine_type, false);
|
||||||
|
|
||||||
|
@ -278,7 +289,7 @@ pub(super) fn build_coroutine_di_node<'ll, 'tcx>(
|
||||||
type_map::Stub::Union,
|
type_map::Stub::Union,
|
||||||
unique_type_id,
|
unique_type_id,
|
||||||
&coroutine_type_name,
|
&coroutine_type_name,
|
||||||
Some(file_metadata_from_def_id(cx, Some(coroutine_def_id))),
|
def_location,
|
||||||
size_and_align_of(coroutine_type_and_layout),
|
size_and_align_of(coroutine_type_and_layout),
|
||||||
NO_SCOPE_METADATA,
|
NO_SCOPE_METADATA,
|
||||||
DIFlags::FlagZero,
|
DIFlags::FlagZero,
|
||||||
|
@ -326,6 +337,12 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
|
||||||
let tag_base_type_di_node = type_di_node(cx, tag_base_type);
|
let tag_base_type_di_node = type_di_node(cx, tag_base_type);
|
||||||
let tag_base_type_align = cx.align_of(tag_base_type);
|
let tag_base_type_align = cx.align_of(tag_base_type);
|
||||||
|
|
||||||
|
let enum_adt_def_id = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(enum_adt_def.did())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let variant_names_type_di_node = build_variant_names_type_di_node(
|
let variant_names_type_di_node = build_variant_names_type_di_node(
|
||||||
cx,
|
cx,
|
||||||
enum_type_di_node,
|
enum_type_di_node,
|
||||||
|
@ -333,7 +350,7 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
|
||||||
variant_index,
|
variant_index,
|
||||||
Cow::from(enum_adt_def.variant(variant_index).name.as_str()),
|
Cow::from(enum_adt_def.variant(variant_index).name.as_str()),
|
||||||
)),
|
)),
|
||||||
enum_adt_def.did(),
|
enum_adt_def_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
let variant_struct_type_wrapper_di_node = build_variant_struct_wrapper_type_di_node(
|
let variant_struct_type_wrapper_di_node = build_variant_struct_wrapper_type_di_node(
|
||||||
|
@ -391,6 +408,12 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
|
||||||
) -> SmallVec<&'ll DIType> {
|
) -> SmallVec<&'ll DIType> {
|
||||||
let tag_base_type = tag_base_type(cx.tcx, enum_type_and_layout);
|
let tag_base_type = tag_base_type(cx.tcx, enum_type_and_layout);
|
||||||
|
|
||||||
|
let enum_adt_def_id = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(enum_adt_def.did())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let variant_names_type_di_node = build_variant_names_type_di_node(
|
let variant_names_type_di_node = build_variant_names_type_di_node(
|
||||||
cx,
|
cx,
|
||||||
enum_type_di_node,
|
enum_type_di_node,
|
||||||
|
@ -398,7 +421,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
|
||||||
let variant_name = Cow::from(enum_adt_def.variant(variant_index).name.as_str());
|
let variant_name = Cow::from(enum_adt_def.variant(variant_index).name.as_str());
|
||||||
(variant_index, variant_name)
|
(variant_index, variant_name)
|
||||||
}),
|
}),
|
||||||
enum_adt_def.did(),
|
enum_adt_def_id,
|
||||||
);
|
);
|
||||||
let visibility_flags = visibility_di_flags(cx, enum_adt_def.did(), enum_adt_def.did());
|
let visibility_flags = visibility_di_flags(cx, enum_adt_def.did(), enum_adt_def.did());
|
||||||
|
|
||||||
|
@ -456,7 +479,7 @@ fn build_variant_names_type_di_node<'ll, 'tcx>(
|
||||||
cx: &CodegenCx<'ll, 'tcx>,
|
cx: &CodegenCx<'ll, 'tcx>,
|
||||||
containing_scope: &'ll DIType,
|
containing_scope: &'ll DIType,
|
||||||
variants: impl Iterator<Item = (VariantIdx, Cow<'tcx, str>)>,
|
variants: impl Iterator<Item = (VariantIdx, Cow<'tcx, str>)>,
|
||||||
enum_def_id: rustc_span::def_id::DefId,
|
enum_def_id: Option<rustc_span::def_id::DefId>,
|
||||||
) -> &'ll DIType {
|
) -> &'ll DIType {
|
||||||
// Create an enumerator for each variant.
|
// Create an enumerator for each variant.
|
||||||
super::build_enumeration_type_di_node(
|
super::build_enumeration_type_di_node(
|
||||||
|
@ -698,7 +721,11 @@ fn build_union_fields_for_direct_tag_coroutine<'ll, 'tcx>(
|
||||||
variant_range
|
variant_range
|
||||||
.clone()
|
.clone()
|
||||||
.map(|variant_index| (variant_index, CoroutineArgs::variant_name(variant_index))),
|
.map(|variant_index| (variant_index, CoroutineArgs::variant_name(variant_index))),
|
||||||
coroutine_def_id,
|
if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(coroutine_def_id)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
let discriminants: IndexVec<VariantIdx, DiscrResult> = {
|
let discriminants: IndexVec<VariantIdx, DiscrResult> = {
|
||||||
|
@ -791,7 +818,11 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
|
||||||
tag_base_type_di_node,
|
tag_base_type_di_node,
|
||||||
tag_base_type,
|
tag_base_type,
|
||||||
variant_member_info.discr,
|
variant_member_info.discr,
|
||||||
variant_member_info.source_info,
|
if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
variant_member_info.source_info
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// We use LLVMRustDIBuilderCreateMemberType() member type directly because
|
// We use LLVMRustDIBuilderCreateMemberType() member type directly because
|
||||||
|
|
|
@ -68,6 +68,11 @@ fn build_c_style_enum_di_node<'ll, 'tcx>(
|
||||||
enum_type_and_layout: TyAndLayout<'tcx>,
|
enum_type_and_layout: TyAndLayout<'tcx>,
|
||||||
) -> DINodeCreationResult<'ll> {
|
) -> DINodeCreationResult<'ll> {
|
||||||
let containing_scope = get_namespace_for_item(cx, enum_adt_def.did());
|
let containing_scope = get_namespace_for_item(cx, enum_adt_def.did());
|
||||||
|
let enum_adt_def_id = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(enum_adt_def.did())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
DINodeCreationResult {
|
DINodeCreationResult {
|
||||||
di_node: build_enumeration_type_di_node(
|
di_node: build_enumeration_type_di_node(
|
||||||
cx,
|
cx,
|
||||||
|
@ -77,7 +82,7 @@ fn build_c_style_enum_di_node<'ll, 'tcx>(
|
||||||
let name = Cow::from(enum_adt_def.variant(variant_index).name.as_str());
|
let name = Cow::from(enum_adt_def.variant(variant_index).name.as_str());
|
||||||
(name, discr.val)
|
(name, discr.val)
|
||||||
}),
|
}),
|
||||||
enum_adt_def.did(),
|
enum_adt_def_id,
|
||||||
containing_scope,
|
containing_scope,
|
||||||
),
|
),
|
||||||
already_stored_in_typemap: false,
|
already_stored_in_typemap: false,
|
||||||
|
@ -93,7 +98,7 @@ fn build_enumeration_type_di_node<'ll, 'tcx>(
|
||||||
type_name: &str,
|
type_name: &str,
|
||||||
base_type: Ty<'tcx>,
|
base_type: Ty<'tcx>,
|
||||||
enumerators: impl Iterator<Item = (Cow<'tcx, str>, u128)>,
|
enumerators: impl Iterator<Item = (Cow<'tcx, str>, u128)>,
|
||||||
def_id: rustc_span::def_id::DefId,
|
def_id: Option<rustc_span::def_id::DefId>,
|
||||||
containing_scope: &'ll DIType,
|
containing_scope: &'ll DIType,
|
||||||
) -> &'ll DIType {
|
) -> &'ll DIType {
|
||||||
let is_unsigned = match base_type.kind() {
|
let is_unsigned = match base_type.kind() {
|
||||||
|
@ -117,7 +122,12 @@ fn build_enumeration_type_di_node<'ll, 'tcx>(
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let (file_metadata, line_number) = file_metadata_from_def_id(cx, Some(def_id));
|
let (file_metadata, line_number) =
|
||||||
|
if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
file_metadata_from_def_id(cx, def_id)
|
||||||
|
} else {
|
||||||
|
(unknown_file_metadata(cx), UNKNOWN_LINE_NUMBER)
|
||||||
|
};
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
llvm::LLVMRustDIBuilderCreateEnumerationType(
|
llvm::LLVMRustDIBuilderCreateEnumerationType(
|
||||||
|
@ -197,6 +207,12 @@ fn build_enum_variant_struct_type_di_node<'ll, 'tcx>(
|
||||||
) -> &'ll DIType {
|
) -> &'ll DIType {
|
||||||
assert_eq!(variant_layout.ty, enum_type_and_layout.ty);
|
assert_eq!(variant_layout.ty, enum_type_and_layout.ty);
|
||||||
|
|
||||||
|
let def_location = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(file_metadata_from_def_id(cx, Some(variant_def.def_id)))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
type_map::build_type_with_children(
|
type_map::build_type_with_children(
|
||||||
cx,
|
cx,
|
||||||
type_map::stub(
|
type_map::stub(
|
||||||
|
@ -208,7 +224,7 @@ fn build_enum_variant_struct_type_di_node<'ll, 'tcx>(
|
||||||
variant_index,
|
variant_index,
|
||||||
),
|
),
|
||||||
variant_def.name.as_str(),
|
variant_def.name.as_str(),
|
||||||
Some(file_metadata_from_def_id(cx, Some(variant_def.def_id))),
|
def_location,
|
||||||
// NOTE: We use size and align of enum_type, not from variant_layout:
|
// NOTE: We use size and align of enum_type, not from variant_layout:
|
||||||
size_and_align_of(enum_type_and_layout),
|
size_and_align_of(enum_type_and_layout),
|
||||||
Some(enum_type_di_node),
|
Some(enum_type_di_node),
|
||||||
|
|
|
@ -140,6 +140,12 @@ pub(super) fn build_coroutine_di_node<'ll, 'tcx>(
|
||||||
|
|
||||||
let coroutine_type_name = compute_debuginfo_type_name(cx.tcx, coroutine_type, false);
|
let coroutine_type_name = compute_debuginfo_type_name(cx.tcx, coroutine_type, false);
|
||||||
|
|
||||||
|
let def_location = if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
Some(file_metadata_from_def_id(cx, Some(coroutine_def_id)))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
type_map::build_type_with_children(
|
type_map::build_type_with_children(
|
||||||
cx,
|
cx,
|
||||||
type_map::stub(
|
type_map::stub(
|
||||||
|
@ -147,7 +153,7 @@ pub(super) fn build_coroutine_di_node<'ll, 'tcx>(
|
||||||
Stub::Struct,
|
Stub::Struct,
|
||||||
unique_type_id,
|
unique_type_id,
|
||||||
&coroutine_type_name,
|
&coroutine_type_name,
|
||||||
Some(file_metadata_from_def_id(cx, Some(coroutine_def_id))),
|
def_location,
|
||||||
size_and_align_of(coroutine_type_and_layout),
|
size_and_align_of(coroutine_type_and_layout),
|
||||||
Some(containing_scope),
|
Some(containing_scope),
|
||||||
DIFlags::FlagZero,
|
DIFlags::FlagZero,
|
||||||
|
@ -245,7 +251,12 @@ fn build_enum_variant_part_di_node<'ll, 'tcx>(
|
||||||
let variant_part_unique_type_id =
|
let variant_part_unique_type_id =
|
||||||
UniqueTypeId::for_enum_variant_part(cx.tcx, enum_type_and_layout.ty);
|
UniqueTypeId::for_enum_variant_part(cx.tcx, enum_type_and_layout.ty);
|
||||||
|
|
||||||
let (file_metadata, line_number) = file_metadata_from_def_id(cx, Some(enum_type_def_id));
|
let (file_metadata, line_number) =
|
||||||
|
if cx.sess().opts.unstable_opts.more_source_locations_in_debuginfo {
|
||||||
|
file_metadata_from_def_id(cx, Some(enum_type_def_id))
|
||||||
|
} else {
|
||||||
|
(unknown_file_metadata(cx), UNKNOWN_LINE_NUMBER)
|
||||||
|
};
|
||||||
|
|
||||||
let stub = StubInfo::new(
|
let stub = StubInfo::new(
|
||||||
cx,
|
cx,
|
||||||
|
|
|
@ -709,6 +709,7 @@ fn test_unstable_options_tracking_hash() {
|
||||||
untracked!(macro_backtrace, true);
|
untracked!(macro_backtrace, true);
|
||||||
untracked!(meta_stats, true);
|
untracked!(meta_stats, true);
|
||||||
untracked!(mir_include_spans, MirIncludeSpans::On);
|
untracked!(mir_include_spans, MirIncludeSpans::On);
|
||||||
|
untracked!(more_source_locations_in_debuginfo, true);
|
||||||
untracked!(nll_facts, true);
|
untracked!(nll_facts, true);
|
||||||
untracked!(no_analysis, true);
|
untracked!(no_analysis, true);
|
||||||
untracked!(no_leak_check, true);
|
untracked!(no_leak_check, true);
|
||||||
|
|
|
@ -1907,6 +1907,8 @@ options! {
|
||||||
#[rustc_lint_opt_deny_field_access("use `Session::mir_opt_level` instead of this field")]
|
#[rustc_lint_opt_deny_field_access("use `Session::mir_opt_level` instead of this field")]
|
||||||
mir_opt_level: Option<usize> = (None, parse_opt_number, [TRACKED],
|
mir_opt_level: Option<usize> = (None, parse_opt_number, [TRACKED],
|
||||||
"MIR optimization level (0-4; default: 1 in non optimized builds and 2 in optimized builds)"),
|
"MIR optimization level (0-4; default: 1 in non optimized builds and 2 in optimized builds)"),
|
||||||
|
more_source_locations_in_debuginfo: bool = (false, parse_bool, [UNTRACKED],
|
||||||
|
"include additional source file and line number information in debuginfo (default: no)"),
|
||||||
move_size_limit: Option<usize> = (None, parse_opt_number, [TRACKED],
|
move_size_limit: Option<usize> = (None, parse_opt_number, [TRACKED],
|
||||||
"the size at which the `large_assignments` lint starts to be emitted"),
|
"the size at which the `large_assignments` lint starts to be emitted"),
|
||||||
mutable_noalias: bool = (true, parse_bool, [TRACKED],
|
mutable_noalias: bool = (true, parse_bool, [TRACKED],
|
||||||
|
|
|
@ -2,17 +2,19 @@
|
||||||
// async functions.
|
// async functions.
|
||||||
//
|
//
|
||||||
// edition: 2021
|
// edition: 2021
|
||||||
// compile-flags: -C debuginfo=2
|
// compile-flags: -C debuginfo=2 -Z more-source-locations-in-debuginfo=true
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
// NONMSVC-DAG: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-async.rs{{".*}})
|
// NONMSVC-DAG: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/issue-98678-async.rs{{".*}})
|
||||||
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\codegen\\issue-98678-async.rs{{".*}})
|
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\issue-98678-async.rs{{".*}})
|
||||||
|
|
||||||
// NONMSVC-DAG: !DISubprogram(name: "foo",{{.*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
// NONMSVC-DAG: !DISubprogram(name: "foo",{{.*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
||||||
// MSVC-DAG: !DISubprogram(name: "foo",{{.*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]],
|
// MSVC-DAG: !DISubprogram(name: "foo",{{.*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]],
|
||||||
pub async fn foo() -> u8 { 5 }
|
pub async fn foo() -> u8 {
|
||||||
|
5
|
||||||
|
}
|
||||||
|
|
||||||
pub fn bar() -> impl std::future::Future<Output = u8> {
|
pub fn bar() -> impl std::future::Future<Output = u8> {
|
||||||
// NONMSVC: !DICompositeType({{.*"}}{async_block_env#0}{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
// NONMSVC: !DICompositeType({{.*"}}{async_block_env#0}{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
||||||
|
@ -21,5 +23,4 @@ pub fn bar() -> impl std::future::Future<Output = u8> {
|
||||||
let x: u8 = foo().await;
|
let x: u8 = foo().await;
|
||||||
x + 5
|
x + 5
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
// This test verifies the accuracy of emitted file and line debuginfo metadata for closures and
|
// This test verifies the accuracy of emitted file and line debuginfo metadata for closures and
|
||||||
// generators.
|
// generators.
|
||||||
//
|
//
|
||||||
// compile-flags: -C debuginfo=2
|
// compile-flags: -C debuginfo=2 -Z more-source-locations-in-debuginfo
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(generators, stmt_expr_attributes)]
|
#![feature(generators, stmt_expr_attributes)]
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
// NONMSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-closure-generator.rs{{".*}})
|
// NONMSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/issue-98678-closure-generator.rs{{".*}})
|
||||||
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\codegen\\issue-98678-closure-generator.rs{{".*}})
|
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\issue-98678-closure-generator.rs{{".*}})
|
||||||
|
|
||||||
pub fn foo() {
|
pub fn foo() {
|
||||||
// NONMSVC: !DICompositeType({{.*"}}{closure_env#0}{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
// NONMSVC: !DICompositeType({{.*"}}{closure_env#0}{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
// This test verifies the accuracy of emitted file and line debuginfo metadata enums.
|
// This test verifies the accuracy of emitted file and line debuginfo metadata enums.
|
||||||
//
|
//
|
||||||
// compile-flags: -C debuginfo=2
|
// compile-flags: -C debuginfo=2 -Z more-source-locations-in-debuginfo
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
// NONMSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-enum.rs{{".*}})
|
// NONMSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/issue-98678-enum.rs{{".*}})
|
||||||
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\codegen\\issue-98678-enum.rs{{".*}})
|
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\issue-98678-enum.rs{{".*}})
|
||||||
|
|
||||||
// NONMSVC: !DICompositeType({{.*"}}SingleCase{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
// NONMSVC: !DICompositeType({{.*"}}SingleCase{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]],
|
||||||
// MSVC: !DICompositeType({{.*"}}enum2$<issue_98678_enum::SingleCase>{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]],
|
// MSVC: !DICompositeType({{.*"}}enum2$<issue_98678_enum::SingleCase>{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]],
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
// This test verifies the accuracy of emitted file and line debuginfo metadata for structs and
|
// This test verifies the accuracy of emitted file and line debuginfo metadata for structs and
|
||||||
// unions.
|
// unions.
|
||||||
//
|
//
|
||||||
// compile-flags: -C debuginfo=2
|
// compile-flags: -C debuginfo=2 -Z more-source-locations-in-debuginfo
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
// NONMSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-struct-union.rs{{".*}})
|
// NONMSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/issue-98678-struct-union.rs{{".*}})
|
||||||
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\codegen\\issue-98678-struct-union.rs{{".*}})
|
// MSVC: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}\\issue-98678-struct-union.rs{{".*}})
|
||||||
|
|
||||||
// CHECK: !DICompositeType({{.*"}}MyType{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]],
|
// CHECK: !DICompositeType({{.*"}}MyType{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]],
|
||||||
pub struct MyType {
|
pub struct MyType {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue