mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
Auto merge of #117641 - matthiaskrgr:rollup-f9c12td, r=matthiaskrgr
Rollup of 4 pull requests Successful merges: - #117190 (add test for #113381) - #117516 (add test for #113375) - #117631 (Documentation cleanup for core::error::Request.) - #117637 (Check binders with bound vars for global bounds that don't hold) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
189d6c71f3
@ -32,6 +32,7 @@ use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _
|
||||
use rustc_trait_selection::traits::{
|
||||
self, ObligationCause, ObligationCauseCode, ObligationCtxt, WellFormedLoc,
|
||||
};
|
||||
use rustc_type_ir::TypeFlags;
|
||||
|
||||
use std::cell::LazyCell;
|
||||
use std::ops::{ControlFlow, Deref};
|
||||
@ -1877,7 +1878,7 @@ impl<'tcx> WfCheckingCtxt<'_, 'tcx> {
|
||||
continue;
|
||||
}
|
||||
// Match the existing behavior.
|
||||
if pred.is_global() && !pred.has_late_bound_vars() {
|
||||
if pred.is_global() && !pred.has_type_flags(TypeFlags::HAS_BINDER_VARS) {
|
||||
let pred = self.normalize(span, None, pred);
|
||||
let hir_node = tcx.hir().find_by_def_id(self.body_def_id);
|
||||
|
||||
|
@ -439,10 +439,10 @@ where
|
||||
/// * A Producer initializes the value of one of its fields of a specific type. (or is otherwise
|
||||
/// prepared to generate a value requested). eg, `backtrace::Backtrace` or
|
||||
/// `std::backtrace::Backtrace`
|
||||
/// * A Consumer requests an object of a specific type (say `std::backtrace::Backtrace). In the case
|
||||
/// of a `dyn Error` trait object (the Producer), there are methods called `request_ref` and
|
||||
/// `request_value` are available to simplify obtaining an ``Option<T>`` for a given type. * The
|
||||
/// Producer, when requested, populates the given Request object which is given as a mutable
|
||||
/// * A Consumer requests an object of a specific type (say `std::backtrace::Backtrace`). In the
|
||||
/// case of a `dyn Error` trait object (the Producer), there are functions called `request_ref` and
|
||||
/// `request_value` to simplify obtaining an `Option<T>` for a given type.
|
||||
/// * The Producer, when requested, populates the given Request object which is given as a mutable
|
||||
/// reference.
|
||||
/// * The Consumer extracts a value or reference to the requested type from the `Request` object
|
||||
/// wrapped in an `Option<T>`; in the case of `dyn Error` the aforementioned `request_ref` and `
|
||||
|
@ -29,4 +29,12 @@ impl Inherent {
|
||||
fn inherent(&self) {}
|
||||
}
|
||||
|
||||
// This trivial bound doesn't hold, but the unused lifetime tripped up that check after #117589, and
|
||||
// showed up in its crater results (in `soa-derive 0.13.0`).
|
||||
fn do_it()
|
||||
where
|
||||
for<'a> Inherent: Clone,
|
||||
{
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -0,0 +1,15 @@
|
||||
#![feature(const_closures, const_trait_impl, effects)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
trait Foo {
|
||||
fn foo(&self);
|
||||
}
|
||||
|
||||
impl Foo for () {
|
||||
fn foo(&self) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
(const || { (()).foo() })();
|
||||
//~^ ERROR: cannot call non-const fn
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
error[E0015]: cannot call non-const fn `<() as Foo>::foo` in constant functions
|
||||
--> $DIR/const_closure-const_trait_impl-ice-113381.rs:13:22
|
||||
|
|
||||
LL | (const || { (()).foo() })();
|
||||
| ^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
@ -0,0 +1,18 @@
|
||||
// check-pass
|
||||
|
||||
// effects ice https://github.com/rust-lang/rust/issues/113375 index out of bounds
|
||||
|
||||
#![allow(incomplete_features, unused)]
|
||||
#![feature(effects, adt_const_params)]
|
||||
|
||||
struct Bar<T>(T);
|
||||
|
||||
impl<T> Bar<T> {
|
||||
const fn value() -> usize {
|
||||
42
|
||||
}
|
||||
}
|
||||
|
||||
struct Foo<const N: [u8; Bar::<u32>::value()]>;
|
||||
|
||||
pub fn main() {}
|
Loading…
Reference in New Issue
Block a user