Skip to content

Commit

Permalink
Describe minicore test auxiliary and directive
Browse files Browse the repository at this point in the history
  • Loading branch information
jieyouxu committed Oct 11, 2024
1 parent 0f568c4 commit 2f2ce28
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
- [Compiletest](./tests/compiletest.md)
- [UI tests](./tests/ui.md)
- [Test directives](./tests/directives.md)
- [Minicore](./tests/minicore.md)
- [Ecosystem testing](./tests/ecosystem.md)
- [Crater](./tests/crater.md)
- [Fuchsia](./tests/fuchsia.md)
Expand Down
6 changes: 6 additions & 0 deletions src/tests/compiletest.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,9 @@ more information.

See also the [assembly tests](#assembly-tests) for a similar set of tests.

If you need to work with `#![no_std]` cross-compiling tests, consult the
[`minicore` test auxiliary](./minicore.md) chapter.

[`tests/codegen`]: https://github.com/rust-lang/rust/tree/master/tests/codegen
[FileCheck]: https://llvm.org/docs/CommandGuide/FileCheck.html

Expand All @@ -303,6 +306,9 @@ information.

See also the [codegen tests](#codegen-tests) for a similar set of tests.

If you need to work with `#![no_std]` cross-compiling tests, consult the
[`minicore` test auxiliary](./minicore.md) chapter.

[`tests/assembly`]: https://github.com/rust-lang/rust/tree/master/tests/assembly


Expand Down
41 changes: 41 additions & 0 deletions src/tests/minicore.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# `minicore` test auxiliary

[`tests/auxiliary/minicore.rs`][`minicore`] is a test auxiliary for
ui/codegen/assembly test suites. It provides `core` stubs for tests that need to
build for cross-compiled targets but do not need/want to run.

A test can use [`minicore`] by specifying the `//@ use-minicore` directive. Then,
mark the test with `#![feature(no_core)]` + `#![no_std]` + `#![no_core]`. Due to
Edition 2015 extern prelude rules, you will probably need to declare `minicore`
as an extern crate.

If you find a `core` item to be missing from the [`minicore`] stub, consider
adding it to the test auxiliary. However, please note that [`minicore`] is only
intended for `core` items, and explicitly not `std` or `alloc` items because
`core` items are applicable to a wider range of tests.

## Example codegen test that uses `minicore`

```rust,no_run
//@ use-minicore
//@ revisions: meow
//@[meow] compile-flags: --target=x86_64-unknown-linux-gnu
//@[meow] needs-llvm-components: x86
#![crate_type = "lib"]
#![feature(no_core)]
#![no_std]
#![no_core]
extern crate minicore;
use minicore::*;
struct Meow;
impl Copy for Meow {} // `Copy` here is provided by `minicore`
// CHECK-LABEL: meow
#[no_mangle]
fn meow() {}
```

[minicore]: https://github.com/rust-lang/rust/tree/master/tests/auxiliary/minicore.rs
3 changes: 3 additions & 0 deletions src/tests/ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ used for many other purposes. For example, tests can also be configured to [run
the resulting program](#controlling-passfail-expectations) to verify its
behavior.

If you need to work with `#![no_std]` cross-compiling tests, consult the
[`minicore` test auxiliary](./minicore.md) chapter.

[`tests/ui`]: https://github.com/rust-lang/rust/blob/master/tests/ui

## General structure of a test
Expand Down

0 comments on commit 2f2ce28

Please sign in to comment.