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/코드 생성/assembly/mir-opt 테스트 스위트를 위한 테스트 보조 파일입니다. 이 파일은 크로스 컴파일 대상용으로 빌드해야 하지만 실행할 필요가 없거나 실행하지 않으려는 테스트를 위해 core 스텁을 제공합니다.

minicore는 core 항목만을 위한 것이며, std나 alloc 항목은 명시적으로 대상이 아니라는 점에 유의하십시오. core 항목이 더 넓은 범위의 테스트에 적용될 수 있기 때문입니다.

테스트에서 //@ add-minicore 지시문을 지정하면 minicore를 사용할 수 있습니다. 그런 다음 테스트에 #![feature(no_core)] + #![no_std] + #![no_core]를 표시하고, extern crate minicore(2015 에디션) 또는 use minicore(2018+ 에디션)로 크레이트를 테스트에 가져오십시오.

암시되는 컴파일러 플래그

이 테스트들은 no_std + no_core 특성을 가지므로, //@ add-minicore는 테스트가 -C panic=abort로 빌드된다는 것을 암시하며 또한 그렇게 빌드되어야 함을 요구합니다. 언와인딩 패닉은 지원되지 않습니다.

또한 어셈블리 테스트에서 CFI 지시문을 보존하기 위해 테스트는 -C force-unwind-tables=yes로도 빌드됩니다.

요약: //@ add-minicore는 다음 두 가지 컴파일러 플래그를 암시합니다.

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

core 스텁 더 추가하기

minicore 스텁에 빠진 core 항목을 발견했다면, 그 항목이 사용될 가능성이 높거나 이미 둘 이상의 테스트에서 필요한 경우 테스트 보조 파일에 추가하는 것을 고려하십시오.

core와 동기화 유지하기

minicore 항목은 core에 맞추어 최신 상태로 유지해야 합니다. core를 사용할 때와 minicore를 사용할 때 진단 출력이 일관되도록, 모든 diagnostic 속성(예: on_unimplemented)을 minicore에 그대로 복제해야 합니다.

minicore를 사용하는 코드 생성 테스트 예시

#![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` here is provided by `minicore`

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