Respond to review feedback
This commit is contained in:
parent
ef053fd6f0
commit
3127419e2b
4 changed files with 61 additions and 98 deletions
|
@ -1485,8 +1485,8 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
_ => bug!(),
|
_ => bug!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// This will always find the metadata in the type map.
|
|
||||||
let fallback = use_enum_fallback(cx);
|
let fallback = use_enum_fallback(cx);
|
||||||
|
// This will always find the metadata in the type map.
|
||||||
let self_metadata = type_metadata(cx, self.enum_type, self.span);
|
let self_metadata = type_metadata(cx, self.enum_type, self.span);
|
||||||
|
|
||||||
match self.layout.variants {
|
match self.layout.variants {
|
||||||
|
@ -1541,11 +1541,11 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
// struct {variant 0 name} {
|
// struct {variant 0 name} {
|
||||||
// tag$ variant$;
|
// tag$ variant$;
|
||||||
// <variant 0 fields>
|
// <variant 0 fields>
|
||||||
// } Variant0;
|
// } variant0;
|
||||||
// <other variant structs>
|
// <other variant structs>
|
||||||
// }
|
// }
|
||||||
// ```
|
// ```
|
||||||
// The natvis in `intrinsic.nativs` then matches on `this.Variant0.variant$` to
|
// The natvis in `intrinsic.nativs` then matches on `this.variant0.variant$` to
|
||||||
// determine which variant is active and then displays it.
|
// determine which variant is active and then displays it.
|
||||||
Some(DirectTag {
|
Some(DirectTag {
|
||||||
tag_field: Field::from(tag_field),
|
tag_field: Field::from(tag_field),
|
||||||
|
@ -1582,7 +1582,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
|
|
||||||
MemberDescription {
|
MemberDescription {
|
||||||
name: if fallback {
|
name: if fallback {
|
||||||
format!("Variant{}", i.as_u32())
|
format!("variant{}", i.as_u32())
|
||||||
} else {
|
} else {
|
||||||
variant_info.variant_name()
|
variant_info.variant_name()
|
||||||
},
|
},
|
||||||
|
@ -1623,43 +1623,27 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// For MSVC, we will generate a union of two structs, one for the dataful variant and one that just points to
|
// For MSVC, we will generate a union of two fields, one for the dataful variant
|
||||||
// the discriminant field. We also create an enum that contains tag values for the non-dataful variants and
|
// and one that just points to the discriminant. We also create an enum that
|
||||||
// make the discriminant field that type. We then use natvis to render the enum type correctly in Windbg/VS.
|
// contains tag values for the non-dataful variants and make the discriminant field
|
||||||
|
// that type. We then use natvis to render the enum type correctly in Windbg/VS.
|
||||||
// This will generate debuginfo roughly equivalent to the following C:
|
// This will generate debuginfo roughly equivalent to the following C:
|
||||||
// ```c
|
// ```c
|
||||||
// union enum$<{name}, {min niche}, {max niche}, {dataful variant name} {
|
// union enum$<{name}, {min niche}, {max niche}, {dataful variant name}> {
|
||||||
// struct dataful_variant {
|
// struct <dataful variant name> {
|
||||||
// <fields in dataful variant>
|
// <fields in dataful variant>
|
||||||
// },
|
// } dataful_variant;
|
||||||
// struct discriminant$ {
|
// enum Discriminant$ {
|
||||||
// enum tag$ {
|
// <non-dataful variants>
|
||||||
// <non-dataful variants>
|
// } discriminant;
|
||||||
// } discriminant;
|
|
||||||
// }
|
|
||||||
// }
|
// }
|
||||||
// ```
|
// ```
|
||||||
// The natvis in `intrinsic.natvis` matches on the type name `enum$<*, *, *, *>`
|
// The natvis in `intrinsic.natvis` matches on the type name `enum$<*, *, *, *>`
|
||||||
// and evaluates `this.discriminant$.discriminant`. If the value is between
|
// and evaluates `this.discriminant`. If the value is between the min niche and max
|
||||||
// the min niche and max niche, then the enum is in the dataful variant and
|
// niche, then the enum is in the dataful variant and `this.dataful_variant` is
|
||||||
// `this.dataful_variant` is rendered. Otherwise, the enum is in one of the
|
// rendered. Otherwise, the enum is in one of the non-dataful variants. In that
|
||||||
// non-dataful variants. In that case, we just need to render the name of the
|
// case, we just need to render the name of the `this.discriminant` enum.
|
||||||
// `this.discriminant$.discriminant` enum.
|
|
||||||
if fallback {
|
if fallback {
|
||||||
let unique_type_id = debug_context(cx)
|
|
||||||
.type_map
|
|
||||||
.borrow_mut()
|
|
||||||
.get_unique_type_id_of_enum_variant(cx, self.enum_type, "discriminant$");
|
|
||||||
|
|
||||||
let variant_metadata = create_struct_stub(
|
|
||||||
cx,
|
|
||||||
self.layout.ty,
|
|
||||||
&"discriminant$",
|
|
||||||
unique_type_id,
|
|
||||||
Some(self_metadata),
|
|
||||||
DIFlags::FlagArtificial,
|
|
||||||
);
|
|
||||||
|
|
||||||
let dataful_variant_layout = self.layout.for_variant(cx, dataful_variant);
|
let dataful_variant_layout = self.layout.for_variant(cx, dataful_variant);
|
||||||
|
|
||||||
let mut discr_enum_ty = tag.value.to_ty(cx.tcx);
|
let mut discr_enum_ty = tag.value.to_ty(cx.tcx);
|
||||||
|
@ -1694,8 +1678,8 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
llvm::LLVMRustDIBuilderCreateEnumerationType(
|
llvm::LLVMRustDIBuilderCreateEnumerationType(
|
||||||
DIB(cx),
|
DIB(cx),
|
||||||
self_metadata,
|
self_metadata,
|
||||||
"tag$".as_ptr().cast(),
|
"Discriminant$".as_ptr().cast(),
|
||||||
"tag$".len(),
|
"Discriminant$".len(),
|
||||||
unknown_file_metadata(cx),
|
unknown_file_metadata(cx),
|
||||||
UNKNOWN_LINE_NUMBER,
|
UNKNOWN_LINE_NUMBER,
|
||||||
tag.value.size(cx).bits(),
|
tag.value.size(cx).bits(),
|
||||||
|
@ -1706,27 +1690,6 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let (size, align) =
|
|
||||||
cx.size_and_align_of(dataful_variant_layout.field(cx, tag_field).ty);
|
|
||||||
let members = vec![MemberDescription {
|
|
||||||
name: "discriminant".to_string(),
|
|
||||||
type_metadata: discr_enum,
|
|
||||||
offset: dataful_variant_layout.fields.offset(tag_field),
|
|
||||||
size,
|
|
||||||
align,
|
|
||||||
flags: DIFlags::FlagArtificial,
|
|
||||||
discriminant: None,
|
|
||||||
source_info: None,
|
|
||||||
}];
|
|
||||||
|
|
||||||
set_members_of_composite_type(
|
|
||||||
cx,
|
|
||||||
self.enum_type,
|
|
||||||
variant_metadata,
|
|
||||||
members,
|
|
||||||
None,
|
|
||||||
);
|
|
||||||
|
|
||||||
let variant_info = variant_info_for(dataful_variant);
|
let variant_info = variant_info_for(dataful_variant);
|
||||||
let (variant_type_metadata, member_desc_factory) = describe_enum_variant(
|
let (variant_type_metadata, member_desc_factory) = describe_enum_variant(
|
||||||
cx,
|
cx,
|
||||||
|
@ -1747,6 +1710,9 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
Some(&self.common_members),
|
Some(&self.common_members),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let (size, align) =
|
||||||
|
cx.size_and_align_of(dataful_variant_layout.field(cx, tag_field).ty);
|
||||||
|
|
||||||
vec![
|
vec![
|
||||||
MemberDescription {
|
MemberDescription {
|
||||||
// Name the dataful variant so that we can identify it for natvis
|
// Name the dataful variant so that we can identify it for natvis
|
||||||
|
@ -1760,11 +1726,11 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
source_info: variant_info.source_info(cx),
|
source_info: variant_info.source_info(cx),
|
||||||
},
|
},
|
||||||
MemberDescription {
|
MemberDescription {
|
||||||
name: "discriminant$".into(),
|
name: "discriminant".into(),
|
||||||
type_metadata: variant_metadata,
|
type_metadata: discr_enum,
|
||||||
offset: Size::ZERO,
|
offset: dataful_variant_layout.fields.offset(tag_field),
|
||||||
size: self.layout.size,
|
size,
|
||||||
align: self.layout.align.abi,
|
align,
|
||||||
flags: DIFlags::FlagZero,
|
flags: DIFlags::FlagZero,
|
||||||
discriminant: None,
|
discriminant: None,
|
||||||
source_info: None,
|
source_info: None,
|
||||||
|
|
|
@ -238,6 +238,10 @@ pub fn push_debuginfo_type_name<'tcx>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// MSVC names enums differently than other platforms so that the debugging visualization
|
||||||
|
// format (natvis) is able to understand enums and render the active variant correctly in the
|
||||||
|
// debugger. For more information, look in `src/etc/natvis/intrinsic.natvis` and
|
||||||
|
// `EnumMemberDescriptionFactor::create_member_descriptions`.
|
||||||
fn msvc_enum_fallback(
|
fn msvc_enum_fallback(
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
ty: Ty<'tcx>,
|
ty: Ty<'tcx>,
|
||||||
|
|
|
@ -150,7 +150,7 @@
|
||||||
</Expand>
|
</Expand>
|
||||||
</Type>
|
</Type>
|
||||||
<Type Name="enum$<*>">
|
<Type Name="enum$<*>">
|
||||||
<Intrinsic Name="tag" Expression="Variant0.variant$" />
|
<Intrinsic Name="tag" Expression="variant0.variant$" />
|
||||||
<DisplayString Condition="tag() == 0">{tag(),en}</DisplayString>
|
<DisplayString Condition="tag() == 0">{tag(),en}</DisplayString>
|
||||||
<DisplayString Condition="tag() == 1" Optional="true">{tag(),en}</DisplayString>
|
<DisplayString Condition="tag() == 1" Optional="true">{tag(),en}</DisplayString>
|
||||||
<DisplayString Condition="tag() == 2" Optional="true">{tag(),en}</DisplayString>
|
<DisplayString Condition="tag() == 2" Optional="true">{tag(),en}</DisplayString>
|
||||||
|
@ -169,31 +169,32 @@
|
||||||
<DisplayString Condition="tag() == 15" Optional="true">{tag(),en}</DisplayString>
|
<DisplayString Condition="tag() == 15" Optional="true">{tag(),en}</DisplayString>
|
||||||
|
|
||||||
<Expand>
|
<Expand>
|
||||||
<ExpandedItem Condition="tag() == 0">Variant0</ExpandedItem>
|
<ExpandedItem Condition="tag() == 0">variant0</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 1" Optional="true">Variant1</ExpandedItem>
|
<ExpandedItem Condition="tag() == 1" Optional="true">variant1</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 2" Optional="true">Variant2</ExpandedItem>
|
<ExpandedItem Condition="tag() == 2" Optional="true">variant2</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 3" Optional="true">Variant3</ExpandedItem>
|
<ExpandedItem Condition="tag() == 3" Optional="true">variant3</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 4" Optional="true">Variant4</ExpandedItem>
|
<ExpandedItem Condition="tag() == 4" Optional="true">variant4</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 5" Optional="true">Variant5</ExpandedItem>
|
<ExpandedItem Condition="tag() == 5" Optional="true">variant5</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 6" Optional="true">Variant6</ExpandedItem>
|
<ExpandedItem Condition="tag() == 6" Optional="true">variant6</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 7" Optional="true">Variant7</ExpandedItem>
|
<ExpandedItem Condition="tag() == 7" Optional="true">variant7</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 8" Optional="true">Variant8</ExpandedItem>
|
<ExpandedItem Condition="tag() == 8" Optional="true">variant8</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 9" Optional="true">Variant9</ExpandedItem>
|
<ExpandedItem Condition="tag() == 9" Optional="true">variant9</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 10" Optional="true">Variant10</ExpandedItem>
|
<ExpandedItem Condition="tag() == 10" Optional="true">variant10</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 11" Optional="true">Variant11</ExpandedItem>
|
<ExpandedItem Condition="tag() == 11" Optional="true">variant11</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 12" Optional="true">Variant12</ExpandedItem>
|
<ExpandedItem Condition="tag() == 12" Optional="true">variant12</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 13" Optional="true">Variant13</ExpandedItem>
|
<ExpandedItem Condition="tag() == 13" Optional="true">variant13</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 14" Optional="true">Variant14</ExpandedItem>
|
<ExpandedItem Condition="tag() == 14" Optional="true">variant14</ExpandedItem>
|
||||||
<ExpandedItem Condition="tag() == 15" Optional="true">Variant15</ExpandedItem>
|
<ExpandedItem Condition="tag() == 15" Optional="true">variant15</ExpandedItem>
|
||||||
</Expand>
|
</Expand>
|
||||||
</Type>
|
</Type>
|
||||||
|
|
||||||
<!-- $T1 is the name of the enum, $T2 is the low value of the dataful variant tag, $T3 is the high value of the dataful variant tag, $T4 is the name of the dataful variant -->
|
<!-- $T1 is the name of the enum, $T2 is the low value of the dataful variant tag,
|
||||||
|
$T3 is the high value of the dataful variant tag, $T4 is the name of the dataful variant -->
|
||||||
<Type Name="enum$<*, *, *, *>">
|
<Type Name="enum$<*, *, *, *>">
|
||||||
<Intrinsic Name="tag" Expression="discriminant$.discriminant" />
|
<Intrinsic Name="tag" Expression="discriminant" />
|
||||||
<Intrinsic Name="is_dataful" Expression="tag() >= $T2 && tag() <= $T3" />
|
<Intrinsic Name="is_dataful" Expression="tag() >= $T2 && tag() <= $T3" />
|
||||||
<DisplayString Condition="is_dataful()">{"$T4",sb}({dataful_variant})</DisplayString>
|
<DisplayString Condition="is_dataful()">{"$T4",sb}({dataful_variant})</DisplayString>
|
||||||
<DisplayString Condition="!is_dataful()">{discriminant$.discriminant,en}</DisplayString>
|
<DisplayString Condition="!is_dataful()">{discriminant,en}</DisplayString>
|
||||||
<Expand>
|
<Expand>
|
||||||
<ExpandedItem Condition="is_dataful()">dataful_variant</ExpandedItem>
|
<ExpandedItem Condition="is_dataful()">dataful_variant</ExpandedItem>
|
||||||
<Synthetic Condition="is_dataful()" Name="[variant]">
|
<Synthetic Condition="is_dataful()" Name="[variant]">
|
||||||
|
|
|
@ -11,50 +11,43 @@
|
||||||
// cdb-check:a,! [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>]
|
// cdb-check:a,! [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Some]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Some]
|
||||||
// cdb-check: [+0x000] __0 : Low (0x2) [Type: msvc_pretty_enums::CStyleEnum]
|
// cdb-check: [+0x000] __0 : Low (0x2) [Type: msvc_pretty_enums::CStyleEnum]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::discriminant$]
|
// cdb-check: [+0x000] discriminant : 0x2 [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : 0x2 [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx -r2 b,!
|
// cdb-command: dx -r2 b,!
|
||||||
// cdb-check:b,! [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>]
|
// cdb-check:b,! [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Some]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Some]
|
||||||
// cdb-check: [+0x000] __0 : 0x11 [Type: msvc_pretty_enums::CStyleEnum]
|
// cdb-check: [+0x000] __0 : 0x11 [Type: msvc_pretty_enums::CStyleEnum]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::discriminant$]
|
// cdb-check: [+0x000] discriminant : None (0x11) [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : None (0x11) [Type: enum$<core::option::Option<enum$<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx -r2 c,!
|
// cdb-command: dx -r2 c,!
|
||||||
// cdb-check:c,! [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
|
// cdb-check:c,! [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
|
||||||
// cdb-check: [+0x000] my_data : 0x11 [Type: msvc_pretty_enums::CStyleEnum]
|
// cdb-check: [+0x000] my_data : 0x11 [Type: msvc_pretty_enums::CStyleEnum]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::discriminant$]
|
// cdb-check: [+0x000] discriminant : Tag1 (0x11) [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : Tag1 (0x11) [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx -r2 d,!
|
// cdb-command: dx -r2 d,!
|
||||||
// cdb-check:d,! [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
|
// cdb-check:d,! [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
|
||||||
// cdb-check: [+0x000] my_data : High (0x10) [Type: msvc_pretty_enums::CStyleEnum]
|
// cdb-check: [+0x000] my_data : High (0x10) [Type: msvc_pretty_enums::CStyleEnum]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::discriminant$]
|
// cdb-check: [+0x000] discriminant : 0x10 [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : 0x10 [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx -r2 e,!
|
// cdb-command: dx -r2 e,!
|
||||||
// cdb-check:e,! [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
|
// cdb-check:e,! [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
|
||||||
// cdb-check: [+0x000] my_data : 0x13 [Type: msvc_pretty_enums::CStyleEnum]
|
// cdb-check: [+0x000] my_data : 0x13 [Type: msvc_pretty_enums::CStyleEnum]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::discriminant$]
|
// cdb-check: [+0x000] discriminant : Tag2 (0x13) [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : Tag2 (0x13) [Type: enum$<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx -r2 f,!
|
// cdb-command: dx -r2 f,!
|
||||||
// cdb-check:f,! [Type: enum$<core::option::Option<u32*>, 1, [...], Some>]
|
// cdb-check:f,! [Type: enum$<core::option::Option<u32*>, 1, [...], Some>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::Some]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::Some]
|
||||||
// cdb-check: [+0x000] __0 : 0x[...] : 0x1 [Type: unsigned int *]
|
// cdb-check: [+0x000] __0 : 0x[...] : 0x1 [Type: unsigned int *]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::discriminant$]
|
// cdb-check: [+0x000] discriminant : 0x[...] [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : 0x[...] [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx -r2 g,!
|
// cdb-command: dx -r2 g,!
|
||||||
// cdb-check:g,! [Type: enum$<core::option::Option<u32*>, 1, [...], Some>]
|
// cdb-check:g,! [Type: enum$<core::option::Option<u32*>, 1, [...], Some>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::Some]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::Some]
|
||||||
// cdb-check: [+0x000] __0 : 0x0 [Type: unsigned int *]
|
// cdb-check: [+0x000] __0 : 0x0 [Type: unsigned int *]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::discriminant$]
|
// cdb-check: [+0x000] discriminant : None (0x0) [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : None (0x0) [Type: enum$<core::option::Option<u32*>, 1, [...], Some>::tag$]
|
|
||||||
|
|
||||||
// cdb-command: dx h
|
// cdb-command: dx h
|
||||||
// cdb-check:h : Some [Type: enum$<core::option::Option<u32>>]
|
// cdb-check:h : Some [Type: enum$<core::option::Option<u32>>]
|
||||||
|
@ -72,8 +65,7 @@
|
||||||
// cdb-check:k,! [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>]
|
// cdb-check:k,! [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>]
|
||||||
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>::Some]
|
// cdb-check: [+0x000] dataful_variant [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>::Some]
|
||||||
// cdb-check: [+0x000] __0 [Type: alloc::string::String]
|
// cdb-check: [+0x000] __0 [Type: alloc::string::String]
|
||||||
// cdb-check: [+0x000] discriminant$ [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>::discriminant$]
|
// cdb-check: [+0x000] discriminant : 0x[...] [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>::Discriminant$]
|
||||||
// cdb-check: [+0x000] discriminant : 0x[...] [Type: enum$<core::option::Option<alloc::string::String>, 1, [...], Some>::tag$]
|
|
||||||
|
|
||||||
pub enum CStyleEnum {
|
pub enum CStyleEnum {
|
||||||
Low = 2,
|
Low = 2,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue