Oli Scherer
a848c4ba3f
Avoid storing the ImplPolarity and Constness next to a TraitRef and use TraitPredicate instead
2021-11-29 21:19:49 +08:00
bors
18cae2680f
Auto merge of #88441 - jackh726:closure_norm, r=nikomatsakis
...
Normalize obligations for closure confirmation
Based on #90017
Fixes #74261
Fixes #71955
Fixes #88459
r? `@nikomatsakis`
2021-11-06 01:12:39 +00:00
lcnr
b40aa64e48
stabilize relaxed_struct_unsize
2021-10-30 15:56:02 +02:00
Santiago Pastorino
8b0bfb0dcb
Consider negative polarity on overlap check
2021-10-20 12:10:45 -03:00
jackh726
cacc3ee801
Normalize obligations for closure confirmation
2021-10-18 12:35:42 -04:00
Manish Goregaokar
743e842afb
Rollup merge of #88963 - fee1-dead:const-iterator, r=oli-obk
...
Coerce const FnDefs to implement const Fn traits
You can now pass a FnDef to a function expecting `F` where `F: ~const FnTrait`.
r? ``@oli-obk``
``@rustbot`` label T-compiler F-const_trait_impl
2021-10-01 14:46:48 -07:00
Oli Scherer
9b5aa063d8
More tracing instrumentation
2021-09-28 12:28:22 +00:00
jackh726
c065f57111
Remove ToPolyTraitRef impl for TraitRef
2021-09-15 22:55:10 -04:00
jackh726
be76bdf905
Remove ToPredicate impls that use Binder::dummy
2021-09-15 20:54:50 -04:00
Deadbeef
f8aa73d3dd
Coerce const FnDefs to implement const Fn traits
2021-09-15 11:48:27 +00:00
Deadbeef
a13b13ff46
Const drop selection candidates
2021-09-09 05:21:31 +00:00
Deadbeef
80e1ee5aee
Add ty::BoundConstness
2021-08-27 06:49:18 +00:00
lcnr
cc47998e28
add tcx
to fn walk
2021-08-26 11:00:30 +02:00
Frank Steffahn
bf88b113ea
Fix typos “a”→“an”
2021-08-22 15:35:11 +02:00
Charles Lew
6b1c52ff25
Fold vtable_trait_upcasting_coercion_new_vptr_slot
logic into obligation processing.
2021-08-18 13:00:27 +08:00
Charles Lew
1e605023ec
Properly generate multiple candidates for trait upcasting coercion.
2021-08-18 13:00:27 +08:00
Charles Lew
fb4e0a0972
Implement trait upcasting coercion type-checking.
2021-07-31 00:51:39 +08:00
Charles Lew
a86d3a7e45
Refactor to make interpreter and codegen backend neutral to vtable internal representation.
2021-06-15 01:59:00 +08:00
Jack Huey
857cb4de20
Make traits with GATs not object safe
2021-04-27 14:34:23 -04:00
Jack Huey
62a49c3bb8
Add tcx lifetime to Binder
2021-03-31 10:13:57 -04:00
Jack Huey
4955d755d3
Some rebinds and dummys
2021-03-31 10:05:32 -04:00
Simon Sapin
696b239f72
Add ptr::Pointee
trait (for all types) and ptr::metadata
function
...
RFC: https://github.com/rust-lang/rfcs/pull/2580
2021-02-15 14:27:12 +01:00
Bastian Kauschke
031cce8cfc
add relaxed_struct_unsize
feature gate
2021-02-04 00:00:41 +01:00
Bastian Kauschke
50e394a05e
relax adt unsizing requirements
2021-02-04 00:00:28 +01:00
Jack Huey
3dea68de1d
Review changes
2021-01-16 18:56:37 -05:00
bors
1b6b06a03a
Auto merge of #80132 - matthewjasper:revert-eval-order, r=nikomatsakis
...
Revert change to trait evaluation order
This change breaks some code and doesn't appear to enable any new code.
closes #79902
r? `@nikomatsakis`
2020-12-19 16:20:22 +00:00
Jack Huey
5e7095850c
More rebinds
2020-12-19 04:26:35 -05:00
Matthew Jasper
3e31ffda97
Revert change to evaluation order
...
This change breaks some code and doesn't appear to enable any new code.
2020-12-17 20:16:10 +00:00
bors
eb4fc71dc9
Auto merge of #79945 - jackh726:existential_trait_ref, r=nikomatsakis
...
Move binder for dyn to each list item
This essentially changes `ty::Binder<&'tcx List<ExistentialTraitRef>>` to `&'tcx List<ty::Binder<ExistentialTraitRef>>`.
This is a first step in moving the `dyn Trait` representation closer to Chalk, which we've talked about in `@rust-lang/wg-traits.`
r? `@nikomatsakis`
2020-12-17 18:21:20 +00:00
Matthias Krüger
db6c50998c
don't clone types that are copy (clippy::clone_on_copy)
2020-12-11 23:02:19 +01:00
Jack Huey
ed80815bf2
Move binder for dyn to each list item
2020-12-11 15:02:46 -05:00
Jonas Schievink
ee6f42ba94
Thread Constness
through selection
2020-11-22 02:13:53 +01:00
Bastian Kauschke
2bf93bd852
compiler: fold by value
2020-11-16 22:34:57 +01:00
Matthew Jasper
50dde2e4d8
Normalize when finding trait object candidates
2020-10-22 08:18:29 +01:00
Matthew Jasper
6c43a64931
Fix ICE from projection cycle
...
Cycles in normalization can cause evaluations to change from Unknown to
Err. This means that some selection that were applicable no longer are.
To avoid this:
* Selection candidates that are known to be applicable are prefered
over candidates that are not.
* We don't ICE if a candidate is no longer applicable.
2020-10-21 19:43:20 +01:00
Matthew Jasper
b8d2560dca
Use tracing spans in rustc_trait_selection
2020-10-11 16:08:23 +01:00
Matthew Jasper
022c148fcd
Fix tests from rebase
2020-10-06 11:19:33 +01:00
Matthew Jasper
27534b3932
Fix rebase
2020-10-06 11:19:33 +01:00
Matthew Jasper
e42c97919c
Don't require lifetime super-bounds on traits apply to trait objects of that trait
2020-10-06 11:19:32 +01:00
Matthew Jasper
e674cf0200
Normalize super trait bounds when confirming object candidates
2020-10-06 11:19:32 +01:00
Matthew Jasper
0dfa6ff3be
Avoid cycles from projection bounds
...
Only check the own predicates of associated types when confirming
projection candidates.
Also consider implied bounds when comparing trait and impl methods.
2020-10-06 11:19:32 +01:00
Matthew Jasper
596d6c4b3b
Avoid cycle with projections from object types
...
Normalizing `<dyn Iterator<Item = ()> as Iterator>::Item` no longer
requires selecting `dyn Iterator<Item = ()>: Iterator`. This was
previously worked around by using a special type-folder to normalize
things.
2020-10-06 11:19:31 +01:00
Matthew Jasper
34e5a4992c
Normalize projection bounds when considering candidates
...
This unfortunately requires some winnowing hacks to avoid
now ambiguous candidates.
2020-10-06 11:19:31 +01:00
Matthew Jasper
cfee49593d
Handle multiple applicable projection candidates
2020-10-06 11:19:31 +01:00
Matthew Jasper
bc08b791bc
Fix bugs in evaluating WellFormed predicates
...
- List the nestsed obligations in an order that works with the
single pass used by evaluation
- Propagate recursion depth correctly
2020-10-06 11:19:31 +01:00
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
21eccbb587
Fix ICE
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
d4d9e7f67f
Remove unused part of return value from replace_bound_vars_with_placeholders
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