diff options
author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2020-10-20 21:46:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-20 21:46:38 +0200 |
commit | a8a424f4aad4444a89f1d40d97ef9da824f7d015 (patch) | |
tree | 930e510ef4d275a7ce85e72f68ae64741a57aa97 | |
parent | adda858356a4c7059e612977a1563adbdfd940bb (diff) | |
parent | a619865889f97f0539a22a29502481c379f29b09 (diff) | |
download | rust-a8a424f4aad4444a89f1d40d97ef9da824f7d015.tar.gz |
Rollup merge of #78133 - JohnTitor:mir-tests, r=lcnr
Add some MIR-related regression tests
Closes #68841
Closes #75053
Closes #76375
Closes #77911
I think they're fixed by #77306.
-rw-r--r-- | src/test/ui/mir/auxiliary/issue_76375_aux.rs | 14 | ||||
-rw-r--r-- | src/test/ui/mir/issue-68841.rs | 15 | ||||
-rw-r--r-- | src/test/ui/mir/issue-75053.rs | 48 | ||||
-rw-r--r-- | src/test/ui/mir/issue-76375.rs | 15 | ||||
-rw-r--r-- | src/test/ui/mir/issue-77911.rs | 16 |
5 files changed, 108 insertions, 0 deletions
diff --git a/src/test/ui/mir/auxiliary/issue_76375_aux.rs b/src/test/ui/mir/auxiliary/issue_76375_aux.rs new file mode 100644 index 00000000000..f8b318d58ba --- /dev/null +++ b/src/test/ui/mir/auxiliary/issue_76375_aux.rs @@ -0,0 +1,14 @@ +// edition:2018 +// compile-flags: -Z mir-opt-level=2 -Z unsound-mir-opts + +#[inline(always)] +pub fn f(s: bool) -> String { + let a = "Hello world!".to_string(); + let b = a; + let c = b; + if s { + c + } else { + String::new() + } +} diff --git a/src/test/ui/mir/issue-68841.rs b/src/test/ui/mir/issue-68841.rs new file mode 100644 index 00000000000..14884a97fab --- /dev/null +++ b/src/test/ui/mir/issue-68841.rs @@ -0,0 +1,15 @@ +// compile-flags: -Z mir-opt-level=2 +// edition:2018 +// build-pass + +#![feature(async_closure)] + +use std::future::Future; + +fn async_closure() -> impl Future<Output = u8> { + (async move || -> u8 { 42 })() +} + +fn main() { + let _fut = async_closure(); +} diff --git a/src/test/ui/mir/issue-75053.rs b/src/test/ui/mir/issue-75053.rs new file mode 100644 index 00000000000..6e7211c2ee6 --- /dev/null +++ b/src/test/ui/mir/issue-75053.rs @@ -0,0 +1,48 @@ +// compile-flags: -Z mir-opt-level=2 +// build-pass + +#![feature(type_alias_impl_trait)] + +use std::marker::PhantomData; + +trait MyIndex<T> { + type O; + fn my_index(self) -> Self::O; +} +trait MyFrom<T>: Sized { + type Error; + fn my_from(value: T) -> Result<Self, Self::Error>; +} + +trait F {} +impl F for () {} +type DummyT<T> = impl F; +fn _dummy_t<T>() -> DummyT<T> {} + +struct Phantom1<T>(PhantomData<T>); +struct Phantom2<T>(PhantomData<T>); +struct Scope<T>(Phantom2<DummyT<T>>); + +impl<T> Scope<T> { + fn new() -> Self { + unimplemented!() + } +} + +impl<T> MyFrom<Phantom2<T>> for Phantom1<T> { + type Error = (); + fn my_from(_: Phantom2<T>) -> Result<Self, Self::Error> { + unimplemented!() + } +} + +impl<T: MyFrom<Phantom2<DummyT<U>>>, U> MyIndex<Phantom1<T>> for Scope<U> { + type O = T; + fn my_index(self) -> Self::O { + MyFrom::my_from(self.0).ok().unwrap() + } +} + +fn main() { + let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); +} diff --git a/src/test/ui/mir/issue-76375.rs b/src/test/ui/mir/issue-76375.rs new file mode 100644 index 00000000000..ef459f6a28e --- /dev/null +++ b/src/test/ui/mir/issue-76375.rs @@ -0,0 +1,15 @@ +// edition:2018 +// build-pass +// compile-flags: -Z mir-opt-level=2 -L. +// aux-build:issue_76375_aux.rs + +#![crate_type = "lib"] + +extern crate issue_76375_aux; + +pub async fn g() { + issue_76375_aux::f(true); + h().await; +} + +pub async fn h() {} diff --git a/src/test/ui/mir/issue-77911.rs b/src/test/ui/mir/issue-77911.rs new file mode 100644 index 00000000000..b24faa6f885 --- /dev/null +++ b/src/test/ui/mir/issue-77911.rs @@ -0,0 +1,16 @@ +// compile-flags: -Z mir-opt-level=2 +// ignore-cloudabi no std::fs +// build-pass + +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn file_lines() -> impl Iterator<Item = String> { + BufReader::new(File::open("").unwrap()) + .lines() + .map(Result::unwrap) +} + +fn main() { + for _ in file_lines() {} +} |