Change:
Minimal example:
can you reproduce?
I can try, this is from Mar 2nd so not related to my recent changes right?
yes it fails for me with both stable rust 1.25 and the latest nightly rustc 1.27.0-nightly ( 2018-04-11). It's not failing in a part of typeck that I'm familiar with but I'll have a look sometime and see if it makes any sense to me.
Yes this is unrelated to that PR (I think there isn't a nightly including it yet). But since this is related to I thought you might want to take a look.
I started expanding the minimal example so that it didn't depend on nalgebra, it has expanded into quite a lot of code This example is enough to break the compiler but doesn't compile if the ICE is fixed (e.g. if the is commented out). For it to compile it still needs some external dependencies. It appears to be the associated type that is hitting the ICE.
Yeah 's example is huge. Maybe he doesn't know that minimal examples should have no dependencies. if you don't provide minimal examples in bug reports (that is: no dependencies; they should compile in the play ground) they'll take much longer than necessary to fix.
I understand. I'm a relative beginner to rust, so it would take quite a lot of time for me to figure out how to make a more minimal example. I am able to work around this issue in my own code, so it's not that important to me, but I figured it might be easy for someone more experienced to spot what was going wrong. If you don't think it's worth the effort to investigate further, I have no problem with you closing this until a more simple manifestation is discovered.
I've reduced it to the following ():
It's no longer reproduced an ICE on the latest nightly, it seems from 1.38.0. marked as E-needstest

Discussion:
<ins> trait Bar { const X: usize; fn return_n(&self) -> [u8; Bar::X]; //~ ERROR: type annotations needed } impl dyn Bar {} //~ ERROR: the trait `Bar` cannot be made into an object fn main() {} </ins>

<ins> error[E0038]: the trait `Bar` cannot be made into an object --> $DIR/issue-48027.rs:6:6 | LL |     const X: usize; |           - the trait cannot contain associated consts like `X` ... LL | impl dyn Bar {} |      ^^^^^^^ the trait `Bar` cannot be made into an object error[E0283]: type annotations needed: cannot resolve `_: Bar` --> $DIR/issue-48027.rs:3:32 | LL |     const X: usize; |     --------------- required by `Bar::X` LL |     fn return_n(&self) -> [u8; Bar::X]; |                                ^^^^^^ error: aborting due to 2 previous errors Some errors have detailed explanations: E0038, E0283. For more information about an error, try `rustc --explain E0038`. </ins>

<ins> pub trait Array { type Element; } pub trait Visit { fn visit() {} } impl Array for () { type Element = (); } impl<'a> Visit for () where (): Array<Element=&'a ()>, {} fn main() { <() as Visit>::visit(); //~ ERROR: type mismatch resolving } </ins>

<ins> error[E0271]: type mismatch resolving `<() as Array>::Element == &()` --> $DIR/issue-44153.rs:18:5 | LL |     fn visit() {} |     ---------- required by `Visit::visit` ... LL |     <() as Visit>::visit(); |     ^^^^^^^^^^^^^^^^^^^^ expected (), found &() | = note: expected type `()` found type `&()` = note: required because of the requirements on the impl of `Visit` for `()` error: aborting due to previous error For more information about this error, try `rustc --explain E0271`. </ins>

<ins> // check-pass #![crate_type = "lib"] pub struct Foo; pub struct Path<T: Bar> { _inner: T::Slice, } pub trait Bar: Sized { type Slice: ?Sized; fn open(_: &Path<Self>); } impl Bar for Foo { type Slice = [u8]; fn open(_: &Path<Self>) { unimplemented!() } } </ins>

<ins> fn main() { () < std::mem::size_of::<_>(); //~ ERROR: mismatched types [0u8; std::mem::size_of::<_>()]; //~ ERROR: type annotations needed } </ins>

<ins> error[E0308]: mismatched types --> $DIR/issue-47486.rs:2:10 | LL |     () < std::mem::size_of::<_>(); |          ^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found usize | = note: expected type `()` found type `usize` error[E0282]: type annotations needed --> $DIR/issue-47486.rs:3:11 | LL |     [0u8; std::mem::size_of::<_>()]; |           ^^^^^^^^^^^^^^^^^^^^^^ cannot infer type error: aborting due to 2 previous errors Some errors have detailed explanations: E0282, E0308. For more information about an error, try `rustc --explain E0282`. </ins>

<ins> // check-pass pub trait D {} pub struct DT; impl D for DT {} pub trait A<R: D>: Sized { type AS; } pub struct As<R: D>(R); pub struct AT; impl<R: D> A<R> for AT { type AS = As<R>; } #[repr(packed)] struct S(<AT as A<DT>>::AS); fn main() {} </ins>