Skip to content

Commit

Permalink
Make rustc build with new chalk
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Nov 13, 2022
1 parent 6de5f62 commit 36a1068
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 113 deletions.
3 changes: 3 additions & 0 deletions compiler/rustc_traits/src/chalk/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ impl<'tcx> chalk_solve::RustIrDatabase<RustInterner<'tcx>> for RustIrDatabase<'t
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
};
Expand Down Expand Up @@ -570,6 +572,7 @@ impl<'tcx> chalk_solve::RustIrDatabase<RustInterner<'tcx>> for RustIrDatabase<'t
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)
}
Expand Down
3 changes: 0 additions & 3 deletions compiler/rustc_traits/src/chalk/lowering.rs
Original file line number Diff line number Diff line change
Expand Up @@ -507,9 +507,6 @@ impl<'tcx> LowerInto<'tcx, Region<'tcx>> for &chalk_ir::Lifetime<RustInterner<'t
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 {},
};
Expand Down
4 changes: 1 addition & 3 deletions src/test/ui/chalkify/closure.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
// known-bug: unknown
// FIXME(chalk): Chalk needs support for the Tuple trait
// compile-flags: -Z chalk

fn main() -> () {
Expand All @@ -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
/*
Expand Down
88 changes: 15 additions & 73 deletions src/test/ui/chalkify/closure.stderr
Original file line number Diff line number Diff line change
@@ -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
|
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: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[E0277]: `()` is not a tuple
--> $DIR/closure.rs:18: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 `()`
|
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
| ^ value borrowed here after move
|
LL | b(); // FIXME: reenable when this is fixed ~ ERROR
| ^^^ the trait `Tuple` is not implemented for `()`
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
|
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
LL | a = 1;
| ^
help: consider mutably borrowing `b`
|
LL | fn main() -> () where (): Tuple {
| +++++++++++++++
LL | let mut c = &mut b;
| ++++

error: aborting due to 7 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
For more information about this error, try `rustc --explain E0382`.
3 changes: 1 addition & 2 deletions src/test/ui/chalkify/trait-objects.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
32 changes: 0 additions & 32 deletions src/test/ui/chalkify/trait-objects.stderr

This file was deleted.

0 comments on commit 36a1068

Please sign in to comment.