Matthew Jasper
f52b2d8890
Avoid cycle in nested obligations for object candidate
...
Bounds of the form `type Future: Future<Result=Self::Result>` exist in
some ecosystem crates. To validate these bounds for trait objects we
need to normalize `Self::Result` in a way that doesn't cause a cycle.
2020-10-06 11:19:31 +01:00
Matthew Jasper
8787090964
Address review comments
2020-10-06 11:19:31 +01:00
Matthew Jasper
21eccbb587
Fix ICE
2020-10-06 11:19:30 +01:00
Matthew Jasper
042464f75a
Fix tests and bootstrap
2020-10-06 11:19:30 +01:00
Matthew Jasper
2bdf723da7
Ensure that associated types for trait objects satisfy their bounds
2020-10-06 11:19:30 +01:00
Matthew Jasper
0a76584dcc
Move some code from rustc_typeck to rustc_trait_selection
2020-10-06 11:19:30 +01:00
Matthew Jasper
d4d9e7f67f
Remove unused part of return value from replace_bound_vars_with_placeholders
2020-10-06 11:19:30 +01:00
Matthew Jasper
1b07991574
Check associated type bounds for object safety violations
2020-10-06 11:19:30 +01:00
Matthew Jasper
5b279c8016
Check opaque types satisfy their bounds
2020-10-06 11:19:30 +01:00
Matthew Jasper
b3057f4d5f
Check projections are well-formed when using projection candidates
2020-10-06 11:19:29 +01:00
Matthew Jasper
87f2f42dc2
Make projection wf check the predicates for the projection
2020-10-06 11:19:29 +01:00
Matthew Jasper
d297147e62
Split bounds from predicates
2020-10-06 11:19:22 +01:00
Matthew Jasper
0eb87ed55f
Rename projection_predicates to item_bounds
2020-10-06 11:18:45 +01:00
Yuki Okushi
2970af8e28
Rollup merge of #77559 - camelid:fix-rustdoc-warnings-invalid-rust-syntax, r=lcnr
...
Fix rustdoc warnings about invalid Rust syntax
2020-10-06 16:26:09 +09:00
Camelid
c8d25af698
Fixup
2020-10-05 15:07:27 -07:00
bors
ea7e131435
Auto merge of #77171 - VFLashM:better_sso_structures, r=oli-obk
...
Better sso structures
This change greatly expands interface of MiniSet/MiniMap and renames them because they are no longer "Mini".
2020-10-05 17:18:01 +00:00
Bastian Kauschke
8160bfa39c
query_name_of_opt_const_arg -> query_name_opt_const_arg
2020-10-05 08:49:21 +02:00
Camelid
c877ff3664
Fix rustdoc warnings about invalid Rust syntax
2020-10-04 19:35:44 -07:00
Dylan DPC
9dbc9ed870
Rollup merge of #77514 - scottmcm:less-once-chain-once, r=estebank
...
Replace some once(x).chain(once(y)) with [x, y] IntoIter
Now that we have by-value array iterators that are [already used](25c8c53dd9/compiler/rustc_hir/src/def.rs (L305-L307)
)...
For example,
```diff
- once(self.type_ns).chain(once(self.value_ns)).chain(once(self.macro_ns)).filter_map(|it| it)
+ IntoIter::new([self.type_ns, self.value_ns, self.macro_ns]).filter_map(|it| it)
```
2020-10-05 02:29:42 +02:00
Dylan DPC
5fa978fa1b
Rollup merge of #75928 - JulianKnodt:non_utf8, r=estebank
...
Remove trait_selection error message in specific case
In the case that a trait is not implemented for an ADT with type errors, cancel the error.
Fixes #75627
2020-10-05 02:29:25 +02:00
Bastian Kauschke
536674fb69
cleanup WithOptConstParam queries
2020-10-04 23:22:08 +02:00
Scott McMurray
d74b8e0505
Replace some once(x).chain(once(y)) with [x, y] IntoIter
...
Now that we have by-value array iterators...
2020-10-03 16:51:43 -07:00
Dylan DPC
6d3cfd9d51
Rollup merge of #77305 - lcnr:candidate_from_obligation, r=davidtwco
...
move candidate_from_obligation_no_cache
It's only called from `candidate_from_obligation` which is already in this file.
2020-10-01 02:13:37 +02:00
Dylan DPC
f23559451b
Rollup merge of #77303 - lcnr:const-evaluatable-TooGeneric, r=oli-obk,varkor
...
const evaluatable: improve `TooGeneric` handling
Instead of emitting an error in `fulfill`, we now correctly stall on inference variables.
As `const_eval_resolve` returns `ErrorHandled::TooGeneric` when encountering generic parameters on which
we actually do want to error, we check for inference variables and eagerly emit an error if they don't exist, returning `ErrorHandled::Reported` instead.
Also contains a small bugfix for `ConstEquate` where we previously only stalled on type variables. This is probably a leftover from
when we did not yet support stalling on const inference variables.
r? @oli-obk cc @varkor @eddyb
2020-10-01 02:13:35 +02:00
Bastian Kauschke
db5b70f193
move candidate_from_obligation_no_cache
2020-09-28 20:21:44 +02:00
Bastian Kauschke
a4783debe0
const evaluatable: improve TooGeneric
handling
2020-09-28 20:18:06 +02:00
Dylan MacKenzie
c4d8089f00
Revert "Add an unused field of type Option<DefId>
to ParamEnv
struct."
...
This reverts commit ab83d372ed
.
2020-09-26 21:01:09 -07:00
Valerii Lashmanov
5c224a484d
MiniSet/MiniMap moved and renamed into SsoHashSet/SsoHashMap
...
It is a more descriptive name and with upcoming changes
there will be nothing "mini" about them.
2020-09-26 14:30:05 -05:00
Ralf Jung
9e02642fb3
Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk
...
Remove unused #[allow(...)] statements from compiler/
2020-09-26 12:58:34 +02:00
Ralf Jung
ac8169dc10
Rollup merge of #77093 - lcnr:const-generics-infer-warning, r=varkor
...
merge `need_type_info_err(_const)`
I hoped that this would automatically solve #76737 but it doesn't quite seem like it
fixes #77092
r? @varkor
2020-09-26 12:58:17 +02:00
Bastian Kauschke
32195ac8f4
rename functions
2020-09-26 10:28:15 +02:00
est31
12187b7f86
Remove unused #[allow(...)] statements from compiler/
2020-09-26 01:25:55 +02:00
Jonas Schievink
e739468f97
Rollup merge of #77155 - lcnr:ImplSource, r=ecstatic-morse
...
remove enum name from ImplSource variants
This is quite a lot cleaner in my opinion.
2020-09-25 19:42:48 +02:00
bors
521d8d8a22
Auto merge of #77041 - lcnr:const-eval-perf, r=ecstatic-morse
...
perf: move cold path of `process_obligations` into a separate function
cc #76575
This probably won't matter too much in the long run once #69218 is merged so we may not want to merge this.
r? `@ecstatic-morse`
2020-09-25 10:14:47 +00:00
Jonas Schievink
6f3da3d53f
Rollup merge of #77121 - duckymirror:html-root-url, r=jyn514
...
Updated html_root_url for compiler crates
Closes #77103
r? @jyn514
2020-09-25 02:29:45 +02:00
Bastian Kauschke
06d2325a50
perf: split progress_obligations with inline(never)
2020-09-24 22:13:41 +02:00
Bastian Kauschke
1857184cd1
remove enum name from ImplSource variants
2020-09-24 19:22:36 +02:00
Bastian Kauschke
b8402d6a6e
assign the correct DefId
in nominal_obligations
2020-09-24 09:04:23 +02:00
Erik Hofmayer
138a2e5eaa
/nightly/nightly-rustc
2020-09-23 21:51:56 +02:00
Erik Hofmayer
dd66ea2d3d
Updated html_root_url for compiler crates
2020-09-23 21:14:43 +02:00
Dylan DPC
98e5ee7df0
Rollup merge of #76939 - lcnr:const-evaluatable-cont, r=oli-obk
...
emit errors during AbstractConst building
There changes are currently still untested, so I don't expect this to pass CI 😆
It seems to me like this is the direction we want to go in, though we didn't have too much of a discussion about this.
r? @oli-obk
2020-09-23 14:54:02 +02:00
Bastian Kauschke
45d92b43e3
merge need_type_info_err(_const)
2020-09-23 09:24:58 +02:00
bors
6d3acf5129
Auto merge of #76928 - lcnr:opaque-types-cache, r=tmandry
...
cache types during normalization
partially fixes #75992
reduces the following test from 14 to 3 seconds locally.
cc `@Mark-Simulacrum` would it make sense to add that test to `perf`?
```rust
#![recursion_limit="2048"]
#![type_length_limit="112457564"]
pub async fn h0(v: &String, x: &u64) { println!("{} {}", v, x) }
pub async fn h1(v: &String, x: &u64) { h0(v, x).await }
pub async fn h2(v: &String, x: &u64) { h1(v, x).await }
pub async fn h3(v: &String, x: &u64) { h2(v, x).await }
pub async fn h4(v: &String, x: &u64) { h3(v, x).await }
pub async fn h5(v: &String, x: &u64) { h4(v, x).await }
pub async fn h6(v: &String, x: &u64) { h5(v, x).await }
pub async fn h7(v: &String, x: &u64) { h6(v, x).await }
pub async fn h8(v: &String, x: &u64) { h7(v, x).await }
pub async fn h9(v: &String, x: &u64) { h8(v, x).await }
pub async fn h10(v: &String, x: &u64) { h9(v, x).await }
pub async fn h11(v: &String, x: &u64) { h10(v, x).await }
pub async fn h12(v: &String, x: &u64) { h11(v, x).await }
pub async fn h13(v: &String, x: &u64) { h12(v, x).await }
pub async fn h14(v: &String, x: &u64) { h13(v, x).await }
pub async fn h15(v: &String, x: &u64) { h14(v, x).await }
pub async fn h16(v: &String, x: &u64) { h15(v, x).await }
pub async fn h17(v: &String, x: &u64) { h16(v, x).await }
pub async fn h18(v: &String, x: &u64) { h17(v, x).await }
pub async fn h19(v: &String, x: &u64) { h18(v, x).await }
macro_rules! async_recursive {
(29, $inner:expr) => { async { async_recursive!(28, $inner) }.await };
(28, $inner:expr) => { async { async_recursive!(27, $inner) }.await };
(27, $inner:expr) => { async { async_recursive!(26, $inner) }.await };
(26, $inner:expr) => { async { async_recursive!(25, $inner) }.await };
(25, $inner:expr) => { async { async_recursive!(24, $inner) }.await };
(24, $inner:expr) => { async { async_recursive!(23, $inner) }.await };
(23, $inner:expr) => { async { async_recursive!(22, $inner) }.await };
(22, $inner:expr) => { async { async_recursive!(21, $inner) }.await };
(21, $inner:expr) => { async { async_recursive!(20, $inner) }.await };
(20, $inner:expr) => { async { async_recursive!(19, $inner) }.await };
(19, $inner:expr) => { async { async_recursive!(18, $inner) }.await };
(18, $inner:expr) => { async { async_recursive!(17, $inner) }.await };
(17, $inner:expr) => { async { async_recursive!(16, $inner) }.await };
(16, $inner:expr) => { async { async_recursive!(15, $inner) }.await };
(15, $inner:expr) => { async { async_recursive!(14, $inner) }.await };
(14, $inner:expr) => { async { async_recursive!(13, $inner) }.await };
(13, $inner:expr) => { async { async_recursive!(12, $inner) }.await };
(12, $inner:expr) => { async { async_recursive!(11, $inner) }.await };
(11, $inner:expr) => { async { async_recursive!(10, $inner) }.await };
(10, $inner:expr) => { async { async_recursive!(9, $inner) }.await };
(9, $inner:expr) => { async { async_recursive!(8, $inner) }.await };
(8, $inner:expr) => { async { async_recursive!(7, $inner) }.await };
(7, $inner:expr) => { async { async_recursive!(6, $inner) }.await };
(6, $inner:expr) => { async { async_recursive!(5, $inner) }.await };
(5, $inner:expr) => { async { async_recursive!(4, $inner) }.await };
(4, $inner:expr) => { async { async_recursive!(3, $inner) }.await };
(3, $inner:expr) => { async { async_recursive!(2, $inner) }.await };
(2, $inner:expr) => { async { async_recursive!(1, $inner) }.await };
(1, $inner:expr) => { async { async_recursive!(0, $inner) }.await };
(0, $inner:expr) => { async { h19(&String::from("owo"), &0).await; $inner }.await };
}
async fn f() {
async_recursive!(14, println!("hello"));
}
fn main() {
let _ = f();
}
```
r? `@eddyb` requires a perf run.
2020-09-22 22:52:07 +00:00
Bastian Kauschke
2f893e458a
review
2020-09-21 23:25:52 +02:00
Bram van den Heuvel
ab83d372ed
Add an unused field of type Option<DefId>
to ParamEnv
struct.
2020-09-21 09:39:26 +02:00
Bastian Kauschke
30cbc97296
words
2020-09-19 22:27:52 +02:00
Bastian Kauschke
d4039c55c9
wip emit errors during AbstractConst building
2020-09-19 22:17:52 +02:00
Bastian Kauschke
1146c39da7
cache types during normalization
2020-09-19 17:27:13 +02:00
bors
fd702d2919
Auto merge of #76886 - Aaron1011:fix/ensure-stack-predicate, r=Mark-Simulacrum
...
Wrap recursive predicate evaluation with `ensure_sufficient_stack`
I haven't been able to come up with a minimized test case for #76770 ,
but this fixes a stack overflow in rustc as well.
2020-09-19 09:21:22 +00:00
Aaron Hill
6a96aea36a
Wrap recursive predicate evaluation with ensure_sufficient_stack
...
I haven't been able to come up with a minimized test case for #76770 ,
but this fixes a stack overflow in rustc as well.
2020-09-18 12:24:42 -04:00
Bastian Kauschke
b7641209d7
add const-evaluatable_checked
check back in
2020-09-18 17:36:11 +02:00
Bastian Kauschke
09e6254496
review, small cleanup
2020-09-18 17:11:34 +02:00
Bastian Kauschke
1b275d08ad
document const_evaluatable
2020-09-18 17:11:34 +02:00
Bastian Kauschke
7fff155d2a
remove allow(warnings)
2020-09-18 17:11:34 +02:00
Bastian Kauschke
30ff1ef3d0
support const_evaluatable_checked across crate boundaries
2020-09-18 17:11:34 +02:00
Bastian Kauschke
c7d16df1d8
add function calls
2020-09-18 17:11:34 +02:00
Bastian Kauschke
d1294e0ce2
allow unary operations and ignore StorageLive/Dead stmts
2020-09-18 17:11:34 +02:00
Bastian Kauschke
5a277822a5
use newtype_index for abstract_const::NodeId
2020-09-18 17:11:34 +02:00
Bastian Kauschke
f24d532749
refactor AbstractConstBuilder
2020-09-18 17:11:34 +02:00
Bastian Kauschke
c3a772f55f
use abstract consts when unifying ConstKind::Unevaluated
2020-09-18 17:11:34 +02:00
Bastian Kauschke
d327fa112b
initial working state
2020-09-18 16:25:25 +02:00
Tyler Mandry
a6c4d30c7b
Rollup merge of #76756 - matthiaskrgr:cl123ppy, r=Dylan-DPC
...
fix a couple of stylistic clippy warnings
namely:
clippy::redundant_pattern_matching
clippy::redundant_pattern
clippy::search_is_some
clippy::filter_next
clippy::into_iter_on_ref
clippy::clone_on_copy
clippy::needless_return
2020-09-16 12:24:17 -07:00
Ralf Jung
0bcc96dd3d
Rollup merge of #76641 - nox:pointee-random-stuff, r=eddyb
...
Some cleanup changes and commenting
r? @nikomatsakis
Cc @eddyb
2020-09-16 08:25:00 +02:00
Dylan DPC
fa4cfeb597
Rollup merge of #75304 - Aaron1011:feature/diag-deref-move-out, r=estebank
...
Note when a a move/borrow error is caused by a deref coercion
Fixes #73268
When a deref coercion occurs, we may end up with a move error if the
base value has been partially moved out of. However, we do not indicate
anywhere that a deref coercion is occuring, resulting in an error
message with a confusing span.
This PR adds an explicit note to move errors when a deref coercion is
involved. We mention the name of the type that the deref-coercion
resolved to, as well as the `Deref::Target` associated type being used.
2020-09-16 01:30:32 +02:00
Matthias Krüger
73d4171ea6
fix a couple of stylistic clippy warnings
...
namely:
clippy::redundant_pattern_matching
clippy::redundant_pattern
clippy::search_is_some
clippy::filter_next
clippy::into_iter_on_ref
clippy::clone_on_copy
clippy::needless_return
2020-09-15 22:44:54 +02:00
bors
7402a39447
Auto merge of #76244 - vandenheuvel:remove__paramenv__def_id, r=nikomatsakis
...
Removing the `def_id` field from hot `ParamEnv` to make it smaller
This PR addresses https://github.com/rust-lang/rust/issues/74865 .
2020-09-13 16:28:22 +00:00
Anthony Ramine
caf6c92d19
Clean up some language trait items comparisons
2020-09-12 18:35:57 +02:00
Aaron Hill
d18b4bb7a7
Note when a a move/borrow error is caused by a deref coercion
...
Fixes #73268
When a deref coercion occurs, we may end up with a move error if the
base value has been partially moved out of. However, we do not indicate
anywhere that a deref coercion is occuring, resulting in an error
message with a confusing span.
This PR adds an explicit note to move errors when a deref coercion is
involved. We mention the name of the type that the deref-coercion
resolved to, as well as the `Deref::Target` associated type being used.
2020-09-10 20:56:20 -04:00
Bastian Kauschke
300b0acb85
fix tidy, small cleanup
2020-09-10 09:48:02 +02:00
Bastian Kauschke
8667f93040
implement const_evaluatable_checked
feature MVP
2020-09-10 08:52:02 +02:00
Bram van den Heuvel
7dad29d686
Remove def_id field from ParamEnv
2020-09-09 10:14:31 +02:00
Bastian Kauschke
1dd00e60b9
add tracking issue, fix rebase
2020-09-08 16:39:12 +02:00
Bastian Kauschke
c10ad0d888
review
2020-09-08 16:39:12 +02:00
Bastian Kauschke
c81935e6df
make ConstEvaluatable
more strict
2020-09-08 16:39:12 +02:00
LeSeulArtichaut
4d28a82c59
ty.flags -> ty.flags()
2020-09-04 18:28:20 +02:00
LeSeulArtichaut
3e14b684dd
Change ty.kind to a method
2020-09-04 17:47:51 +02:00
Dan Aloni
51742be6d8
specialization_graph: avoid trimmed paths for OverlapError
2020-09-03 14:09:50 +03:00
Dan Aloni
07e7823c01
pretty: trim paths of unique symbols
...
If a symbol name can only be imported from one place for a type, and
as long as it was not glob-imported anywhere in the current crate, we
can trim its printed path and print only the name.
This has wide implications on error messages with types, for example,
shortening `std::vec::Vec` to just `Vec`, as long as there is no other
`Vec` importable anywhere.
This adds a new '-Z trim-diagnostic-paths=false' option to control this
feature.
On the good path, with no diagnosis printed, we should try to avoid
issuing this query, so we need to prevent trimmed_def_paths query on
several cases.
This change also relies on a previous commit that differentiates
between `Debug` and `Display` on various rustc types, where the latter
is trimmed and presented to the user and the former is not.
2020-09-02 22:26:37 +03:00
Dan Aloni
75a042e74b
Fix some unwanted uses of Debug formatting on user-facing messages
...
While formatting for user diagnostics used `Display` for all most cases,
some small amount of cases used `Debug` instead. Until now, `Display`
and `Debug` yielded the same output for many types. However, with path
trimming, we want to show a shorter path for the user, these cases need
fixing.
2020-09-02 10:40:10 +03:00
kadmin
8894b366fd
Remove error message in specific case
...
In the case that a trait is not implemented for an ADT with type errors, cancel the error.
2020-08-30 19:39:51 +00:00
mark
9e5f7d5631
mv compiler to compiler/
2020-08-30 18:45:07 +03:00