about summary refs log tree commit diff
path: root/tests/ui/consts/const-eval/ptr-to-int-transmute-in-consts-issue-87525.rs
blob: 5fab075785aab92f44ff9aa89ee0f43d77291cb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#![deny(ptr_to_integer_transmute_in_consts)]

const fn foo(ptr: *const u8) -> usize {
    unsafe {
        std::mem::transmute(ptr)
        //~^ ERROR pointers cannot be transmuted to integers
    }
}

trait Human {
    const ID: usize = {
        let value = 10;
        let ptr: *const usize = &value;
        unsafe {
            std::mem::transmute(ptr)
            //~^ ERROR pointers cannot be transmuted to integers
        }
    };

    fn id_plus_one() -> usize {
        Self::ID + 1
    }
}

struct Type<T>(T);

impl<T> Type<T> {
    const ID: usize = {
        let value = 10;
        let ptr: *const usize = &value;
        unsafe {
            std::mem::transmute(ptr)
            //~^ ERROR pointers cannot be transmuted to integers
        }
    };

    fn id_plus_one() -> usize {
        Self::ID + 1
    }
}

fn control(ptr: *const u8) -> usize {
    unsafe { std::mem::transmute(ptr) }
}

struct ControlStruct;

impl ControlStruct {
    fn new() -> usize {
        let value = 10;
        let ptr: *const i32 = &value;
        unsafe { std::mem::transmute(ptr) }
    }
}

const fn zoom(ptr: *const u8) -> usize {
    unsafe {
        std::mem::transmute(ptr)
        //~^ ERROR pointers cannot be transmuted to integers
    }
}

fn main() {}