summaryrefslogtreecommitdiffstats
path: root/tests/ui/issues/issue-39827.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /tests/ui/issues/issue-39827.rs
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/issues/issue-39827.rs')
-rw-r--r--tests/ui/issues/issue-39827.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/ui/issues/issue-39827.rs b/tests/ui/issues/issue-39827.rs
new file mode 100644
index 000000000..782c668c8
--- /dev/null
+++ b/tests/ui/issues/issue-39827.rs
@@ -0,0 +1,34 @@
+// run-pass
+#![feature(core_intrinsics)]
+
+use std::intrinsics::{ volatile_copy_memory, volatile_store, volatile_load,
+ volatile_copy_nonoverlapping_memory,
+ volatile_set_memory };
+
+//
+// This test ensures that volatile intrinsics can be specialised with
+// zero-sized types and, in case of copy/set functions, can accept
+// number of elements equal to zero.
+//
+fn main () {
+ let mut dst_pair = (1, 2);
+ let src_pair = (3, 4);
+ let mut dst_empty = ();
+ let src_empty = ();
+
+ const COUNT_0: usize = 0;
+ const COUNT_100: usize = 100;
+
+ unsafe {
+ volatile_copy_memory(&mut dst_pair, &dst_pair, COUNT_0);
+ volatile_copy_nonoverlapping_memory(&mut dst_pair, &src_pair, 0);
+ volatile_copy_memory(&mut dst_empty, &dst_empty, 100);
+ volatile_copy_nonoverlapping_memory(&mut dst_empty, &src_empty,
+ COUNT_100);
+ volatile_set_memory(&mut dst_empty, 0, COUNT_100);
+ volatile_set_memory(&mut dst_pair, 0, COUNT_0);
+ volatile_store(&mut dst_empty, ());
+ volatile_store(&mut dst_empty, src_empty);
+ volatile_load(&src_empty);
+ }
+}