]> git.lizzy.rs Git - rust.git/blob - src/test/ui/const-generics/min_const_generics/invalid-patterns.rs
Add tests for `#[no_mangle]` in `impl` blocks that looks like generic `impl` blocks...
[rust.git] / src / test / ui / const-generics / min_const_generics / invalid-patterns.rs
1 // stderr-per-bitwidth
2 use std::mem::transmute;
3
4 fn get_flag<const FlagSet: bool, const ShortName: char>() -> Option<char> {
5   if FlagSet {
6     Some(ShortName)
7   } else {
8     None
9   }
10 }
11
12 union CharRaw {
13   byte: u8,
14   character: char,
15 }
16
17 union BoolRaw {
18   byte: u8,
19   boolean: bool,
20 }
21
22 const char_raw: CharRaw = CharRaw { byte: 0xFF };
23 const bool_raw: BoolRaw = BoolRaw { byte: 0x42 };
24
25 fn main() {
26   // Test that basic cases don't work
27   assert!(get_flag::<true, 'c'>().is_some());
28   assert!(get_flag::<false, 'x'>().is_none());
29   get_flag::<false, 0xFF>();
30   //~^ ERROR mismatched types
31   get_flag::<7, 'c'>();
32   //~^ ERROR mismatched types
33   get_flag::<42, 0x5ad>();
34   //~^ ERROR mismatched types
35   //~| ERROR mismatched types
36
37
38   get_flag::<false, { unsafe { char_raw.character } }>();
39   //~^ ERROR it is undefined behavior
40   get_flag::<{ unsafe { bool_raw.boolean } }, 'z'>();
41   //~^ ERROR it is undefined behavior
42   get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character } }>();
43   //~^ ERROR it is undefined behavior
44   //~| ERROR it is undefined behavior
45 }