Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

minicore テスト補助: core スタブの使用

tests/auxiliary/minicore.rs は、ui/codegen/assembly/mir-opt テストスイート用のテスト補助です。 これは、クロスコンパイルされたターゲット向けにビルドする必要があるものの、 実行する必要がない、または実行したくないテストのために core スタブを提供します。

minicorecore 項目のみを対象としており、明示的に stdalloc 項目は対象外であることに注意してください。これは、core 項目のほうがより幅広いテストに適用できるためです。

テストでは、//@ add-minicore ディレクティブを指定することで minicore を使用できます。 次に、そのテストに #![feature(no_core)] + #![no_std] + #![no_core] を付け、 extern crate minicore(edition 2015) または use minicore(edition 2018+)でそのクレートをテストにインポートします。

暗黙的に指定されるコンパイラフラグ

これらのテストは no_std + no_core であるため、//@ add-minicore は そのテストが -C panic=abort でビルドされることを暗黙的に指定し、かつ必須とします。 アンワインドするパニックはサポートされていません。

アセンブリテストで CFI ディレクティブを保持するため、テストは -C force-unwind-tables=yes でもビルドされます。

TL;DR: //@ add-minicore は 2 つのコンパイラフラグを暗黙的に指定します。

  1. -C panic=abort
  2. -C force-unwind-tables=yes

core スタブをさらに追加する

minicore スタブに core 項目が不足していることに気付いた場合、 それが使用される可能性が高い、または既に複数のテストで必要とされているなら、 テスト補助に追加することを検討してください。

core との同期を保つ

minicore の項目は core に追随して最新の状態に保つ必要があります。 coreminicore の使用時で診断出力の一貫性を保つため、あらゆる diagnostic 属性(例: on_unimplemented)は minicore に正確に複製するべきです。

minicore を使用する codegen テストの例

#![allow(unused)]
fn main() {
//@ add-minicore
//@ revisions: meow bark
//@[meow] compile-flags: --target=x86_64-unknown-linux-gnu
//@[meow] needs-llvm-components: x86
//@[bark] compile-flags: --target=wasm32-unknown-unknown
//@[bark] needs-llvm-components: webassembly

#![crate_type = "lib"]
#![feature(no_core)]
#![no_std]
#![no_core]

extern crate minicore;
use minicore::*;

struct Meow;
impl Copy for Meow {} // ここでの `Copy` は `minicore` によって提供されます

// CHECK-LABEL: meow
#[unsafe(no_mangle)]
fn meow() {}
}