]> git.proxmox.com Git - rustc.git/blob - src/test/ui/layout/issue-96158-scalarpair-payload-might-be-uninit.rs
New upstream version 1.62.1+dfsg1
[rustc.git] / src / test / ui / layout / issue-96158-scalarpair-payload-might-be-uninit.rs
1 // normalize-stderr-test "pref: Align\([1-8] bytes\)" -> "pref: $$PREF_ALIGN"
2 #![crate_type = "lib"]
3 #![feature(rustc_attrs)]
4
5 use std::mem::MaybeUninit;
6
7 enum HasNiche {
8 A,
9 B,
10 C,
11 }
12
13 // This should result in ScalarPair(Initialized, Union),
14 // since the u8 payload will be uninit for `None`.
15 #[rustc_layout(debug)]
16 pub enum MissingPayloadField { //~ ERROR: layout_of
17 Some(u8),
18 None
19 }
20
21 // This should result in ScalarPair(Initialized, Initialized),
22 // since the u8 field is present in all variants,
23 // and hence will always be initialized.
24 #[rustc_layout(debug)]
25 pub enum CommonPayloadField { //~ ERROR: layout_of
26 A(u8),
27 B(u8),
28 }
29
30 // This should result in ScalarPair(Initialized, Union),
31 // since, though a u8-sized field is present in all variants, it might be uninit.
32 #[rustc_layout(debug)]
33 pub enum CommonPayloadFieldIsMaybeUninit { //~ ERROR: layout_of
34 A(u8),
35 B(MaybeUninit<u8>),
36 }
37
38 // This should result in ScalarPair(Initialized, Union),
39 // since only the niche field (used for the tag) is guaranteed to be initialized.
40 #[rustc_layout(debug)]
41 pub enum NicheFirst { //~ ERROR: layout_of
42 A(HasNiche, u8),
43 B,
44 C
45 }
46
47 // This should result in ScalarPair(Union, Initialized),
48 // since only the niche field (used for the tag) is guaranteed to be initialized.
49 #[rustc_layout(debug)]
50 pub enum NicheSecond { //~ ERROR: layout_of
51 A(u8, HasNiche),
52 B,
53 C,
54 }