1+ // only-cdb
2+ // compile-flags:-g
3+
4+ // cdb-command: g
5+
6+ // Note: The natvis used to visualize niche-layout enums don't work correctly in cdb
7+ // so the best we can do is to make sure we are generating the right debuginfo
8+
9+ // cdb-command: dx -r2 a,!
10+ // cdb-check:a,! [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>]
11+ // cdb-check: [+0x000] dataful_variant [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Some]
12+ // cdb-check: [+0x000] __0 : Low (0x2) [Type: msvc_pretty_enums::CStyleEnum]
13+ // cdb-check: [+0x000] discriminant$ [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::discriminant$]
14+ // cdb-check: [+0x000] discriminant : 0x2 [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::tag$]
15+
16+ // cdb-command: dx -r2 b,!
17+ // cdb-check:b,! [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>]
18+ // cdb-check: [+0x000] dataful_variant [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::Some]
19+ // cdb-check: [+0x000] __0 : 0x11 [Type: msvc_pretty_enums::CStyleEnum]
20+ // cdb-check: [+0x000] discriminant$ [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::discriminant$]
21+ // cdb-check: [+0x000] discriminant : None (0x11) [Type: _enum<core::option::Option<_enum<msvc_pretty_enums::CStyleEnum>>, 2, 16, Some>::tag$]
22+
23+ // cdb-command: dx -r2 c,!
24+ // cdb-check:c,! [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
25+ // cdb-check: [+0x000] dataful_variant [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
26+ // cdb-check: [+0x000] my_data : 0x11 [Type: msvc_pretty_enums::CStyleEnum]
27+ // cdb-check: [+0x000] discriminant$ [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::discriminant$]
28+ // cdb-check: [+0x000] discriminant : Tag1 (0x11) [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::tag$]
29+
30+ // cdb-command: dx -r2 d,!
31+ // cdb-check:d,! [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
32+ // cdb-check: [+0x000] dataful_variant [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
33+ // cdb-check: [+0x000] my_data : High (0x10) [Type: msvc_pretty_enums::CStyleEnum]
34+ // cdb-check: [+0x000] discriminant$ [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::discriminant$]
35+ // cdb-check: [+0x000] discriminant : 0x10 [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::tag$]
36+
37+ // cdb-command: dx -r2 e,!
38+ // cdb-check:e,! [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>]
39+ // cdb-check: [+0x000] dataful_variant [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::Data]
40+ // cdb-check: [+0x000] my_data : 0x13 [Type: msvc_pretty_enums::CStyleEnum]
41+ // cdb-check: [+0x000] discriminant$ [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::discriminant$]
42+ // cdb-check: [+0x000] discriminant : Tag2 (0x13) [Type: _enum<msvc_pretty_enums::NicheLayoutEnum, 2, 16, Data>::tag$]
43+
44+ // cdb-command: dx -r2 f,!
45+ // cdb-check:f,! [Type: _enum<core::option::Option<u32*>, 1, [...], Some>]
46+ // cdb-check: [+0x000] dataful_variant [Type: _enum<core::option::Option<u32*>, 1, [...], Some>::Some]
47+ // cdb-check: [+0x000] __0 : 0x[...] : 0x1 [Type: unsigned int *]
48+ // cdb-check: [+0x000] discriminant$ [Type: _enum<core::option::Option<u32*>, 1, [...], Some>::discriminant$]
49+ // cdb-check: [+0x000] discriminant : 0x[...] [Type: _enum<core::option::Option<u32*>, 1, [...], Some>::tag$]
50+
51+ // cdb-command: dx -r2 g,!
52+ // cdb-check:g,! [Type: _enum<core::option::Option<u32*>, 1, [...], Some>]
53+ // cdb-check: [+0x000] dataful_variant [Type: _enum<core::option::Option<u32*>, 1, [...], Some>::Some]
54+ // cdb-check: [+0x000] __0 : 0x0 [Type: unsigned int *]
55+ // cdb-check: [+0x000] discriminant$ [Type: _enum<core::option::Option<u32*>, 1, [...], Some>::discriminant$]
56+ // cdb-check: [+0x000] discriminant : None (0x0) [Type: _enum<core::option::Option<u32*>, 1, [...], Some>::tag$]
57+
58+ // cdb-command: dx h
59+ // cdb-check:h : Some [Type: _enum<core::option::Option<u32>>]
60+ // cdb-check: [+0x000] variant$ : Some (0x1) [Type: core::option::Option]
61+ // cdb-check: [+0x004] __0 : 0xc [Type: unsigned int]
62+
63+ // cdb-command: dx i
64+ // cdb-check:i : None [Type: _enum<core::option::Option<u32>>]
65+ // cdb-check: [+0x000] variant$ : None (0x0) [Type: core::option::Option]
66+
67+ // cdb-command: dx j
68+ // cdb-check:j : High (0x10) [Type: msvc_pretty_enums::CStyleEnum]
69+
70+ // cdb-command: dx -r2 k,!
71+ // cdb-check:k,! [Type: _enum<core::option::Option<alloc::string::String>, 1, [...], Some>]
72+ // cdb-check: [+0x000] dataful_variant [Type: _enum<core::option::Option<alloc::string::String>, 1, [...], Some>::Some]
73+ // cdb-check: [+0x000] __0 [Type: alloc::string::String]
74+ // cdb-check: [+0x000] discriminant$ [Type: _enum<core::option::Option<alloc::string::String>, 1, [...], Some>::discriminant$]
75+ // cdb-check: [+0x000] discriminant : 0x[...] [Type: _enum<core::option::Option<alloc::string::String>, 1, [...], Some>::tag$]
76+
77+ pub enum CStyleEnum {
78+ Low = 2 ,
79+ High = 16 ,
80+ }
81+
82+ pub enum NicheLayoutEnum {
83+ Tag1 ,
84+ Data { my_data : CStyleEnum } ,
85+ Tag2 ,
86+ }
87+
88+ fn main ( ) {
89+ let a = Some ( CStyleEnum :: Low ) ;
90+ let b = Option :: < CStyleEnum > :: None ;
91+ let c = NicheLayoutEnum :: Tag1 ;
92+ let d = NicheLayoutEnum :: Data { my_data : CStyleEnum :: High } ;
93+ let e = NicheLayoutEnum :: Tag2 ;
94+ let f = Some ( & 1u32 ) ;
95+ let g = Option :: < & ' static u32 > :: None ;
96+ let h = Some ( 12u32 ) ;
97+ let i = Option :: < u32 > :: None ;
98+ let j = CStyleEnum :: High ;
99+ let k = Some ( "IAMA optional string!" . to_string ( ) ) ;
100+
101+ zzz ( ) ; // #break
102+ }
103+
104+ fn zzz ( ) { ( ) }
0 commit comments