summaryrefslogtreecommitdiffstats
path: root/tests/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.rs
blob: 95c655654eaa4e550f7d1a195a8523a3775d8011 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Check that repeated type variables are correctly handled

#![allow(unused)]
#![feature(type_ascription)]

type PairUncoupled<'a, 'b, T> = (&'a T, &'b T);
type PairCoupledTypes<T> = (T, T);
type PairCoupledRegions<'a, T> = (&'a T, &'a T);

fn uncoupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
    let ((y, _z),) = type_ascribe!(((s, _x),), (PairUncoupled<_>,));
    y // OK
}

fn coupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
    let ((y, _z),) = type_ascribe!(((s, _x),), (PairCoupledTypes<_>,));
    y //~ ERROR lifetime may not live long enough
}

fn coupled_regions_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
    let ((y, _z),) = type_ascribe!(((s, _x),), (PairCoupledRegions<_>,));
    y //~ ERROR lifetime may not live long enough
}

fn cast_uncoupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
    let ((y, _z),) = ((s, _x),) as (PairUncoupled<_>,);
    y // OK
}

fn cast_coupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
    let ((y, _z),) = ((s, _x),) as (PairCoupledTypes<_>,);
    y //~ ERROR lifetime may not live long enough
}

fn cast_coupled_regions_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
    let ((y, _z),) = ((s, _x),) as (PairCoupledRegions<_>,);
    y //~ ERROR lifetime may not live long enough
}

fn main() {}