This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +73
-0
lines changed
tests/ui/type/pattern_types Expand file tree Collapse file tree 2 files changed +73
-0
lines changed Original file line number Diff line number Diff line change 1+ #![ feature( pattern_types) ]
2+ #![ feature( pattern_type_macro) ]
3+
4+ use std:: pat:: pattern_type;
5+
6+ // ok
7+ fn create < const S : u32 , const E : u32 > ( x : u32 ) -> pattern_type ! ( u32 is S ..=E ) {
8+ unsafe { std:: mem:: transmute ( x) }
9+ //~^ ERROR types of different sizes
10+ }
11+
12+ // ok
13+ fn unwrap < const S : u32 , const E : u32 > ( x : pattern_type ! ( u32 is S ..=E ) ) -> u32 {
14+ unsafe { std:: mem:: transmute ( x) }
15+ //~^ ERROR types of different sizes
16+ }
17+
18+ // bad, only when S != u32::MIN or E != u32::MAX will this ok
19+ fn non_base_ty_transmute < const S : u32 , const E : u32 > (
20+ x : Option < pattern_type ! ( u32 is S ..=E ) > ,
21+ ) -> u32 {
22+ unsafe { std:: mem:: transmute ( x) }
23+ //~^ ERROR types of different sizes
24+ }
25+
26+ // bad, only when S = u32::MIN and E = u32::MAX will this ok
27+ fn wrapped_transmute < const S : u32 , const E : u32 > (
28+ x : Option < pattern_type ! ( u32 is S ..=E ) > ,
29+ ) -> Option < u32 > {
30+ unsafe { std:: mem:: transmute ( x) }
31+ //~^ ERROR types of different sizes
32+ }
33+
34+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
2+ --> $DIR/transmute.rs:8:14
3+ |
4+ LL | unsafe { std::mem::transmute(x) }
5+ | ^^^^^^^^^^^^^^^^^^^
6+ |
7+ = note: source type: `u32` (32 bits)
8+ = note: target type: `(u32) is S..=E` (size can vary because of u32)
9+
10+ error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
11+ --> $DIR/transmute.rs:14:14
12+ |
13+ LL | unsafe { std::mem::transmute(x) }
14+ | ^^^^^^^^^^^^^^^^^^^
15+ |
16+ = note: source type: `(u32) is S..=E` (size can vary because of u32)
17+ = note: target type: `u32` (32 bits)
18+
19+ error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
20+ --> $DIR/transmute.rs:22:14
21+ |
22+ LL | unsafe { std::mem::transmute(x) }
23+ | ^^^^^^^^^^^^^^^^^^^
24+ |
25+ = note: source type: `Option<(u32) is S..=E>` (size can vary because of u32)
26+ = note: target type: `u32` (32 bits)
27+
28+ error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
29+ --> $DIR/transmute.rs:30:14
30+ |
31+ LL | unsafe { std::mem::transmute(x) }
32+ | ^^^^^^^^^^^^^^^^^^^
33+ |
34+ = note: source type: `Option<(u32) is S..=E>` (size can vary because of u32)
35+ = note: target type: `Option<u32>` (64 bits)
36+
37+ error: aborting due to 4 previous errors
38+
39+ For more information about this error, try `rustc --explain E0512`.
You can’t perform that action at this time.
0 commit comments