Commit graph

17439 commits

Author SHA1 Message Date
Mazdak Farrokhzad
6743ad6726
Rollup merge of #63350 - iluuu1994:use-associated-type-bounds, r=Centril
Use associated_type_bounds where applicable - closes #61738
2019-08-10 08:13:19 +02:00
Esteban Küber
52da091ee6 Differentiate between tuple structs and tuple variants 2019-08-09 07:18:05 -07:00
Esteban Küber
4fbbf99c50 Be more accurate when mentioning type of found match arms 2019-08-09 07:18:05 -07:00
Ilija Tovilo
3a6a29b4ec
Use associated_type_bounds where applicable - closes #61738 2019-08-08 22:39:15 +02:00
Mazdak Farrokhzad
83fbf620a0
Rollup merge of #63360 - brson:cz-help, r=Mark-Simulacrum
Use consistent capitalization in -C/-Z help

This code could also use a pass to consistify the grammar, but not by me atm.
2019-08-08 07:35:39 +02:00
bors
476af31d59 Auto merge of #62457 - zackmdavis:minimax_search_and_the_structure_of_cognition, r=varkor
pretty-pretty extremal constants!

(A resurrection of the defunct #57073.)

While many programmers may intuitively appreciate the significance of "magic numbers" like −2147483648, Rust is about empowering everyone to build reliable and efficient software! It's a bit more legible to print the constant names (even noisy fully-qualified-paths thereof).

The bit-manipulation methods mirror those in `librustc_mir::hair::pattern::_match::all_constructors`; thanks to the immortal Varkor for guidance.

Resolves #56393.

r? @varkor
2019-08-07 22:07:24 +00:00
Brian Anderson
c03077b23a Use consistent capitalization in -C/-Z help 2019-08-07 14:51:49 -07:00
bors
d4abb08be6 Auto merge of #61919 - alexreg:fix-atb-1, r=nikomatsakis
Fix for "ambiguous associated type" issue with ATBs

Fixes #61752.

r? @nikomatsakis

CC @Centril
2019-08-07 09:33:34 +00:00
bors
5421d94960 Auto merge of #63152 - estebank:big-array, r=oli-obk
Always error on `SizeOverflow` during mir evaluation

Fix #55878, fix #25116.

r? @oli-obk
2019-08-07 04:28:08 +00:00
Zack M. Davis
d1cdb02e4d pretty-pretty extremal constants!
While many programmers may intuitively appreciate the significance of
"magic numbers" like −2147483648, Rust is about empowering everyone to
build reliable and efficient software! It's a bit more legible to
print the constant names (even noisy fully-qualified-paths thereof).

The bit-manipulation methods mirror those in
`librustc_mir::hair::pattern::_match::all_constructors`; thanks to the
immortal Varkor for guidance.

Resolves #56393.
2019-08-06 21:00:46 -07:00
Mazdak Farrokhzad
fb1f57e0e5
Rollup merge of #63034 - tmandry:reduce-generator-size-regressions, r=cramertj
Fix generator size regressions due to optimization

I tested the generator optimizations in #60187 and #61922 on the Fuchsia
build, and noticed that some small generators (about 8% of the async fns
in our build) increased in size slightly.

This is because in #60187 we split the fields into two groups, a
"prefix" non-overlap region and an overlap region, and lay them out
separately. This can introduce unnecessary padding bytes between the two
groups.

In every single case in the Fuchsia build, it was due to there being
only a single variant being used in the overlap region. This means that
we aren't doing any overlapping, period. So it's better to combine the
two regions into one and lay out all the fields at once, which is what
this change does.

r? @cramertj
cc @eddyb @Zoxc
2019-08-07 01:39:25 +02:00
Tyler Mandry
b40788e89f Fix generator size regressions due to optimization
I tested the generator optimizations in #60187 and #61922 on the Fuchsia
build, and noticed that some small generators (about 8% of the async fns
in our build) increased in size slightly.

This is because in #60187 we split the fields into two groups, a
"prefix" non-overlap region and an overlap region, and lay them out
separately. This can introduce unnecessary padding bytes between the two
groups.

In every single case in the Fuchsia build, it was due to there being
only a single variant being used in the overlap region. This means that
we aren't doing any overlapping, period. So it's better to combine the
two regions into one and lay out all the fields at once, which is what
this change does.
2019-08-06 14:16:47 -07:00
Mazdak Farrokhzad
c27405f829
Rollup merge of #63315 - rust-lang:fix-63313, r=alexreg
Fix #63313

Fixes #63313

r? @alexreg
2019-08-06 08:17:53 +02:00
Mazdak Farrokhzad
b2603d6386
Rollup merge of #63272 - Mark-Simulacrum:clean-attr, r=petrochenkov
Some more libsyntax::attr cleanup

Much smaller patch than the last one, mostly just finishing up by removing some Span arguments.

r? @petrochenkov
2019-08-06 08:17:42 +02:00
Mazdak Farrokhzad
61da2f4d19
Rollup merge of #63264 - arielb1:revert-private-coherence-errors, r=estebank
Revert "Rollup merge of #62696 - chocol4te:fix_#62194, r=estebank"

This reverts commit df21a6f040 (#62696), reversing
changes made to cc16d04869.

That PR makes error messages worse than before, and we couldn't come up with a way of actually making them better, so revert it for now. Any idea for making this error message better is welcome!

Fixes #63145.

r? @estebank
2019-08-06 08:17:41 +02:00
Mazdak Farrokhzad
61e270ab48
Rollup merge of #63017 - matklad:no-fatal, r=petrochenkov
Remove special code-path for handing unknown tokens

In `StringReader`, we have a buffer of fatal errors, which is used only in a single case: when we see something which is not a reasonable token at all, like `🦀`. I think a more straightforward thing to do here is to produce an explicit error token in this case, and let the next layer (the parser), deal with it.

However currently this leads to duplicated error messages. What should we do with this? Naively, I would think that emitting (just emitting, not raising) `FatalError` should stop other errors, but looks like this is not the case? We can also probably tweak parser on the case-by-case basis, to avoid emitting "expected" errors if the current token is an `Err`. I personally also fine with cascading errors in this case: it's quite unlikely that you actually type a fully invalid token.

@petrochenkov, which approach should we take to fight cascading errors?
2019-08-06 08:17:34 +02:00
Mazdak Farrokhzad
ee48f820bf
Update README.md 2019-08-06 04:01:55 +02:00
Oliver Scherer
bd57498e7d Get rid of one more useless lift invocation 2019-08-05 17:49:40 +02:00
Oliver Scherer
d1f62b92eb Prevent array length printing cycle with debug assertions 2019-08-05 17:48:05 +02:00
Oliver Scherer
2d86d040a5 Address comment and formatting nits 2019-08-05 17:48:05 +02:00
Oliver Scherer
f4f957d00b Clear the ParamEnv where its information is irrelevant 2019-08-05 17:48:05 +02:00
Oliver Scherer
7710820d18 Fiddle param env through to try_eval_bits in most places 2019-08-05 17:48:05 +02:00
Oliver Scherer
9b87d22ea8 Don't abort on unevaluated constants without at least tryting to eval them 2019-08-05 17:48:04 +02:00
Oliver Scherer
437f017e2e Clean up the ty::Const::assert* methods 2019-08-05 17:48:04 +02:00
Alexander Regueiro
709b924643 Ensure type_param_predicates fn only returns predicates for type param with given def-ID. 2019-08-05 15:16:27 +01:00
Alexander Regueiro
8f9ca24f55 A few cosmetic improvements. 2019-08-05 15:16:27 +01:00
Mark Rousskov
ab3fb1e775 Drop span argument from mk_list_item 2019-08-05 08:45:00 -04:00
Aleksey Kladov
58ac81a60f add unknown token 2019-08-05 13:15:11 +03:00
bors
4be0675589 Auto merge of #63079 - RalfJung:ctfe-no-align, r=oli-obk
CTFE: simplify ConstValue by not checking for alignment

I hope the test suite actually covers the problematic cases here?

r? @oli-obk

Fixes https://github.com/rust-lang/rust/issues/61952
2019-08-05 08:16:51 +00:00
bors
e1d7e4ae82 Auto merge of #63248 - petrochenkov:nomarker, r=matthewjasper
Move special treatment of `derive(Copy, PartialEq, Eq)` from expansion infrastructure to elsewhere

As described in https://github.com/rust-lang/rust/pull/62086#issuecomment-515195477.

Reminder:
- `derive(PartialEq, Eq)` makes the type it applied to a "structural match" type, so constants of this type can be used in patterns (and const generics in the future).
- `derive(Copy)` notifies other derives that the type it applied to implements `Copy`, so `derive(Clone)` can generate optimized code and other derives can generate code working with `packed` types and types with `rustc_layout_scalar_valid_range` attributes.

First, the special behavior is now enabled after properly resolving the derives, rather than after textually comparing them with `"Copy"`, `"PartialEq"` and `"Eq"` in `fn add_derived_markers`.

The markers are no longer kept as attributes in AST since derives cannot modify items and previously did it through hacks in the expansion infra.
Instead, the markers are now kept in a "global context" available from all the necessary places, namely - resolver.

For `derive(PartialEq, Eq)` the markers are created by the derive macros themselves and then consumed during HIR lowering to add the `#[structural_match]` attribute in HIR.
This is still a hack, but now it's a hack local to two specific macros rather than affecting the whole expansion infra.
Ideally we should find the way to put `#[structural_match]` on the impls rather than on the original item, and then consume it in `rustc_mir`, then no hacks in expansion and lowering will be required.
(I'll make an issue about this for someone else to solve, after this PR lands.)

The marker for `derive(Copy)` cannot be emitted by the `Copy` macro itself because we need to know it *before* the `Copy` macro is expanded for expanding other macros.
So we have to do it in resolve and block expansion of any derives in a `derive(...)` container until we know for sure whether this container has `Copy` in it or not.
Nasty stuff.

r? @eddyb or @matthewjasper
2019-08-05 04:36:51 +00:00
bors
11a51488f0 Auto merge of #63245 - RalfJung:miri-error, r=oli-obk
More Miri error tweaks

* Add `err_` version of the `_format!` macros
* Add `UbExperimental` variant so that Miri can mark some UB as experimental (e.g. Stacked Borrows)

r? @oli-obk
2019-08-05 00:57:19 +00:00
Esteban Küber
bdd79b849e tweak output and tests 2019-08-04 12:23:05 -07:00
varkor
fd819d02d7 Rename Target::Ty to Target::TyAlias 2019-08-04 20:17:09 +01:00
varkor
63659ca9f6 Rename ItemImplKind::Type to ItemImplKind::TyAlias 2019-08-04 20:16:41 +01:00
varkor
8aa45c65d8 Rename ItemKind::Ty to ItemKind::TyAlias 2019-08-04 20:13:37 +01:00
Ariel Ben-Yehuda
95f29aa81b Revert "Rollup merge of #62696 - chocol4te:fix_#62194, r=estebank"
This reverts commit df21a6f040, reversing
changes made to cc16d04869.
2019-08-04 19:52:43 +03:00
Ralf Jung
b9d4c759f3 AssumptionNotHeld is used only once in Miri and never caught... remove from enum 2019-08-04 11:59:14 +02:00
Ralf Jung
18daa766f0 move AssumptionNotHeld to UB 2019-08-04 11:21:41 +02:00
Esteban Küber
23400677d7 Simplify change to layout_of 2019-08-03 22:04:39 -07:00
Esteban Küber
db099fb491 Point to local place span on "type too big" error 2019-08-03 21:59:51 -07:00
Vadim Petrochenkov
2a9b75281b Move special treatment of derive(Copy, PartialEq, Eq) from expansion infrastructure to elsewhere 2019-08-03 23:57:35 +03:00
Esteban Küber
2c5684208c avoid mutable state and override main message 2019-08-03 13:37:44 -07:00
bors
6e0d27d936 Auto merge of #63059 - Centril:sound-bind-by-move, r=matthewjasper
Make `#![feature(bind_by_move_pattern_guards)]` sound without `#[feature(nll)]`

Implements https://github.com/rust-lang/rust/issues/15287#issuecomment-507054617 making `#![feature(bind_by_move_pattern_guards)]]` sound without also having `#![feature(nll)]`. The logic here is that if we see a `match` guard, we will refuse to downgrade NLL errors to warnings. This is in preparation for hopefully stabilizing the former feature in https://github.com/rust-lang/rust/pull/63118.

As fall out from the implementation we also:
Fixes https://github.com/rust-lang/rust/issues/31287
Fixes https://github.com/rust-lang/rust/issues/27282

r? @matthewjasper
2019-08-03 20:11:25 +00:00
Ralf Jung
89a370db0f add variant for experimental UB (like Stacked Borrows) 2019-08-03 20:36:05 +02:00
Ralf Jung
fe08d9e2d2 also add macros for free-form error messages 2019-08-03 20:35:52 +02:00
bors
a457433456 Auto merge of #63234 - Centril:rollup-h9t731z, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #62954 (Fix typo in Delimited::open_tt)
 - #63146 (Cleanup syntax::attr)
 - #63218 (rustbuild: RISC-V is no longer an experimental LLVM target)
 - #63227 (dead_code: Properly inspect fields in struct patterns with type relative paths)
 - #63229 (A bit of Miri error cleanup)

Failed merges:

r? @ghost
2019-08-03 12:20:42 +00:00
Mazdak Farrokhzad
42dfdc5aa5
Rollup merge of #63229 - RalfJung:miri-error, r=oli-obk
A bit of Miri error cleanup

Some cleanup after https://github.com/rust-lang/rust/pull/62969.

r? @oli-obk
Cc @saleemjaffer
2019-08-03 13:12:04 +02:00
Mazdak Farrokhzad
2fd9548039
Rollup merge of #63227 - jakubadamw:issue-63151, r=estebank
dead_code: Properly inspect fields in struct patterns with type relative paths

Closes #63151.
2019-08-03 13:12:02 +02:00
Mazdak Farrokhzad
15b5aacab6
Rollup merge of #63146 - Mark-Simulacrum:clean-attr, r=petrochenkov
Cleanup syntax::attr

Mostly removing needless arguments to constructors

r? @petrochenkov
2019-08-03 13:11:59 +02:00
bors
8e917f4838 Auto merge of #62946 - RalfJung:miri_type_dispatch_first, r=oli-obk
Miri: dispatch first on the type

Based on the fact that Miri now always has intptrcast available, we can change binops and casts to first check the type of the source operand and then decide based on that what to do, instead of considering the value (pointer vs bits) first.
2019-08-03 08:33:07 +00:00