Commit Graph

97158 Commits

Author SHA1 Message Date
bors
8996328ebf Auto merge of #63319 - Centril:rollup-d89rmey, r=Centril
Rollup of 14 pull requests

Successful merges:

 - #61457 (Implement DoubleEndedIterator for iter::{StepBy, Peekable, Take})
 - #63017 (Remove special code-path for handing unknown tokens)
 - #63184 (Explaining the reason why validation is performed in to_str of path.rs)
 - #63230 (Make use of possibly uninitialized data [E0381] a hard error)
 - #63260 (fix UB in a test)
 - #63264 (Revert "Rollup merge of #62696 - chocol4te:fix_#62194, r=estebank")
 - #63272 (Some more libsyntax::attr cleanup)
 - #63285 (Remove leftover AwaitOrigin)
 - #63287 (Don't store &Span)
 - #63293 (Clarify align_to's requirements and obligations)
 - #63295 (improve align_offset docs)
 - #63299 (Make qualify consts in_projection use PlaceRef)
 - #63312 (doc: fix broken sentence)
 - #63315 (Fix #63313)

Failed merges:

r? @ghost
2019-08-06 08:21:32 +00: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
5710a23d46
Rollup merge of #63312 - tshepang:doc-fix, r=Centril
doc: fix broken sentence

Also, the move was done nearly a year ago
2019-08-06 08:17:52 +02:00
Mazdak Farrokhzad
5a3359d7cc
Rollup merge of #63299 - spastorino:in-projection-use-ref, r=oli-obk
Make qualify consts in_projection use PlaceRef

r? @oli-obk
2019-08-06 08:17:50 +02:00
Mazdak Farrokhzad
d7b49a8a85
Rollup merge of #63295 - RalfJung:align_offset, r=dtolnay
improve align_offset docs

Cc @shepmaster
2019-08-06 08:17:48 +02:00
Mazdak Farrokhzad
000d646424
Rollup merge of #63293 - shepmaster:align-to-doc, r=RalfJung
Clarify align_to's requirements and obligations

Based on discussions with @RalfJung around my misunderstandings when using this.

r? @RalfJung
2019-08-06 08:17:47 +02:00
Mazdak Farrokhzad
505d68e739
Rollup merge of #63287 - Mark-Simulacrum:span-no-ref, r=Centril
Don't store &Span

This is just needless indirection.
2019-08-06 08:17:45 +02:00
Mazdak Farrokhzad
2301ecd429
Rollup merge of #63285 - Mark-Simulacrum:rm-await-origin, r=Centril
Remove leftover AwaitOrigin

This was missed in PR #62293.
2019-08-06 08:17:44 +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
046936aeaf
Rollup merge of #63260 - RalfJung:ptr-test, r=matklad
fix UB in a test

We used to compare two mutable references that were supposed to point to the same thing. That's no good.

Compare them as raw pointers instead.
2019-08-06 08:17:39 +02:00
Mazdak Farrokhzad
ab7155dd97
Rollup merge of #63230 - tmandry:disallow-possibly-uninitialized, r=Centril
Make use of possibly uninitialized data [E0381] a hard error

This is one of the behaviors we no longer allow in NLL. Since it can
lead to undefined behavior, I think it's definitely worth making it a
hard error without waiting to turn off migration mode (#58781).

Closes #60450.

My ulterior motive here is making it impossible to leave variables
partially initialized across a yield (see #60889, discussion at #63035), so
tests are included for that.

cc #54987

---

I'm not sure if bypassing the buffer is a good way of doing this. We could also make a `force_errors_buffer` or similar that gets recombined with all the errors as they are emitted. But this is simpler and seems fine to me.

r? @Centril
cc @cramertj @nikomatsakis @pnkfelix @RalfJung
2019-08-06 08:17:38 +02:00
Mazdak Farrokhzad
e98823025f
Rollup merge of #63184 - JasonShin:master, r=sfackler
Explaining the reason why validation is performed in to_str of path.rs

I thought it's good to explain the reason for the validation during the conversion between Path/PathBuffer into str, which explains the reason for returning an Option at this point (good for beginners who are reading through the docs).
2019-08-06 08:17:36 +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
fe998dbfe4
Rollup merge of #61457 - timvermeulen:double_ended_iters, r=scottmcm
Implement DoubleEndedIterator for iter::{StepBy, Peekable, Take}

Now that `DoubleEndedIterator::nth_back` has landed, `StepBy` and `Take` can have an efficient `DoubleEndedIterator` implementation. I don't know if there was any particular reason for `Peekable` not having a `DoubleEndedIterator` implementation, but it's quite trivial and I don't see any drawbacks to having it.

I'm not very happy about the implementation of `Peekable::try_rfold`, but I didn't see another way to only take the value out of `self.peeked` in case `self.iter.try_rfold` didn't exit early.

I only added `Peekable::rfold` (in addition to `try_rfold`) because its `Iterator` implementation has both `fold` and `try_fold` (and for similar reasons I added `Take::try_rfold` but not `Take::rfold`). Do we have any guidelines on whether we want both? If we do want both, maybe we should investigate which iterator adaptors override `try_fold` but not `fold` and add the missing implementations. At the moment I think that it's better to always have iterator adaptors implement both, because some iterators have a simpler `fold` implementation than their `try_fold` implementation.

The tests that I added may not be sufficient because they're all just existing tests where `next`/`nth`/`fold`/`try_fold` are replaced by their DEI counterparts, but I do think all paths are covered. Is there anything in particular that I should probably also test?
2019-08-06 08:17:31 +02:00
bors
766b10a8d5 Auto merge of #62987 - Thomasdezeeuw:ioslice-advance, r=Thomasdezeeuw
Add {IoSlice, IoSliceMut}::advance

API inspired by the [`Buf::advance`](https://docs.rs/bytes/0.4.12/bytes/trait.Buf.html#tymethod.advance) method found in the [bytes](https://docs.rs/bytes) crate.

Closes #62726.
2019-08-06 04:43:03 +00:00
Mazdak Farrokhzad
ee48f820bf
Update README.md 2019-08-06 04:01:55 +02:00
Tshepang Lekhonkhobe
175eb9ca93 doc: fix broken sentence
Also, the move was done nearly a year ago
2019-08-06 02:36:59 +02:00
Jake Goulding
571e22d7e8 Clarify align_to's requirements and obligations 2019-08-05 19:44:07 -04:00
Tyler Mandry
9058bf2100 Make use of possibly uninitialized data a hard error
This is one of the behaviors we no longer allow in NLL. Since it can
lead to undefined behavior, I think it's definitely worth making it a
hard error without waiting to turn off migration mode (#58781).

Closes #60450.

My ulterior motive here is making it impossible to leave variables
partially initialized across a yield (see discussion at #63035), so
tests are included for that.
2019-08-05 14:57:12 -07:00
Santiago Pastorino
30910eef36 Make qualify consts in_projection use PlaceRef 2019-08-05 21:39:22 +02:00
bors
c4715198b5 Auto merge of #59369 - oli-obk:unwrap_usICE, r=eddyb,nikomatsakis
`unwrap_usize` should at least try to evaluate the underlying constant

r? @eddyb

fixes #59016

I know that I'm still using `ParamEnv` wrongly, but that's a preexisting issue not amplified by this PR.
2019-08-05 19:06:50 +00:00
Ralf Jung
1f018636e3 improve align_offset docs 2019-08-05 18:38:10 +02:00
Oliver Scherer
bd57498e7d Get rid of one more useless lift invocation 2019-08-05 17:49:40 +02:00
Oliver Scherer
f2079338b5 Update to new passing-ui-test scheme 2019-08-05 17:48:05 +02:00
Oliver Scherer
d1f62b92eb Prevent array length printing cycle with debug assertions 2019-08-05 17:48:05 +02:00
Oliver Scherer
7385f2177f Fixup: eval_usize needs param env 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
f9e29b279c Add regression tests 2019-08-05 17:48:04 +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
bors
f6ecdc2f61 Auto merge of #61491 - stjepang:impls-for-accesserror, r=dtolnay
Add a few trait impls for AccessError
2019-08-05 15:30:40 +00:00
Mark Rousskov
288b4e9078 Don't store &Span
This is just needless indirection.
2019-08-05 10:29:06 -04:00
Ralf Jung
90b95cf53f
fix slice comparison
Co-Authored-By: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-05 15:30:08 +02:00
Mark Rousskov
fbf93d4931 Remove leftover AwaitOrigin
This was missed in PR #62293.
2019-08-05 09:14:51 -04:00
Mark Rousskov
8849149745 Make mk_attr_id private to libsyntax 2019-08-05 08:48:22 -04:00
Mark Rousskov
24a491f40c Drop explicit span argument from mk_name_value_item 2019-08-05 08:48:22 -04:00
Mark Rousskov
ab3fb1e775 Drop span argument from mk_list_item 2019-08-05 08:45:00 -04:00
Aleksey Kladov
b3e8c8bbe2 adapt rustdoc to infailable lexer 2019-08-05 13:15:12 +03:00
Aleksey Kladov
58ac81a60f add unknown token 2019-08-05 13:15:11 +03:00
Aleksey Kladov
b5e35b128e remove special code path for unknown tokens 2019-08-05 13:15:11 +03:00
Ralf Jung
4e51ef7ccd
Test content, not value
Co-Authored-By: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-05 11:21:15 +02: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
bors
d3f8a0b5df Auto merge of #63213 - varkor:itemkind-tyalias, r=Centril
Rename `ItemKind::Ty` to `ItemKind::TyAlias`

The current name is not entirely clear without context and `TyAlias` is consistent with `ItemKind::TraitAlias`.
2019-08-04 20:03:28 +00: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