about summary refs log tree commit diff
path: root/tests/ui/parallel-rustc/ty-variance-issue-124423.rs
blob: 8d7f29f77641b76318a2bcf0891b6278143b079b (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Test for #124423, which causes an ice bug: only `variances_of` returns `&[ty::Variance]`
//
//@ compile-flags: -Z threads=16
//@ compare-output-by-lines

use std::fmt::Debug;

fn elided(_: &impl Copy + 'a) -> _ { x }
//~^ ERROR ambiguous `+` in a type
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR the placeholder `_` is not allowed within types on item signatures for return types

fn explicit<'b>(_: &'a impl Copy + 'a) -> impl 'a { x }
//~^ ERROR ambiguous `+` in a type
//~| ERROR at least one trait must be specified
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR use of undeclared lifetime name `'a`

fn elided2( impl 'b) -> impl 'a + 'a { x }
//~^ ERROR expected one of `:` or `|`, found `'b`
//~| ERROR expected identifier, found keyword `impl`
//~| ERROR at least one trait must be specified
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR use of undeclared lifetime name `'a`

fn explicit2<'a>(_: &'a impl Copy + 'a) -> impl Copy + 'a { x }
//~^ ERROR ambiguous `+` in a type

fn foo<'a>(_: &impl Copy + 'a) -> impl 'b + 'a { x }
//~^ ERROR ambiguous `+` in a type
//~| ERROR at least one trait must be specified
//~| ERROR use of undeclared lifetime name `'b`

fn elided3(_: &impl Copy + 'a) -> Box<dyn 'a> { Box::new(x) }
//~^ ERROR ambiguous `+` in a type
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR at least one trait is required for an object type

fn x<'b>(_: &'a impl Copy + 'a) -> Box<dyn 'b> { Box::u32(x) }
//~^ ERROR ambiguous `+` in a type
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR at least one trait is required for an object type
//~| ERROR no function or associated item named `u32` found for struct `Box<_, _>` in the current scope

fn elided4(_: &impl Copy + 'a) ->  new  { x(x) }
//~^ ERROR ambiguous `+` in a type
//~| ERROR use of undeclared lifetime name `'a`
//~| ERROR cannot find type `new` in this scope

trait LifetimeTrait<'a> {}

impl<'a> LifetimeTrait<'a> for &'a Box<dyn 'a> {}
//~^ ERROR at least one trait is required for an object type

fn main() {}