From 246f239d9f40f633160f0c18f87a20922d4e77bb Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:06:37 +0200 Subject: Merging debian version 1.65.0+dfsg1-2. Signed-off-by: Daniel Baumann --- src/test/debuginfo/msvc-pretty-enums.rs | 212 +++++++++++++++++++++++++++----- 1 file changed, 179 insertions(+), 33 deletions(-) (limited to 'src/test/debuginfo/msvc-pretty-enums.rs') diff --git a/src/test/debuginfo/msvc-pretty-enums.rs b/src/test/debuginfo/msvc-pretty-enums.rs index a153a9a42..7f1be6f27 100644 --- a/src/test/debuginfo/msvc-pretty-enums.rs +++ b/src/test/debuginfo/msvc-pretty-enums.rs @@ -4,69 +4,141 @@ // cdb-command: g // cdb-command: dx a -// cdb-check:a : Some({...}) [Type: enum$, 2, 16, Some>] -// cdb-check: [] [Type: enum$, 2, 16, Some>] -// cdb-check: [variant] : Some +// cdb-check:a : Some [Type: enum2$ >] // cdb-check: [+0x000] __0 : Low (0x2) [Type: msvc_pretty_enums::CStyleEnum] // cdb-command: dx b -// cdb-check:b : None [Type: enum$, 2, 16, Some>] -// cdb-check: [] [Type: enum$, 2, 16, Some>] -// cdb-check: [variant] : None +// cdb-check:b : None [Type: enum2$ >] // cdb-command: dx c -// cdb-check:c : Tag1 [Type: enum$] -// cdb-check: [] [Type: enum$] -// cdb-check: [variant] : Tag1 +// cdb-check:c : Tag1 [Type: enum2$] // cdb-command: dx d -// cdb-check:d : Data({...}) [Type: enum$] -// cdb-check: [] [Type: enum$] -// cdb-check: [variant] : Data +// cdb-check:d : Data [Type: enum2$] // cdb-check: [+0x000] my_data : High (0x10) [Type: msvc_pretty_enums::CStyleEnum] // cdb-command: dx e -// cdb-check:e : Tag2 [Type: enum$] -// cdb-check: [] [Type: enum$] -// cdb-check: [variant] : Tag2 +// cdb-check:e : Tag2 [Type: enum2$] // cdb-command: dx f -// cdb-check:f : Some({...}) [Type: enum$ >, 1, [...], Some>] -// cdb-check: [] [Type: enum$ >, 1, [...], Some>] -// cdb-check: [variant] : Some +// cdb-check:f : Some [Type: enum2$ > >] // cdb-check: [+0x000] __0 : 0x[...] : 0x1 [Type: unsigned int *] // cdb-command: dx g -// cdb-check:g : None [Type: enum$ >, 1, [...], Some>] -// cdb-check: [] [Type: enum$ >, 1, [...], Some>] -// cdb-check: [variant] : None +// cdb-check:g : None [Type: enum2$ > >] // cdb-command: dx h -// cdb-check:h : Some [Type: enum$ >] -// cdb-check: [] [Type: enum$ >] -// cdb-check: [variant] : Some +// cdb-check:h : Some [Type: enum2$ >] // cdb-check: [+0x004] __0 : 0xc [Type: unsigned int] // cdb-command: dx i -// cdb-check:i : None [Type: enum$ >] -// cdb-check: [] [Type: enum$ >] -// cdb-check: [variant] : None +// cdb-check:i : None [Type: enum2$ >] // cdb-command: dx j // cdb-check:j : High (0x10) [Type: msvc_pretty_enums::CStyleEnum] // cdb-command: dx k -// cdb-check:k : Some({...}) [Type: enum$, 1, [...], Some>] -// cdb-check: [] [Type: enum$, 1, [...], Some>] -// cdb-check: [variant] : Some +// cdb-check:k : Some [Type: enum2$ >] // cdb-check: [+0x000] __0 : "IAMA optional string!" [Type: alloc::string::String] // cdb-command: dx l -// cdb-check:l : Ok [Type: enum$ >, Ok>] -// cdb-check: [] [Type: enum$ >, Ok>] -// cdb-check: [variant] : Ok +// cdb-check:l : Ok [Type: enum2$ > >] // cdb-check: [+0x000] __0 : 0x2a [Type: unsigned int] +// cdb-command: dx niche128_some +// cdb-check: niche128_some : Some [Type: enum2$ >] +// Note: we can't actually read the value of the field because CDB cannot handle 128 bit integers. +// cdb-check: [+0x000] __0 [...] [Type: core::num::nonzero::NonZeroI128] + +// cdb-command: dx niche128_none +// cdb-check: niche128_none : None [Type: enum2$ >] + +// cdb-command: dx wrapping_niche128_untagged +// cdb-check: wrapping_niche128_untagged : X [Type: enum2$] +// cdb-check: [+0x[...]] __0 [Type: msvc_pretty_enums::Wrapping128] + +// cdb-command: dx wrapping_niche128_none1 +// cdb-check: wrapping_niche128_none1 : Y [Type: enum2$] +// cdb-check: [+0x[...]] __0 [Type: msvc_pretty_enums::Wrapping128] + +// cdb-command: dx wrapping_niche128_none2 +// cdb-check: wrapping_niche128_none2 : Z [Type: enum2$] +// cdb-check: [+0x[...]] __0 [Type: msvc_pretty_enums::Wrapping128] + +// cdb-command: dx direct_tag_128_a,d +// cdb-check: direct_tag_128_a,d : A [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 42 [Type: unsigned int] + +// cdb-command: dx direct_tag_128_b,d +// cdb-check: direct_tag_128_b,d : B [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 137 [Type: unsigned int] + +// cdb-command: dx niche_w_fields_1_some,d +// cdb-check: niche_w_fields_1_some,d : A [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 0x[...] : 77 [Type: unsigned char *] +// cdb-check: [+0x[...]] __1 : 7 [Type: unsigned int] + +// cdb-command: dx niche_w_fields_1_none,d +// cdb-check: niche_w_fields_1_none,d : B [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 99 [Type: unsigned int] + +// cdb-command: dx niche_w_fields_2_some,d +// cdb-check: niche_w_fields_2_some,d : A [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 800 [Type: core::num::nonzero::NonZeroU32] +// cdb-check: [+0x[...]] __1 : 900 [Type: unsigned __int64] + +// cdb-command: dx niche_w_fields_2_none,d +// cdb-check: niche_w_fields_2_none,d : B [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 1000 [Type: unsigned __int64] + +// cdb-command: dx niche_w_fields_3_some,d +// cdb-check: niche_w_fields_3_some,d : A [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 137 [Type: unsigned char] +// cdb-check: [+0x[...]] __1 : true [Type: bool] + +// cdb-command: dx niche_w_fields_3_niche1,d +// cdb-check: niche_w_fields_3_niche1,d : B [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 12 [Type: unsigned char] + +// cdb-command: dx niche_w_fields_3_niche2,d +// cdb-check: niche_w_fields_3_niche2,d : C [Type: enum2$] +// cdb-check: [+0x[...]] __0 : false [Type: bool] + +// cdb-command: dx niche_w_fields_3_niche3,d +// cdb-check: niche_w_fields_3_niche3,d : D [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 34 [Type: unsigned char] + +// cdb-command: dx niche_w_fields_3_niche4,d +// cdb-check: niche_w_fields_3_niche4,d : E [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 56 [Type: unsigned char] + +// cdb-command: dx niche_w_fields_3_niche5,d +// cdb-check: niche_w_fields_3_niche5,d : F [Type: enum2$] + +// cdb-command: dx -r3 niche_w_fields_std_result_ok,d +// cdb-check: niche_w_fields_std_result_ok,d : Ok [Type: enum2$,alloc::alloc::Global>,u64> >] +// cdb-check: [+0x[...]] __0 [Type: alloc::boxed::Box,alloc::alloc::Global>] +// cdb-check: [+0x[...]] data_ptr : [...] +// cdb-check: [+0x[...]] length : 3 [...] + +// cdb-command: dx -r3 niche_w_fields_std_result_err,d +// cdb-check: niche_w_fields_std_result_err,d : Err [Type: enum2$,alloc::alloc::Global>,u64> >] +// cdb-check: [+0x[...]] __0 : 789 [Type: unsigned __int64] + +// cdb-command: dx -r2 arbitrary_discr1,d +// cdb-check: arbitrary_discr1,d : Abc [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 1234 [Type: unsigned int] + +// cdb-command: dx -r2 arbitrary_discr2,d +// cdb-check: arbitrary_discr2,d : Def [Type: enum2$] +// cdb-check: [+0x[...]] __0 : 5678 [Type: unsigned int] + +#![feature(rustc_attrs)] +#![feature(repr128)] +#![feature(arbitrary_enum_discriminant)] + +use std::num::{NonZeroI128, NonZeroU32}; + pub enum CStyleEnum { Low = 2, High = 16, @@ -80,6 +152,51 @@ pub enum NicheLayoutEnum { pub enum Empty {} +// The following three types will use a niche layout once +// https://github.com/rust-lang/rust/pull/94075 is merged: +enum NicheLayoutWithFields1<'a> { + A(&'a u8, u32), + B(u32), +} + +enum NicheLayoutWithFields2 { + A(NonZeroU32, u64), + B(u64), +} + +enum NicheLayoutWithFields3 { + A(u8, bool), + B(u8), + C(bool), + D(u8), + E(u8), + F, +} + +#[rustc_layout_scalar_valid_range_start(340282366920938463463374607431768211454)] +#[rustc_layout_scalar_valid_range_end(1)] +#[repr(transparent)] +struct Wrapping128(u128); + +// #[rustc_layout(debug)] +enum Wrapping128Niche { + X(Wrapping128), + Y, + Z, +} + +#[repr(i128)] +enum DirectTag128 { + A(u32), + B(u32), +} + +#[repr(u32)] +enum ArbitraryDiscr { + Abc(u32) = 1000, + Def(u32) = 5000_000, +} + fn main() { let a = Some(CStyleEnum::Low); let b = Option::::None; @@ -93,6 +210,35 @@ fn main() { let j = CStyleEnum::High; let k = Some("IAMA optional string!".to_string()); let l = Result::::Ok(42); + let niche128_some = Some(NonZeroI128::new(123456).unwrap()); + let niche128_none: Option = None; + + let wrapping_niche128_untagged = + unsafe { Wrapping128Niche::X(Wrapping128(340282366920938463463374607431768211454)) }; + let wrapping_niche128_none1 = Wrapping128Niche::Y; + let wrapping_niche128_none2 = Wrapping128Niche::Z; + + let direct_tag_128_a = DirectTag128::A(42); + let direct_tag_128_b = DirectTag128::B(137); + + let niche_w_fields_1_some = NicheLayoutWithFields1::A(&77, 7); + let niche_w_fields_1_none = NicheLayoutWithFields1::B(99); + + let niche_w_fields_2_some = NicheLayoutWithFields2::A(NonZeroU32::new(800).unwrap(), 900); + let niche_w_fields_2_none = NicheLayoutWithFields2::B(1000); + + let niche_w_fields_3_some = NicheLayoutWithFields3::A(137, true); + let niche_w_fields_3_niche1 = NicheLayoutWithFields3::B(12); + let niche_w_fields_3_niche2 = NicheLayoutWithFields3::C(false); + let niche_w_fields_3_niche3 = NicheLayoutWithFields3::D(34); + let niche_w_fields_3_niche4 = NicheLayoutWithFields3::E(56); + let niche_w_fields_3_niche5 = NicheLayoutWithFields3::F; + + let niche_w_fields_std_result_ok: Result, u64> = Ok(vec![1, 2, 3].into()); + let niche_w_fields_std_result_err: Result, u64> = Err(789); + + let arbitrary_discr1 = ArbitraryDiscr::Abc(1234); + let arbitrary_discr2 = ArbitraryDiscr::Def(5678); zzz(); // #break } -- cgit v1.2.3