summaryrefslogtreecommitdiffstats
path: root/src/test/ui/associated-types/associate-type-bound-normalization.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/associated-types/associate-type-bound-normalization.rs')
-rw-r--r--src/test/ui/associated-types/associate-type-bound-normalization.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/associate-type-bound-normalization.rs b/src/test/ui/associated-types/associate-type-bound-normalization.rs
new file mode 100644
index 000000000..db092970f
--- /dev/null
+++ b/src/test/ui/associated-types/associate-type-bound-normalization.rs
@@ -0,0 +1,25 @@
+// Make sure that we normalize bounds on associated types before checking them
+// as candidates.
+
+// check-pass
+
+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>() {
+ // The unnormalized bound on `T::Transpose` is
+ // `Mul<<T::Transpose as Matrix>::Row` which has to be normalized to be
+ // equal to `T::Row`.
+ is_mul::<T::Row, T::Transpose>();
+}
+
+fn main() {}