2dec1bc685
When encountering code like `f::<f::<f::<f::<f::<f::<f::<f::<...` with unmatched closing angle brackets, add a linear check that avoids the exponential behavior of the parse recovery mechanism. Fix #117080.
18 lines
752 B
Rust
18 lines
752 B
Rust
trait Mul<T> {
|
|
type Output;
|
|
}
|
|
trait Matrix: Mul<<Self as Matrix>::Row, Output = ()> {
|
|
type Row;
|
|
type Transpose: Matrix<Row = Self::Row>;
|
|
}
|
|
fn is_mul<S, T: Mul<S, Output = ()>>() {}
|
|
fn f<T: Matrix>() {
|
|
is_mul::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<
|
|
f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<
|
|
f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<
|
|
f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::
|
|
<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<f::<>();
|
|
//~^ ERROR expected one of `!`, `+`, `,`, `::`, or `>`, found `(`
|
|
}
|
|
fn main() {}
|