Commit graph

25759 commits

Author SHA1 Message Date
Yuki Okushi
55f15d7655 Add test for issue-44405 2019-08-09 08:37:55 +09:00
Yuki Okushi
642ee70942 Add test for issue-43623 2019-08-09 08:37:40 +09:00
Mazdak Farrokhzad
3de450b686
Rollup merge of #63379 - jackh726:issue-53096, r=Centril,oli-obk
Add test for issue 53096

Closes #53096

r? @oli-obk
2019-08-08 16:33:44 +02:00
Mazdak Farrokhzad
499887ffb9
Rollup merge of #63370 - JohnTitor:fix-ice-63364, r=varkor
Fix ICE #63364

Fixes #63364

r? @estebank cc @varkor
2019-08-08 16:33:41 +02:00
Jack
25a2cf6744 Move test 2019-08-08 10:13:55 -04:00
Jack
b8b8008254 Add test for issue 53096 2019-08-08 09:41:39 -04:00
Mazdak Farrokhzad
4f415fca37
Rollup merge of #63331 - gorup:conditionalinit, r=cramertj
Test conditional initialization validation in async fns

r? @cramertj

Per [paper doc](https://paper.dropbox.com/doc/async.await-Call-for-Tests--AiWF2Nt8tgDiA70qFI~oiLOOAg-nMyZGrra7dz9KcFRMLKJy) calling for async/.await tests, tests are desired for conditionally initialized local variables. This PR hopes to provide tests for that.

#63294 seems to be tracking the items from the paper doc that this PR is related to
#62121 is an open issue asking for more async/.await tests that this relates to

---
👍 executed 2 new tests
👍 tidy
2019-08-08 07:35:35 +02:00
Mazdak Farrokhzad
5277c71e84
Rollup merge of #63259 - JohnTitor:add-tests-for-some-issues, r=Centril
Add tests for some issues

Closes #29265
Closes #37433
Closes #49544

r? @Centril
2019-08-08 07:35:32 +02:00
Mazdak Farrokhzad
3a84c9db5f
Rollup merge of #62994 - iluuu1994:test-for-43398, r=nikomatsakis
Add test for #43398

Closes #43398
2019-08-08 07:35:30 +02:00
Yuki Okushi
e2b3543eab Return early to avoid failing assertion 2019-08-08 13:38:23 +09: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
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
Esteban Küber
3144b0aa04 review comment: reword test comment 2019-08-06 16:51:17 -07:00
Ryan Gorup
811c304029 Test conditional initialization validation in async fns 2019-08-06 16:44:12 -07:00
Mazdak Farrokhzad
051f94d588
Rollup merge of #63310 - gorup:partial-moves, r=cramertj
Tests around moving parts of structs and tuples across await points

r? cramertj

Per the [dropbox paper](https://paper.dropbox.com/doc/async.await-Call-for-Tests--AiR3vlp1s_Kw0yzWZ1sWMnaIAQ-nMyZGrra7dz9KcFRMLKJy) about more tests, it appears there are some tests wanted around local variables (under the section ["Dynamic semantics"](https://paper.dropbox.com/doc/async.await-Call-for-Tests--AiR3vlp1s_Kw0yzWZ1sWMnaIAg-nMyZGrra7dz9KcFRMLKJy#:uid=122335511260129643493892&h2=Dynamic-semantics)). Here is one commit, and I can probably get code up for other scenarios listed there, although I may not have the full background to know what is being targeted by the tests. Please assist me if I'm off course, thanks!

---
- Executed all 4 new tests
- Executed `tidy` command
2019-08-07 01:39:35 +02:00
Mazdak Farrokhzad
7860cf4542
Rollup merge of #63294 - alsuren:async-tests, r=cramertj
tests for async/await drop order

This is just me helping out with https://github.com/rust-lang/rust/issues/62121 where I can.

I'm also going to use this as a public place to collect my thoughts about what has already been done and what hasn't (adding comments to the dropbox paper doc was quickly getting spammy).

I've tried to keep my commit messages similar to the line items on https://paper.dropbox.com/doc/async.await-Call-for-Tests--AiKouT0L41mSnK1741s~TiiRAg-nMyZGrra7dz9KcFRMLKJy as possible.

A bunch of my tests are likely to be either redundant with other tests, or lower quality than other tests that people are writing. A reasonable approach might be to tell me which commits you want to keep and I'll throw away the rest of them.

The part from the dropbox paper doc that I'm concentrating on here is:
(items marked with `?` are ones that I can't immediately think of how to test, so I will leave for other people. Items with checkboxes are things that I have done or will try to do next)

### Dynamic semantics
- `async`/`await` with unusual locals:
    - ? partially uninhabited
    - ? conditionally initialized
    - ~drop impls~ already done in src/test/ui/async-await/drop-order/*
    - ? nested drop impls
    - ~partially moved (e.g., `let x = (vec![], vec![]); drop(x.0); foo.await; drop(x.1);`)~ see  https://github.com/rust-lang/rust/pull/63310
- Control flow:
    - basic
    - complex
- [x] `.await` while holding variables of different sizes
- (possibly) drop order
    - [x] including drop order for locals when a future is dropped part-way through execution
         - Parameters' drop order is covered in my commit f40190a
    - ~An async fn version of `dynamic-drop.rs`~
        - already done by matthewjasper in https://github.com/rust-lang/rust/pull/62193/files
- ? interaction with const eval, promoteds, and temporaries
- [x] drop the resulting future and check that local variables and parameters are dropped in the expected order (interaction with cancellation, in other words)
    - also in f40190a

Explanation of commits:

* 0a1bdd4 is the simplest place I could think of to explicitly test `.await` while holding variables of different sizes. I'm pretty sure that this will end up being redundant with something else, so I'm happy to drop it.
* f40190a is a copy-paste from `drop-order-for-async-fn-parameters.rs` with `NeverReady.await` dumped on the end of each testcase.
    * Normally I don't like copy-paste-based tests, but `drop-order-for-async-fn-parameters-by-ref-binding.rs` is also copy-paste, so I thought it might be okay.
    * [x] I'm a bit sad that this doesn't cover non-parameter locals, but I think it should be easy enough to extend in that direction, so I might have a crack at that tomorrow.
* c4940e0f90 makes a bunch of local variables and moves them into either `{}` blocks or `async move {}` blocks, checking for any surprising differences.
    * I have tried to give the test functions descriptive names
    * I have not duplicated the tests for methods with/without self.
    * I think that all of these tests could be rewritten to be clearer if I could write down the expected drop order next to each test.
2019-08-07 01:39:30 +02:00
Mazdak Farrokhzad
fb79a74020
Rollup merge of #63163 - bravomikekilo:master, r=cramertj
add a pair of whitespace after remove parentheses

fix [issue-63156](https://github.com/rust-lang/rust/issues/63156).
add a pair of whitespace after remove parentheses.
2019-08-07 01:39:28 +02: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
Esteban Küber
64469ac344 review comments 2019-08-06 11:23:32 -07:00
Esteban Küber
613c0a8780 move error with diverging output to compile-fail 2019-08-06 10:28:09 -07:00
bors
6a91782b72 Auto merge of #61515 - shepmaster:boxed-slice-to-array, r=cramertj
Add implementations for converting boxed slices into boxed arrays

This mirrors the implementations of reference slices into arrays.

# Discussion

- [x] Should we use const generics? ([probably not](https://github.com/rust-lang/rust/pull/61515#issuecomment-498690649))
- [ ] [What's the safety rationale here](https://github.com/rust-lang/rust/pull/61515#discussion_r290296613)?
- [ ] [Should the errors return the original object](https://github.com/rust-lang/rust/pull/61515#discussion_r290336592)?

# Remaining

- [ ] Implement `Error`
- [ ] Create a tracking issue
2019-08-06 17:19:05 +00:00
David Laban
c4940e0f90 test drop order for locals when a future is dropped part-way through execution 2019-08-06 15:20:47 +01:00
Mazdak Farrokhzad
e6994714d9
Rollup merge of #62821 - GuillaumeGomez:not-listed-methods, r=Mark-Simulacrum
Not listed methods

Fixes #60326.

cc @rust-lang/rustdoc
r? @QuietMisdreavus
2019-08-06 15:36:28 +02:00
Yuki Okushi
418bf968f0 Ignore no support targets 2019-08-06 22:01:12 +09:00
David Laban
3882ed4abc fixup! test drop order for parameters when a future is dropped part-way through execution 2019-08-06 10:26:37 +01:00
bravomikekilo
3a95c716dc Add rustfix test and fix test name. 2019-08-06 16:00:13 +08: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
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
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
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
Esteban Küber
ce8510a214 fix tests 2019-08-05 19:26:55 -07: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
Ryan Gorup
ef0f49054f Tests around moving parts of structs and tuples across await points 2019-08-05 16:19:20 -07:00
Alexander Regueiro
0410e320e2 Changed tests to check-pass. 2019-08-05 23:46:04 +01:00
Guillaume Gomez
4fb29f9fd2 Add test for DerefMut methods 2019-08-06 00:41:52 +02: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
Oliver Scherer
f2079338b5 Update to new passing-ui-test scheme 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
f9e29b279c Add regression tests 2019-08-05 17:48:04 +02:00
Alexander Regueiro
0994cf4ab0 Added another test. 2019-08-05 16:07:26 +01:00
Jake Goulding
32324d22c3 Add implementations for converting boxed slices into boxed arrays
This mirrors the implementations of reference slices into arrays.
2019-08-05 10:26:53 -04:00
David Laban
f40190a6a5 test drop order for parameters when a future is dropped part-way through execution 2019-08-05 15:26:08 +01:00
Alexander Regueiro
4e0e645dd9 Added test for issue. 2019-08-05 15:16:28 +01:00
Aleksey Kladov
b3e8c8bbe2 adapt rustdoc to infailable lexer 2019-08-05 13:15:12 +03:00
Aleksey Kladov
b5e35b128e remove special code path for unknown tokens 2019-08-05 13:15:11 +03:00
Ilija Tovilo
ebc36001c0
Add test for #43398
Closes #43398
2019-08-05 09:47:20 +02: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
Esteban Küber
f621f890a6 revert change to single test 2019-08-04 13:14:53 -07:00