mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Auto merge of #113038 - matthiaskrgr:rollup-sdcfkxa, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #112976 (Add test for futures with HRTB) - #113013 (rustdoc: get rid of extra line when line-wrapping fn decls with empty arg list) - #113030 (Add a regression test for #109071) - #113031 (Add a regression test for #110933) - #113036 (Accept `ReStatic` for RPITIT) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
7f01f03061
@ -1549,7 +1549,7 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for ImplTraitInTraitFinder<'_, 'tcx> {
|
||||
{
|
||||
let opaque_ty = tcx.fold_regions(unshifted_opaque_ty, |re, _depth| {
|
||||
match re.kind() {
|
||||
ty::ReEarlyBound(_) | ty::ReFree(_) | ty::ReError(_) => re,
|
||||
ty::ReEarlyBound(_) | ty::ReFree(_) | ty::ReError(_) | ty::ReStatic => re,
|
||||
r => bug!("unexpected region: {r:?}"),
|
||||
}
|
||||
});
|
||||
|
@ -1408,7 +1408,7 @@ impl clean::FnDecl {
|
||||
let amp = if f.alternate() { "&" } else { "&" };
|
||||
|
||||
write!(f, "(")?;
|
||||
if let Some(n) = line_wrapping_indent {
|
||||
if let Some(n) = line_wrapping_indent && !self.inputs.values.is_empty() {
|
||||
write!(f, "\n{}", Indent(n + 4))?;
|
||||
}
|
||||
for (i, input) in self.inputs.values.iter().enumerate() {
|
||||
|
@ -0,0 +1,2 @@
|
||||
<pre class="rust item-decl"><code>pub fn create(
|
||||
) -> <a class="struct" href="struct.Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000.html" title="struct decl_line_wrapping_empty_arg_list::Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000">Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000</a></code></pre>
|
12
tests/rustdoc/decl-line-wrapping-empty-arg-list.rs
Normal file
12
tests/rustdoc/decl-line-wrapping-empty-arg-list.rs
Normal file
@ -0,0 +1,12 @@
|
||||
// Ensure that we don't add an extra line containing nothing but whitespace in between the two
|
||||
// parentheses of an empty argument list when line-wrapping a function declaration.
|
||||
|
||||
// ignore-tidy-linelength
|
||||
|
||||
pub struct Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000;
|
||||
|
||||
// @has 'decl_line_wrapping_empty_arg_list/fn.create.html'
|
||||
// @snapshot decl - '//pre[@class="rust item-decl"]'
|
||||
pub fn create() -> Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000 {
|
||||
loop {}
|
||||
}
|
20
tests/ui/associated-consts/issue-110933.rs
Normal file
20
tests/ui/associated-consts/issue-110933.rs
Normal file
@ -0,0 +1,20 @@
|
||||
// check-pass
|
||||
|
||||
#![feature(associated_const_equality)]
|
||||
|
||||
pub trait Trait {
|
||||
const ASSOC: usize;
|
||||
}
|
||||
|
||||
pub fn foo<
|
||||
T: Trait<
|
||||
ASSOC = {
|
||||
let a = 10_usize;
|
||||
let b: &'_ usize = &a;
|
||||
*b
|
||||
},
|
||||
>,
|
||||
>() {
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,35 @@
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/issue-109071.rs:8:17
|
||||
|
|
||||
LL | type Item = &[T];
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0107]: missing generics for struct `Windows`
|
||||
--> $DIR/issue-109071.rs:7:9
|
||||
|
|
||||
LL | impl<T> Windows {
|
||||
| ^^^^^^^ expected 1 generic argument
|
||||
|
|
||||
note: struct defined here, with 1 generic parameter: `T`
|
||||
--> $DIR/issue-109071.rs:5:8
|
||||
|
|
||||
LL | struct Windows<T> {}
|
||||
| ^^^^^^^ -
|
||||
help: add missing generic argument
|
||||
|
|
||||
LL | impl<T> Windows<T> {
|
||||
| +++
|
||||
|
||||
error[E0658]: inherent associated types are unstable
|
||||
--> $DIR/issue-109071.rs:8:5
|
||||
|
|
||||
LL | type Item = &[T];
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
|
||||
= help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0637, E0658.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
18
tests/ui/associated-inherent-types/issue-109071.rs
Normal file
18
tests/ui/associated-inherent-types/issue-109071.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// revisions: with_gate no_gate
|
||||
#![cfg_attr(with_gate, feature(inherent_associated_types))]
|
||||
#![cfg_attr(with_gate, allow(incomplete_features))]
|
||||
|
||||
struct Windows<T> {}
|
||||
|
||||
impl<T> Windows { //~ ERROR: missing generics for struct `Windows`
|
||||
type Item = &[T]; //~ ERROR: `&` without an explicit lifetime name cannot be used here
|
||||
//[no_gate]~^ ERROR: inherent associated types are unstable
|
||||
|
||||
fn next() -> Option<Self::Item> {}
|
||||
}
|
||||
|
||||
impl<T> Windows<T> {
|
||||
fn T() -> Option<Self::Item> {}
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,26 @@
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/issue-109071.rs:8:17
|
||||
|
|
||||
LL | type Item = &[T];
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0107]: missing generics for struct `Windows`
|
||||
--> $DIR/issue-109071.rs:7:9
|
||||
|
|
||||
LL | impl<T> Windows {
|
||||
| ^^^^^^^ expected 1 generic argument
|
||||
|
|
||||
note: struct defined here, with 1 generic parameter: `T`
|
||||
--> $DIR/issue-109071.rs:5:8
|
||||
|
|
||||
LL | struct Windows<T> {}
|
||||
| ^^^^^^^ -
|
||||
help: add missing generic argument
|
||||
|
|
||||
LL | impl<T> Windows<T> {
|
||||
| +++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0637.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
@ -0,0 +1,6 @@
|
||||
error: the compiler unexpectedly panicked. this is a bug.
|
||||
|
||||
query stack during panic:
|
||||
#0 [evaluate_obligation] evaluating trait selection obligation `for<'a> [async fn body@$DIR/future.rs:32:35: 34:2]: core::future::future::Future`
|
||||
#1 [codegen_select_candidate] computing candidate for `<strlen as Trait>`
|
||||
end of query stack
|
38
tests/ui/higher-ranked/trait-bounds/future.rs
Normal file
38
tests/ui/higher-ranked/trait-bounds/future.rs
Normal file
@ -0,0 +1,38 @@
|
||||
// ignore-tidy-linelength
|
||||
// edition:2021
|
||||
// revisions: classic next
|
||||
//[next] compile-flags: -Ztrait-solver=next
|
||||
//[next] check-pass
|
||||
//[classic] known-bug: #112347
|
||||
//[classic] build-fail
|
||||
//[classic] failure-status: 101
|
||||
//[classic] normalize-stderr-test "note: .*\n\n" -> ""
|
||||
//[classic] normalize-stderr-test "thread 'rustc' panicked.*\n" -> ""
|
||||
//[classic] normalize-stderr-test "(error: internal compiler error: [^:]+):\d+:\d+: " -> "$1:LL:CC: "
|
||||
//[classic] rustc-env:RUST_BACKTRACE=0
|
||||
|
||||
#![feature(unboxed_closures)]
|
||||
|
||||
use std::future::Future;
|
||||
|
||||
trait Trait {
|
||||
fn func(&self, _: &str);
|
||||
}
|
||||
|
||||
impl<T> Trait for T
|
||||
where
|
||||
for<'a> T: Fn<(&'a str,)> + Send + Sync,
|
||||
for<'a> <T as FnOnce<(&'a str,)>>::Output: Future<Output = usize> + Send,
|
||||
{
|
||||
fn func(&self, _: &str) {
|
||||
println!("hello!");
|
||||
}
|
||||
}
|
||||
|
||||
async fn strlen(x: &str) -> usize {
|
||||
x.len()
|
||||
}
|
||||
|
||||
fn main() {
|
||||
strlen.func("hi");
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
// check-pass
|
||||
|
||||
#![allow(incomplete_features)]
|
||||
#![feature(adt_const_params, return_position_impl_trait_in_trait)]
|
||||
|
||||
pub struct Element;
|
||||
|
||||
pub trait Node {
|
||||
fn elements<const T: &'static str>(&self) -> impl Iterator<Item = Element>;
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user