]> git.lizzy.rs Git - rust.git/blob - src/test/ui/layout/issue-96158-scalarpair-payload-might-be-uninit.rs
Rollup merge of #98640 - cuviper:stable-rust-analyzer, r=Mark-Simulacrum
[rust.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 }