about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/tools/miri/ci.sh4
-rw-r--r--src/tools/miri/test-cargo-miri/Cargo.toml1
-rw-r--r--src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.lock7
-rw-r--r--src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.toml14
-rw-r--r--src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs34
5 files changed, 60 insertions, 0 deletions
diff --git a/src/tools/miri/ci.sh b/src/tools/miri/ci.sh
index 72b7b791a47..bf9e986bdc7 100755
--- a/src/tools/miri/ci.sh
+++ b/src/tools/miri/ci.sh
@@ -73,6 +73,10 @@ function run_tests_minimal {
   fi
 
   ./miri test -- "$@"
+
+  # Ensure that a small smoke test of cargo-miri works.
+  # Note: This doesn't work on windows because of TLS.
+  cargo miri run --manifest-path test-cargo-miri/no-std-smoke/Cargo.toml
 }
 
 # host
diff --git a/src/tools/miri/test-cargo-miri/Cargo.toml b/src/tools/miri/test-cargo-miri/Cargo.toml
index 5d9e5d143b3..37c996de662 100644
--- a/src/tools/miri/test-cargo-miri/Cargo.toml
+++ b/src/tools/miri/test-cargo-miri/Cargo.toml
@@ -1,5 +1,6 @@
 [workspace]
 members = ["subcrate", "issue-1567", "exported-symbol-dep"]
+exclude = ["no-std-smoke"] # it wants to be panic="abort"
 
 [package]
 name = "cargo-miri-test"
diff --git a/src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.lock b/src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.lock
new file mode 100644
index 00000000000..b92a05fccf8
--- /dev/null
+++ b/src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "no-std-smoke"
+version = "0.1.0"
diff --git a/src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.toml b/src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.toml
new file mode 100644
index 00000000000..3a056bedaa0
--- /dev/null
+++ b/src/tools/miri/test-cargo-miri/no-std-smoke/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "no-std-smoke"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+
+[profile.dev]
+panic = 'abort'
+
+[profile.release]
+panic = 'abort'
diff --git a/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs b/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs
new file mode 100644
index 00000000000..3a207b7d50a
--- /dev/null
+++ b/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs
@@ -0,0 +1,34 @@
+// Copied from tests/pass/no-std.rs
+
+#![feature(start)]
+#![no_std]
+
+// Plumbing to let us use `writeln!` to host stdout:
+
+extern "Rust" {
+    fn miri_write_to_stdout(bytes: &[u8]);
+}
+
+struct Host;
+
+use core::fmt::Write;
+
+impl Write for Host {
+    fn write_str(&mut self, s: &str) -> core::fmt::Result {
+        unsafe {
+            miri_write_to_stdout(s.as_bytes());
+        }
+        Ok(())
+    }
+}
+
+#[start]
+fn start(_: isize, _: *const *const u8) -> isize {
+    writeln!(Host, "hello, world!").unwrap();
+    0
+}
+
+#[panic_handler]
+fn panic_handler(_: &core::panic::PanicInfo) -> ! {
+    loop {}
+}