From 644e40f536840d3bab28cab985a034eabbf707d4 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 14 May 2023 13:27:07 +0000 Subject: Do not assume anything about repeated reification of generic functions. --- src/tools/miri/tests/pass/function_pointers.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'src/tools') diff --git a/src/tools/miri/tests/pass/function_pointers.rs b/src/tools/miri/tests/pass/function_pointers.rs index b66826e3fcd..593012ca45b 100644 --- a/src/tools/miri/tests/pass/function_pointers.rs +++ b/src/tools/miri/tests/pass/function_pointers.rs @@ -75,7 +75,6 @@ fn main() { let g = f as fn() -> i32; assert!(return_fn_ptr(g) == g); assert!(return_fn_ptr(g) as unsafe fn() -> i32 == g as fn() -> i32 as unsafe fn() -> i32); - assert!(return_fn_ptr(f) != f); // Any non-null value is okay for function pointers. unsafe { -- cgit 1.4.1-3-g733a5 From 6dfa05369767d7c079618d93d8bab53415721f65 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 14 May 2023 20:31:02 +0000 Subject: Complete miri test. --- src/tools/miri/tests/pass/function_pointers.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/tools') diff --git a/src/tools/miri/tests/pass/function_pointers.rs b/src/tools/miri/tests/pass/function_pointers.rs index 593012ca45b..1c99a96feda 100644 --- a/src/tools/miri/tests/pass/function_pointers.rs +++ b/src/tools/miri/tests/pass/function_pointers.rs @@ -23,6 +23,10 @@ fn h(i: i32, j: i32) -> i32 { j * i * 7 } +fn i() -> i32 { + 73 +} + fn return_fn_ptr(f: fn() -> i32) -> fn() -> i32 { f } @@ -72,9 +76,18 @@ fn main() { assert_eq!(indirect3(h), 210); assert_eq!(indirect_mut3(h), 210); assert_eq!(indirect_once3(h), 210); - let g = f as fn() -> i32; - assert!(return_fn_ptr(g) == g); - assert!(return_fn_ptr(g) as unsafe fn() -> i32 == g as fn() -> i32 as unsafe fn() -> i32); + // Check that `i` always has the same address. This is not guaranteed + // but Miri currently uses a fixed address for monomorphic functions. + assert!(return_fn_ptr(i) == i); + assert!(return_fn_ptr(i) as unsafe fn() -> i32 == i as fn() -> i32 as unsafe fn() -> i32); + // We don't check anything for `f`. Miri gives it many different addresses + // but mir-opts can turn them into the same address. + let _val = return_fn_ptr(f) != f; + // However, if we only turn `f` into a function pointer and use that pointer, + // it is equal to itself. + let f2 = f as fn() -> i32; + assert!(return_fn_ptr(f2) == f2); + assert!(return_fn_ptr(f2) as unsafe fn() -> i32 == f2 as fn() -> i32 as unsafe fn() -> i32); // Any non-null value is okay for function pointers. unsafe { -- cgit 1.4.1-3-g733a5 From 3b091cb5044ecc956a87993870276311a0e15340 Mon Sep 17 00:00:00 2001 From: The Miri Conjob Bot Date: Thu, 28 Sep 2023 05:11:51 +0000 Subject: Preparing for merge from rustc --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/tools') diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index 3f1babf5323..07dd52ce941 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -d206f2c0857eb879877f27508139dd62a40294c3 +2ba4eb2d49e774b5fbc2a06258ac7b0f60b92b7e -- cgit 1.4.1-3-g733a5