|
1 | 1 | #![crate_name = "user"]
|
2 | 2 |
|
| 3 | +// In each test case, we include the trailing semicolon to ensure that nothing extra comes |
| 4 | +// after the type like an unwanted outlives-bound. |
| 5 | + |
3 | 6 | // aux-crate:dyn_trait=dyn_trait.rs
|
4 | 7 | // edition:2021
|
5 | 8 |
|
6 | 9 | // @has user/type.Ty0.html
|
7 |
| -// @has - '//*[@class="rust item-decl"]//code' "dyn for<'any> FnOnce(&'any str) -> bool + 'static" |
8 |
| -// FIXME(fmease): Hide default lifetime bound `'static` |
| 10 | +// @has - '//*[@class="rust item-decl"]//code' "dyn for<'any> FnOnce(&'any str) -> bool;" |
9 | 11 | pub use dyn_trait::Ty0;
|
10 | 12 |
|
11 | 13 | // @has user/type.Ty1.html
|
12 |
| -// @has - '//*[@class="rust item-decl"]//code' "dyn Display + 'obj" |
| 14 | +// @has - '//*[@class="rust item-decl"]//code' "dyn Display + 'obj;" |
13 | 15 | pub use dyn_trait::Ty1;
|
14 | 16 |
|
15 | 17 | // @has user/type.Ty2.html
|
16 |
| -// @has - '//*[@class="rust item-decl"]//code' "dyn for<'a, 'r> Container<'r, Item<'a, 'static> = ()>" |
| 18 | +// @has - '//*[@class="rust item-decl"]//code' "dyn for<'a, 'r> Container<'r, Item<'a, 'static> = ()>;" |
17 | 19 | pub use dyn_trait::Ty2;
|
18 | 20 |
|
19 | 21 | // @has user/type.Ty3.html
|
20 |
| -// @has - '//*[@class="rust item-decl"]//code' "&'s (dyn ToString + 's)" |
21 |
| -// FIXME(fmease): Hide default lifetime bound, render "&'s dyn ToString" |
| 22 | +// @has - '//*[@class="rust item-decl"]//code' "&'s dyn ToString;" |
22 | 23 | pub use dyn_trait::Ty3;
|
23 | 24 |
|
24 |
| -// @has user/fn.func0.html |
25 |
| -// @has - '//pre[@class="rust item-decl"]' "func0(_: &dyn Fn())" |
26 |
| -// FIXME(fmease): Show placeholder-lifetime bound, render "func0(_: &(dyn Fn() + '_))" |
27 |
| -pub use dyn_trait::func0; |
| 25 | +// Below we check if we correctly elide trait-object lifetime bounds if they coincide with their |
| 26 | +// default (known as "object lifetime default" or "default trait object lifetime"). |
| 27 | + |
| 28 | +// @has user/fn.lbwel.html |
| 29 | +// @has - '//pre[@class="rust item-decl"]' "lbwel(_: &dyn Fn())" |
| 30 | +pub use dyn_trait::late_bound_wrapped_elided as lbwel; |
| 31 | +// @has user/fn.lbwl0.html |
| 32 | +// has - '//pre[@class="rust item-decl"]' "lbwl0<'f>(_: &mut (dyn Fn() + 'f))" |
| 33 | +pub use dyn_trait::late_bound_wrapped_late0 as lbwl0; |
| 34 | +// @has user/fn.lbwd0.html |
| 35 | +// has - '//pre[@class="rust item-decl"]' "lbwd0<'f>(_: &'f mut dyn Fn())" |
| 36 | +pub use dyn_trait::late_bound_wrapped_defaulted0 as lbwd0; |
| 37 | +// @has user/type.EarlyBoundWrappedDefaulted0.html |
| 38 | +// @has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait>;" |
| 39 | +pub use dyn_trait::EarlyBoundWrappedDefaulted0; |
| 40 | +// @has user/type.EarlyBoundWrappedDefaulted1.html |
| 41 | +// @has - '//*[@class="rust item-decl"]//code' "&'x dyn Trait;" |
| 42 | +pub use dyn_trait::EarlyBoundWrappedDefaulted1; |
| 43 | +// @has user/type.EarlyBoundWrappedEarly.html |
| 44 | +// @has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait + 'y>" |
| 45 | +pub use dyn_trait::EarlyBoundWrappedEarly; |
| 46 | +// @has user/type.EarlyBoundWrappedStatic.html |
| 47 | +// @has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait + 'static>" |
| 48 | +pub use dyn_trait::EarlyBoundWrappedStatic; |
| 49 | +// @has user/fn.lbwd1.html |
| 50 | +// @has - '//pre[@class="rust item-decl"]' "lbwd1<'l>(_: Ref<'l, dyn Trait>)" |
| 51 | +pub use dyn_trait::late_bound_wrapped_defaulted1 as lbwd1; |
| 52 | +// @has user/fn.lbwl1.html |
| 53 | +// @has - '//pre[@class="rust item-decl"]' "lbwl1<'l, 'm>(_: Ref<'l, dyn Trait + 'm>)" |
| 54 | +pub use dyn_trait::late_bound_wrapped_late1 as lbwl1; |
| 55 | +// @has user/fn.lbwe.html |
| 56 | +// @has - '//pre[@class="rust item-decl"]' "lbwe<'e, 'l>(_: Ref<'l, dyn Trait + 'e>)" |
| 57 | +pub use dyn_trait::late_bound_wrapped_early as lbwe; |
| 58 | +// @has user/fn.ebwd.html |
| 59 | +// @has - '//pre[@class="rust item-decl"]' "ebwd(_: Ref<'_, dyn Trait>)" |
| 60 | +pub use dyn_trait::elided_bound_wrapped_defaulted as ebwd; |
| 61 | +// @has user/type.StaticBoundWrappedDefaulted0.html |
| 62 | +// @has - '//*[@class="rust item-decl"]//code' "Ref<'static, dyn Trait>;" |
| 63 | +pub use dyn_trait::StaticBoundWrappedDefaulted0; |
| 64 | +// @has user/type.StaticBoundWrappedDefaulted1.html |
| 65 | +// @has - '//*[@class="rust item-decl"]//code' "&'static dyn Trait;" |
| 66 | +pub use dyn_trait::StaticBoundWrappedDefaulted1; |
| 67 | +// @has user/type.AmbiguousBoundWrappedEarly0.html |
| 68 | +// @has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'s, 'r, dyn Trait + 's>;" |
| 69 | +pub use dyn_trait::AmbiguousBoundWrappedEarly0; |
| 70 | +// @has user/type.AmbiguousBoundWrappedEarly1.html |
| 71 | +// @has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'s, 'r, dyn Trait + 'r>;" |
| 72 | +pub use dyn_trait::AmbiguousBoundWrappedEarly1; |
| 73 | +// @has user/type.AmbiguousBoundWrappedStatic.html |
| 74 | +// @has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'q, 'q, dyn Trait + 'static>;" |
| 75 | +pub use dyn_trait::AmbiguousBoundWrappedStatic; |
| 76 | + |
| 77 | +// @has user/type.NoBoundsWrappedDefaulted.html |
| 78 | +// @has - '//*[@class="rust item-decl"]//code' "Box<dyn Trait, Global>;" |
| 79 | +pub use dyn_trait::NoBoundsWrappedDefaulted; |
| 80 | +// @has user/type.NoBoundsWrappedEarly.html |
| 81 | +// @has - '//*[@class="rust item-decl"]//code' "Box<dyn Trait + 'e, Global>;" |
| 82 | +pub use dyn_trait::NoBoundsWrappedEarly; |
| 83 | +// @has user/fn.nbwl.html |
| 84 | +// @has - '//pre[@class="rust item-decl"]' "nbwl<'l>(_: Box<dyn Trait + 'l, Global>)" |
| 85 | +pub use dyn_trait::no_bounds_wrapped_late as nbwl; |
| 86 | +// @has user/fn.nbwel.html |
| 87 | +// @has - '//pre[@class="rust item-decl"]' "nbwel(_: Box<dyn Trait + '_, Global>)" |
| 88 | +// NB: It might seem counterintuitive to display the explicitly elided lifetime `'_` here instead of |
| 89 | +// eliding it but this behavior is correct: The default is `'static` here which != `'_`. |
| 90 | +pub use dyn_trait::no_bounds_wrapped_elided as nbwel; |
28 | 91 |
|
29 |
| -// @has user/fn.func1.html |
30 |
| -// @has - '//pre[@class="rust item-decl"]' "func1<'func>(_: &(dyn Fn() + 'func))" |
31 |
| -pub use dyn_trait::func1; |
| 92 | +// @has user/type.BareNoBoundsDefaulted.html |
| 93 | +// @has - '//*[@class="rust item-decl"]//code' "dyn Trait;" |
| 94 | +pub use dyn_trait::BareNoBoundsDefaulted; |
| 95 | +// @has user/type.BareNoBoundsEarly.html |
| 96 | +// @has - '//*[@class="rust item-decl"]//code' "dyn Trait + 'p;" |
| 97 | +pub use dyn_trait::BareNoBoundsEarly; |
| 98 | +// @has user/type.BareEarlyBoundDefaulted0.html |
| 99 | +// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'u>;" |
| 100 | +pub use dyn_trait::BareEarlyBoundDefaulted0; |
| 101 | +// @has user/type.BareEarlyBoundDefaulted1.html |
| 102 | +// @has - '//*[@class="rust item-decl"]//code' "dyn for<'any> EarlyBoundTrait0<'any>;" |
| 103 | +pub use dyn_trait::BareEarlyBoundDefaulted1; |
| 104 | +// @has user/type.BareEarlyBoundDefaulted2.html |
| 105 | +// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait1<'static, 'w>;" |
| 106 | +pub use dyn_trait::BareEarlyBoundDefaulted2; |
| 107 | +// @has user/type.BareEarlyBoundEarly.html |
| 108 | +// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'i> + 'j;" |
| 109 | +pub use dyn_trait::BareEarlyBoundEarly; |
| 110 | +// @has user/type.BareEarlyBoundStatic.html |
| 111 | +// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'i> + 'static;" |
| 112 | +pub use dyn_trait::BareEarlyBoundStatic; |
| 113 | +// @has user/type.BareStaticBoundDefaulted.html |
| 114 | +// @has - '//*[@class="rust item-decl"]//code' "dyn StaticBoundTrait;" |
| 115 | +pub use dyn_trait::BareStaticBoundDefaulted; |
| 116 | +// @has user/type.BareHigherRankedBoundDefaulted0.html |
| 117 | +// @has - '//*[@class="rust item-decl"]//code' "dyn HigherRankedBoundTrait0;" |
| 118 | +pub use dyn_trait::BareHigherRankedBoundDefaulted0; |
| 119 | +// @has user/type.BareHigherRankedBoundDefaulted1.html |
| 120 | +// @has - '//*[@class="rust item-decl"]//code' "dyn HigherRankedBoundTrait1<'r>;" |
| 121 | +pub use dyn_trait::BareHigherRankedBoundDefaulted1; |
| 122 | +// @has user/type.BareAmbiguousBoundEarly0.html |
| 123 | +// @has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'m, 'n> + 'm;" |
| 124 | +pub use dyn_trait::BareAmbiguousBoundEarly0; |
| 125 | +// @has user/type.BareAmbiguousBoundEarly1.html |
| 126 | +// @has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'m, 'n> + 'n;" |
| 127 | +pub use dyn_trait::BareAmbiguousBoundEarly1; |
| 128 | +// @has user/type.BareAmbiguousBoundStatic.html |
| 129 | +// @has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'o, 'o> + 'static;" |
| 130 | +pub use dyn_trait::BareAmbiguousBoundStatic; |
0 commit comments