mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
Rollup merge of #131355 - clubby789:old-tests, r=jieyouxu
Add tests for some old fixed issues Closes #30867 Closes #30472 Closes #28994 Closes #26719 (and migrates the relevant test to the new run-make) Closes #23600 cc `@jieyouxu` for the run-make-support changes try-job: x86_64-msvc
This commit is contained in:
commit
cc5a24caf6
@ -70,6 +70,30 @@ macro_rules! impl_common_helpers {
|
||||
self
|
||||
}
|
||||
|
||||
/// Configuration for the child process’s standard input (stdin) handle.
|
||||
///
|
||||
/// See [`std::process::Command::stdin`].
|
||||
pub fn stdin<T: Into<::std::process::Stdio>>(&mut self, cfg: T) -> &mut Self {
|
||||
self.cmd.stdin(cfg);
|
||||
self
|
||||
}
|
||||
|
||||
/// Configuration for the child process’s standard output (stdout) handle.
|
||||
///
|
||||
/// See [`std::process::Command::stdout`].
|
||||
pub fn stdout<T: Into<::std::process::Stdio>>(&mut self, cfg: T) -> &mut Self {
|
||||
self.cmd.stdout(cfg);
|
||||
self
|
||||
}
|
||||
|
||||
/// Configuration for the child process’s standard error (stderr) handle.
|
||||
///
|
||||
/// See [`std::process::Command::stderr`].
|
||||
pub fn stderr<T: Into<::std::process::Stdio>>(&mut self, cfg: T) -> &mut Self {
|
||||
self.cmd.stderr(cfg);
|
||||
self
|
||||
}
|
||||
|
||||
/// Inspect what the underlying [`Command`] is up to the
|
||||
/// current construction.
|
||||
pub fn inspect<I>(&mut self, inspector: I) -> &mut Self
|
||||
|
@ -1,6 +1,5 @@
|
||||
run-make/branch-protection-check-IBT/Makefile
|
||||
run-make/cat-and-grep-sanity-check/Makefile
|
||||
run-make/emit-to-stdout/Makefile
|
||||
run-make/extern-fn-reachable/Makefile
|
||||
run-make/incr-add-rust-src-component/Makefile
|
||||
run-make/issue-84395-lto-embed-bitcode/Makefile
|
||||
|
@ -802,7 +802,6 @@ ui/consts/issue-70942-trait-vs-impl-mismatch.rs
|
||||
ui/consts/issue-73976-monomorphic.rs
|
||||
ui/consts/issue-73976-polymorphic.rs
|
||||
ui/consts/issue-76064.rs
|
||||
ui/consts/issue-77062-large-zst-array.rs
|
||||
ui/consts/issue-78655.rs
|
||||
ui/consts/issue-79137-monomorphic.rs
|
||||
ui/consts/issue-79137-toogeneric.rs
|
||||
|
@ -1,51 +0,0 @@
|
||||
include ../tools.mk
|
||||
|
||||
SRC=test.rs
|
||||
OUT=$(TMPDIR)/out
|
||||
|
||||
all: asm llvm-ir dep-info mir llvm-bc obj metadata link multiple-types multiple-types-option-o
|
||||
|
||||
asm: $(OUT)
|
||||
$(RUSTC) --emit asm=$(OUT)/$@ $(SRC)
|
||||
$(RUSTC) --emit asm=- $(SRC) | diff - $(OUT)/$@
|
||||
llvm-ir: $(OUT)
|
||||
$(RUSTC) --emit llvm-ir=$(OUT)/$@ $(SRC)
|
||||
$(RUSTC) --emit llvm-ir=- $(SRC) | diff - $(OUT)/$@
|
||||
dep-info: $(OUT)
|
||||
$(RUSTC) -Z dep-info-omit-d-target=yes --emit dep-info=$(OUT)/$@ $(SRC)
|
||||
$(RUSTC) --emit dep-info=- $(SRC) | diff - $(OUT)/$@
|
||||
mir: $(OUT)
|
||||
$(RUSTC) --emit mir=$(OUT)/$@ $(SRC)
|
||||
$(RUSTC) --emit mir=- $(SRC) | diff - $(OUT)/$@
|
||||
|
||||
llvm-bc: $(OUT)
|
||||
$(RUSTC) --emit llvm-bc=- $(SRC) 1>/dev/ptmx 2>$(OUT)/$@ || true
|
||||
diff $(OUT)/$@ emit-llvm-bc.stderr
|
||||
obj: $(OUT)
|
||||
$(RUSTC) --emit obj=- $(SRC) 1>/dev/ptmx 2>$(OUT)/$@ || true
|
||||
diff $(OUT)/$@ emit-obj.stderr
|
||||
|
||||
# For metadata output, a temporary directory will be created to hold the temporary
|
||||
# metadata file. But when output is stdout, the temporary directory will be located
|
||||
# in the same place as $(SRC), which is mounted as read-only in the tests. Thus as
|
||||
# a workaround, $(SRC) is copied to the test output directory $(OUT) and we compile
|
||||
# it there.
|
||||
metadata: $(OUT)
|
||||
cp $(SRC) $(OUT)
|
||||
(cd $(OUT); $(RUSTC) --emit metadata=- $(SRC) 1>/dev/ptmx 2>$(OUT)/$@ || true)
|
||||
diff $(OUT)/$@ emit-metadata.stderr
|
||||
|
||||
link: $(OUT)
|
||||
$(RUSTC) --emit link=- $(SRC) 1>/dev/ptmx 2>$(OUT)/$@ || true
|
||||
diff $(OUT)/$@ emit-link.stderr
|
||||
|
||||
multiple-types: $(OUT)
|
||||
$(RUSTC) --emit asm=- --emit llvm-ir=- --emit dep-info=- --emit mir=- $(SRC) 2>$(OUT)/$@ || true
|
||||
diff $(OUT)/$@ emit-multiple-types.stderr
|
||||
|
||||
multiple-types-option-o: $(OUT)
|
||||
$(RUSTC) -o - --emit asm,llvm-ir,dep-info,mir $(SRC) 2>$(OUT)/$@ || true
|
||||
diff $(OUT)/$@ emit-multiple-types.stderr
|
||||
|
||||
$(OUT):
|
||||
mkdir -p $(OUT)
|
73
tests/run-make/emit-to-stdout/rmake.rs
Normal file
73
tests/run-make/emit-to-stdout/rmake.rs
Normal file
@ -0,0 +1,73 @@
|
||||
//! If `-o -` or `--emit KIND=-` is provided, output should be written to stdout
|
||||
//! instead. Binary output (`obj`, `llvm-bc`, `link` and `metadata`)
|
||||
//! being written this way will result in an error if stdout is a tty.
|
||||
//! Multiple output types going to stdout will trigger an error too,
|
||||
//! as they would all be mixed together.
|
||||
//!
|
||||
//! See <https://github.com/rust-lang/rust/pull/111626>.
|
||||
|
||||
use std::fs::File;
|
||||
|
||||
use run_make_support::{diff, run_in_tmpdir, rustc};
|
||||
|
||||
// Test emitting text outputs to stdout works correctly
|
||||
fn run_diff(name: &str, file_args: &[&str]) {
|
||||
rustc().emit(format!("{name}={name}")).input("test.rs").args(file_args).run();
|
||||
let out = rustc().emit(format!("{name}=-")).input("test.rs").run().stdout_utf8();
|
||||
diff().expected_file(name).actual_text("stdout", &out).run();
|
||||
}
|
||||
|
||||
// Test that emitting binary formats to a terminal gives the correct error
|
||||
fn run_terminal_err_diff(name: &str) {
|
||||
#[cfg(not(windows))]
|
||||
let terminal = File::create("/dev/ptmx").unwrap();
|
||||
// FIXME: If this test fails and the compiler does print to the console,
|
||||
// then this will produce a lot of output.
|
||||
// We should spawn a new console instead to print stdout.
|
||||
#[cfg(windows)]
|
||||
let terminal = File::options().read(true).write(true).open(r"\\.\CONOUT$").unwrap();
|
||||
|
||||
let err = File::create(name).unwrap();
|
||||
rustc().emit(format!("{name}=-")).input("test.rs").stdout(terminal).stderr(err).run_fail();
|
||||
diff().expected_file(format!("emit-{name}.stderr")).actual_file(name).run();
|
||||
}
|
||||
|
||||
fn main() {
|
||||
run_in_tmpdir(|| {
|
||||
run_diff("asm", &[]);
|
||||
run_diff("llvm-ir", &[]);
|
||||
run_diff("dep-info", &["-Zdep-info-omit-d-target=yes"]);
|
||||
run_diff("mir", &[]);
|
||||
|
||||
run_terminal_err_diff("llvm-bc");
|
||||
run_terminal_err_diff("obj");
|
||||
run_terminal_err_diff("metadata");
|
||||
run_terminal_err_diff("link");
|
||||
|
||||
// Test error for emitting multiple types to stdout
|
||||
rustc()
|
||||
.input("test.rs")
|
||||
.emit("asm=-")
|
||||
.emit("llvm-ir=-")
|
||||
.emit("dep-info=-")
|
||||
.emit("mir=-")
|
||||
.stderr(File::create("multiple-types").unwrap())
|
||||
.run_fail();
|
||||
diff().expected_file("emit-multiple-types.stderr").actual_file("multiple-types").run();
|
||||
|
||||
// Same as above, but using `-o`
|
||||
rustc()
|
||||
.input("test.rs")
|
||||
.output("-")
|
||||
.emit("asm,llvm-ir,dep-info,mir")
|
||||
.stderr(File::create("multiple-types-option-o").unwrap())
|
||||
.run_fail();
|
||||
diff()
|
||||
.expected_file("emit-multiple-types.stderr")
|
||||
.actual_file("multiple-types-option-o")
|
||||
.run();
|
||||
|
||||
// Test that `-o -` redirected to a file works correctly (#26719)
|
||||
rustc().input("test.rs").output("-").stdout(File::create("out-stdout").unwrap()).run();
|
||||
});
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
//@ build-pass
|
||||
pub static FOO: [(); usize::MAX] = [(); usize::MAX];
|
||||
|
||||
fn main() {
|
||||
let _ = &[(); usize::MAX];
|
32
tests/ui/traits/assoc-type-hrtb-normalization-30472.rs
Normal file
32
tests/ui/traits/assoc-type-hrtb-normalization-30472.rs
Normal file
@ -0,0 +1,32 @@
|
||||
//@ check-pass
|
||||
//! Tests that associated type projections normalize properly in the presence of HRTBs.
|
||||
//! Original issue: <https://github.com/rust-lang/rust/issues/30472>
|
||||
|
||||
|
||||
pub trait MyFrom<T> {}
|
||||
impl<T> MyFrom<T> for T {}
|
||||
|
||||
pub trait MyInto<T> {}
|
||||
impl<T, U> MyInto<U> for T where U: MyFrom<T> {}
|
||||
|
||||
|
||||
pub trait A<'self_> {
|
||||
type T;
|
||||
}
|
||||
pub trait B: for<'self_> A<'self_> {
|
||||
// Originally caused the `type U = usize` example below to fail with a type mismatch error
|
||||
type U: for<'self_> MyFrom<<Self as A<'self_>>::T>;
|
||||
}
|
||||
|
||||
|
||||
pub struct M;
|
||||
impl<'self_> A<'self_> for M {
|
||||
type T = usize;
|
||||
}
|
||||
|
||||
impl B for M {
|
||||
type U = usize;
|
||||
}
|
||||
|
||||
|
||||
fn main() {}
|
22
tests/ui/traits/fn-pointer/hrtb-assoc-fn-traits-28994.rs
Normal file
22
tests/ui/traits/fn-pointer/hrtb-assoc-fn-traits-28994.rs
Normal file
@ -0,0 +1,22 @@
|
||||
//@ check-pass
|
||||
//! Tests that a HRTB + FnOnce bound involving an associated type don't prevent
|
||||
//! a function pointer from implementing `Fn` traits.
|
||||
//! Test for <https://github.com/rust-lang/rust/issues/28994>
|
||||
|
||||
trait LifetimeToType<'a> {
|
||||
type Out;
|
||||
}
|
||||
|
||||
impl<'a> LifetimeToType<'a> for () {
|
||||
type Out = &'a ();
|
||||
}
|
||||
|
||||
fn id<'a>(val: &'a ()) -> <() as LifetimeToType<'a>>::Out {
|
||||
val
|
||||
}
|
||||
|
||||
fn assert_fn<F: for<'a> FnOnce(&'a ()) -> <() as LifetimeToType<'a>>::Out>(_func: F) { }
|
||||
|
||||
fn main() {
|
||||
assert_fn(id);
|
||||
}
|
14
tests/ui/traits/hrtb-related-type-params-30867.rs
Normal file
14
tests/ui/traits/hrtb-related-type-params-30867.rs
Normal file
@ -0,0 +1,14 @@
|
||||
//@ check-pass
|
||||
//! Tests that HRTB impl selection covers type parameters not directly related
|
||||
//! to the trait.
|
||||
//! Test for <https://github.com/rust-lang/rust/issues/30867>
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
trait Unary<T> {}
|
||||
impl<T, U, F: Fn(T) -> U> Unary<T> for F {}
|
||||
fn unary<F: for<'a> Unary<&'a T>, T>() {}
|
||||
|
||||
pub fn test<F: for<'a> Fn(&'a i32) -> &'a i32>() {
|
||||
unary::<F, i32>()
|
||||
}
|
Loading…
Reference in New Issue
Block a user