Rollup merge of #104378 - compiler-errors:chalk-up, r=jackh726
Bump chalk to v0.87 1. Removes `ReEmpty` from chalk 2. Adds support for the `std::marker::Tuple` trait
This commit is contained in:
commit
c389097693
16
Cargo.lock
16
Cargo.lock
@ -502,9 +502,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "chalk-derive"
|
||||
version = "0.80.0"
|
||||
version = "0.87.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0001adf0cf12361e08b65e1898ea138f8f77d8f5177cbf29b6b3b3532252bd6"
|
||||
checksum = "d552b2fa341f5fc35c6b917b1d289d3c3a34d0b74e579390ea6192d6152a8cdb"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -514,9 +514,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "chalk-engine"
|
||||
version = "0.80.0"
|
||||
version = "0.87.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c44ee96f2d67cb5193d1503f185db1abad9933a1c6e6b4169c176f90baecd393"
|
||||
checksum = "7e54ac43048cb31c470d7b3e3acd409090ef4a5abddfe02455187aebc3d6879f"
|
||||
dependencies = [
|
||||
"chalk-derive",
|
||||
"chalk-ir",
|
||||
@ -527,9 +527,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "chalk-ir"
|
||||
version = "0.80.0"
|
||||
version = "0.87.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "92d8a95548f23618fda86426e4304e563ec2bb7ba0216139f0748d63c107b5f1"
|
||||
checksum = "43aa55deff4e7fbdb09fa014543372f2c95a06835ac487b9ce57b5099b950838"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"chalk-derive",
|
||||
@ -538,9 +538,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "chalk-solve"
|
||||
version = "0.80.0"
|
||||
version = "0.87.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f37f492dacfafe2e21319b80827da2779932909bb392f0cc86b2bd5c07c1b4e1"
|
||||
checksum = "61213deefc36ba265ad01c4d997e18bcddf7922862a4594a47ca4575afb3dab4"
|
||||
dependencies = [
|
||||
"chalk-derive",
|
||||
"chalk-ir",
|
||||
|
@ -8,7 +8,7 @@ doctest = false
|
||||
|
||||
[dependencies]
|
||||
bitflags = "1.2.1"
|
||||
chalk-ir = "0.80.0"
|
||||
chalk-ir = "0.87.0"
|
||||
either = "1.5.0"
|
||||
gsgdt = "0.1.2"
|
||||
polonius-engine = "0.13.0"
|
||||
|
@ -12,9 +12,9 @@ rustc_hir = { path = "../rustc_hir" }
|
||||
rustc_index = { path = "../rustc_index" }
|
||||
rustc_ast = { path = "../rustc_ast" }
|
||||
rustc_span = { path = "../rustc_span" }
|
||||
chalk-ir = "0.80.0"
|
||||
chalk-engine = "0.80.0"
|
||||
chalk-solve = "0.80.0"
|
||||
chalk-ir = "0.87.0"
|
||||
chalk-engine = "0.87.0"
|
||||
chalk-solve = "0.87.0"
|
||||
smallvec = { version = "1.8.1", features = ["union", "may_dangle"] }
|
||||
rustc_infer = { path = "../rustc_infer" }
|
||||
rustc_trait_selection = { path = "../rustc_trait_selection" }
|
||||
|
@ -142,6 +142,8 @@ fn trait_datum(
|
||||
Some(CoerceUnsized)
|
||||
} else if lang_items.dispatch_from_dyn_trait() == Some(def_id) {
|
||||
Some(DispatchFromDyn)
|
||||
} else if lang_items.tuple_trait() == Some(def_id) {
|
||||
Some(Tuple)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@ -570,6 +572,7 @@ fn well_known_trait_id(
|
||||
CoerceUnsized => lang_items.coerce_unsized_trait(),
|
||||
DiscriminantKind => lang_items.discriminant_kind_trait(),
|
||||
DispatchFromDyn => lang_items.dispatch_from_dyn_trait(),
|
||||
Tuple => lang_items.tuple_trait(),
|
||||
};
|
||||
def_id.map(chalk_ir::TraitId)
|
||||
}
|
||||
|
@ -507,9 +507,6 @@ fn lower_into(self, interner: RustInterner<'tcx>) -> Region<'tcx> {
|
||||
name: ty::BoundRegionKind::BrAnon(p.idx as u32, None),
|
||||
}),
|
||||
chalk_ir::LifetimeData::Static => return interner.tcx.lifetimes.re_static,
|
||||
chalk_ir::LifetimeData::Empty(_) => {
|
||||
bug!("Chalk should not have been passed an empty lifetime.")
|
||||
}
|
||||
chalk_ir::LifetimeData::Erased => return interner.tcx.lifetimes.re_erased,
|
||||
chalk_ir::LifetimeData::Phantom(void, _) => match *void {},
|
||||
};
|
||||
|
@ -1,5 +1,3 @@
|
||||
// known-bug: unknown
|
||||
// FIXME(chalk): Chalk needs support for the Tuple trait
|
||||
// compile-flags: -Z chalk
|
||||
|
||||
fn main() -> () {
|
||||
@ -26,7 +24,7 @@ fn main() -> () {
|
||||
let mut c = b;
|
||||
|
||||
c();
|
||||
b(); // FIXME: reenable when this is fixed ~ ERROR
|
||||
b(); //~ ERROR
|
||||
|
||||
// FIXME(chalk): this doesn't quite work
|
||||
/*
|
||||
|
@ -1,80 +1,22 @@
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:7:5
|
||||
|
|
||||
LL | t();
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:13:5
|
||||
error[E0382]: borrow of moved value: `b`
|
||||
--> $DIR/closure.rs:27:5
|
||||
|
|
||||
LL | let mut c = b;
|
||||
| - value moved here
|
||||
...
|
||||
LL | b();
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
| ^ value borrowed here after move
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `a` out of its environment
|
||||
--> $DIR/closure.rs:20:9
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
LL | a = 1;
|
||||
| ^
|
||||
help: consider mutably borrowing `b`
|
||||
|
|
||||
LL | let mut c = &mut b;
|
||||
| ++++
|
||||
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:17:5
|
||||
|
|
||||
LL | c();
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
error: aborting due to previous error
|
||||
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:18:5
|
||||
|
|
||||
LL | b();
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:24:5
|
||||
|
|
||||
LL | b();
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:28:5
|
||||
|
|
||||
LL | c();
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
|
||||
error[E0277]: `()` is not a tuple
|
||||
--> $DIR/closure.rs:29:5
|
||||
|
|
||||
LL | b(); // FIXME: reenable when this is fixed ~ ERROR
|
||||
| ^^^ the trait `Tuple` is not implemented for `()`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() -> () where (): Tuple {
|
||||
| +++++++++++++++
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
For more information about this error, try `rustc --explain E0382`.
|
||||
|
@ -1,5 +1,4 @@
|
||||
// known-bug: unknown
|
||||
// FIXME(chalk): Chalk needs support for the Tuple trait
|
||||
// check-pass
|
||||
// compile-flags: -Z chalk
|
||||
|
||||
use std::fmt::Display;
|
||||
|
@ -1,32 +0,0 @@
|
||||
error: the type `&dyn Fn(i32) -> _` is not well-formed (chalk)
|
||||
--> $DIR/trait-objects.rs:11:12
|
||||
|
|
||||
LL | let f: &dyn Fn(i32) -> _ = &|x| x + x;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0277]: `(i32,)` is not a tuple
|
||||
--> $DIR/trait-objects.rs:12:5
|
||||
|
|
||||
LL | f(2);
|
||||
| ^^^^ the trait `Tuple` is not implemented for `(i32,)`
|
||||
|
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() where (i32,): Tuple {
|
||||
| +++++++++++++++++++
|
||||
|
||||
error[E0277]: expected a `Fn<(i32,)>` closure, found `dyn Fn(i32) -> i32`
|
||||
--> $DIR/trait-objects.rs:12:5
|
||||
|
|
||||
LL | f(2);
|
||||
| ^^^^ expected an `Fn<(i32,)>` closure, found `dyn Fn(i32) -> i32`
|
||||
|
|
||||
= help: the trait `Fn<(i32,)>` is not implemented for `dyn Fn(i32) -> i32`
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() where dyn Fn(i32) -> i32: Fn<(i32,)> {
|
||||
| ++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user