Skip to content

Commit

Permalink
Rollup merge of rust-lang#68236 - JohnTitor:ice-tests, r=Centril
Browse files Browse the repository at this point in the history
Add some regression tests

Closes rust-lang#64848 (fixed by rust-lang#67631)
Closes rust-lang#65918 (ICE is hidden by rust-lang#67000, no longer ICE)
Closes rust-lang#66473 (fixed by rust-lang#68084)
Closes rust-lang#67550 (set mir-opt-level to 3)

r? @Centril
  • Loading branch information
Dylan-DPC committed Jan 15, 2020
2 parents 6270e49 + 3ba15bd commit 2039d7e
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/test/mir-opt/inline/inline-into-box-place.rs
@@ -1,5 +1,6 @@
// ignore-tidy-linelength
// ignore-wasm32-bare compiled with panic=abort by default
// compile-flags: -Z mir-opt-level=3
#![feature(box_syntax)]

fn main() {
Expand Down
29 changes: 29 additions & 0 deletions src/test/ui/associated-types/issue-64848.rs
@@ -0,0 +1,29 @@
// build-pass

trait AssociatedConstant {
const DATA: ();
}

impl<F, T> AssociatedConstant for F
where
F: FnOnce() -> T,
T: AssociatedConstant,
{
const DATA: () = T::DATA;
}

impl AssociatedConstant for () {
const DATA: () = ();
}

fn foo() -> impl AssociatedConstant {
()
}

fn get_data<T: AssociatedConstant>(_: T) -> &'static () {
&T::DATA
}

fn main() {
get_data(foo);
}
Binary file added src/test/ui/issues/issue-66473.rs
Binary file not shown.
Binary file added src/test/ui/issues/issue-66473.stderr
Binary file not shown.
49 changes: 49 additions & 0 deletions src/test/ui/type-alias-impl-trait/issue-65918.rs
@@ -0,0 +1,49 @@
// build-pass

#![feature(type_alias_impl_trait)]

use std::marker::PhantomData;

/* copied Index and TryFrom for convinience (and simplicity) */
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>;
}

/* MCVE starts here */
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();
}

0 comments on commit 2039d7e

Please sign in to comment.