Commit graph

27902 commits

Author SHA1 Message Date
bors
a9c1c04e98 Auto merge of #67241 - mark-i-m:simplify-borrow_check-3, r=matthewjasper
Refactorings to borrowck region diagnostic reporting

This PR is a followup to #66886 and #67404

EDIT: updated

In this PR:  Clean up how errors are collected from NLL: introduce `borrow_check::diagnostics::RegionErrors` to collect errors. This is later passed to `MirBorrowckCtx::report_region_errors` after the `MirBorrowckCtx` is created. This will allow us to refactor away some of the extra context structs floating around (but we don't do it in this PR).  `borrow_check::region_infer` is now mostly free of diagnostic generating code. The signatures of most of the functions in `region_infer` lose somewhere between 4 and 7 arguments :)

Left for future (feedback appreciated):

- Merge `ErrorRegionCtx` with `MirBorrowckCtx`, as suggested by @matthewjasper in https://github.com/rust-lang/rust/pull/66886#issuecomment-559949499
- Maybe move the contents of `borrow_check::nll` into `borrow_check` and remove the `nll` submodule altogether.
- Find a way to make `borrow_check::diagnostics::region_errors` less of a strange appendage to `RegionInferenceContext`. I'm not really sure how to do this yet. Ideas welcome.
2019-12-24 18:02:10 +00:00
Ohad Ravid
811bdeee00 Show value for consts in the documentation 2019-12-24 10:10:36 +01:00
Mazdak Farrokhzad
a75968a782
Rollup merge of #67551 - ldm0:E0627, r=Dylan-DPC
Add long error code explanation message for E0627

Part of #61137.

r? @GuillaumeGomez
2019-12-24 04:39:58 +01:00
Mazdak Farrokhzad
07effe18b0
Rollup merge of #67543 - JohnTitor:regression-tests, r=Centril
Add regression tests for fixed ICEs

Closes #61747 (fixed from 1.41.0-nightly (4007d4ef2 2019-12-01))
Closes #66205 (fixed from 1.41.0-nightly (4007d4ef2 2019-12-01))
Closes #66270 (fixed by #66246)
Closes #67424 (fixed by #67160)

Also picking a minor nit up from #67071 with 101dd7bad9

r? @Centril
2019-12-24 04:39:55 +01:00
Mazdak Farrokhzad
1ac8fc76d4
Rollup merge of #67337 - oli-obk:no_mut_static_ref_from_const, r=RalfJung
Ensure that evaluating or validating a constant never reads from a static

r? @RalfJung

as per https://github.com/rust-lang/rust/pull/66302#issuecomment-554663387

This does not yet address the fact that evaluation of a constant can read from a static (under unleash-miri)
2019-12-24 04:39:53 +01:00
bors
a4cd03dee2 Auto merge of #66296 - Centril:bindings_after_at-init, r=pnkfelix
Initial implementation of `#![feature(bindings_after_at)]`

Following up on #16053, under the gate `#![feature(bindings_after_at)]`, `x @ Some(y)` is allowed subject to restrictions necessary for soundness.

The implementation and test suite should be fairly complete now.

One aspect that is not covered is the interaction with nested `#![feature(or_patterns)]`.
This is not possible to test at the moment in a good way because that feature has not progressed sufficiently and has fatal errors in MIR building. We should make sure to add such tests before we stabilize both features (but shipping one of them is fine).

r? @pnkfelix
cc @nikomatsakis @matthewjasper @pcwalton
cc https://github.com/rust-lang/rust/issues/65490
2019-12-23 21:49:44 +00:00
Oliver Scherer
87fea04871 Bless tests 2019-12-23 17:48:22 +01:00
Yuki Okushi
d918319bed Apply suggestion from Centril
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-12-24 01:05:09 +09:00
Yuki Okushi
1f2fa939a5 Add test for issue-67424 2019-12-24 01:05:09 +09:00
Mazdak Farrokhzad
7eb025febf
Rollup merge of #67546 - oli-obk:slice_pattern_ice, r=varkor
Fix ICE in mir interpretation

Indices from the end start at 1 so you can immediately subtract them from the length to get the index instead of having to do an additional `-1`. Kinda documented in https://doc.rust-lang.org/nightly/nightly-rustc/rustc/mir/enum.ProjectionElem.html#variant.ConstantIndex
2019-12-23 15:16:31 +01:00
Mazdak Farrokhzad
41647613b1
Rollup merge of #67538 - varkor:lhs-assign-diagnostics, r=Centril
Improve diagnostics for invalid assignment

- Improve wording and span information for invalid assignment diagnostics.
- Link to https://github.com/rust-lang/rfcs/issues/372 when it appears the user is trying a destructuring assignment.
- Make the equality constraint in `where` clauses error consistent with the invalid assignment error.
2019-12-23 15:16:29 +01:00
Mazdak Farrokhzad
67c0f4e2c9
Rollup merge of #67507 - Mark-Simulacrum:purge-uninit, r=Centril
Remove mem::uninitalized from tests

This purges uses of uninitialized where possible from test cases. Some
are merely moved over to the equally bad pattern of
MaybeUninit::uninit().assume_init() but with an annotation that this is
"the best we can do".

Fixes #62397
2019-12-23 15:16:24 +01:00
Mazdak Farrokhzad
1de2705c79
Rollup merge of #67466 - oli-obk:const_intrinsic, r=Centril
Require const stability attributes on intrinsics to be able to use them in constant contexts

r? @Centril

finally fixes #61495

cc @RalfJung
2019-12-23 15:16:23 +01:00
Oliver Scherer
e56a86162c Show const_err lints 2019-12-23 14:54:37 +01:00
Oliver Scherer
2022fac4df Constants reading or referencing statics is illegal
and some uses of it will be illegal forever
(e.g. mutable or interior mutable statics)
2019-12-23 14:54:30 +01:00
Oliver Scherer
ad6b9c79d6 Dynamically prevent constants from accessing statics 2019-12-23 14:54:22 +01:00
Oliver Scherer
640e2884ad Panic on mutable allocs in constants 2019-12-23 14:54:14 +01:00
Mazdak Farrokhzad
371446cc50 Remove bindings_after_at from INCOMPLETE_FEATURES. 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
8846a6b6bb Test that nested type ascription is banned. 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
c37bd26eaa Test that _ @ subpat is syntactically rejected. 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
e39abcfad9 harden & split borrowck-pat-at-and-box 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
48f2766522 enhance borrowck-pat-by-copy-bindings-in-at 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
427b1c33e9 clarify bind-by-move-neither-can-livee.. 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
6fa8f4a57b bindings_after_at: harden tests wrt. contexts & slice_patterns 2019-12-23 14:47:20 +01:00
Mazdak Farrokhzad
0034e6199e bindings_after_at: harden tests wrt. promotion 2019-12-23 14:47:19 +01:00
Mazdak Farrokhzad
9ab36037a4 --bless bindings-after-at tests 2019-12-23 14:47:19 +01:00
Mazdak Farrokhzad
6a87f99620 check_legality_of_move_bindings: generalize diagnostics & add comments 2019-12-23 14:47:19 +01:00
Mazdak Farrokhzad
5f92a56ed6 Introduce #![feature(bindings_after_at)].
Under the gate, `x @ Some(y)` is allowed.
This is subject to various restrictions for soundness.
2019-12-23 14:47:19 +01:00
Donough Liu
587d03bea8 Yield is an expression form, not a statement. 2019-12-23 21:07:13 +08:00
varkor
9a602243c4 Add new folder for destructuring assignment tests 2019-12-23 11:20:13 +00:00
varkor
35979a92bf Add span information to ExprKind::Assign 2019-12-23 11:20:13 +00:00
varkor
5ab4735559 Recognise nested tuples/arrays/structs 2019-12-23 11:17:55 +00:00
varkor
5fa02ecc29 Add note about destructuring assignments 2019-12-23 11:17:55 +00:00
varkor
b7bfdbe681 Improve invalid assignment error 2019-12-23 11:16:51 +00:00
varkor
a5991c57cf Add the full issue reference to equality constraints in where clauses 2019-12-23 11:15:55 +00:00
Mark Mansi
05e3d20080 Refactor region error handling to be done by mirborrowckctx 2019-12-23 00:32:00 -06:00
Mark Rousskov
c205f6a06a Remove mem::uninitalized from tests
This purges uses of uninitialized where possible from test cases. Some
are merely moved over to the equally bad pattern of
MaybeUninit::uninit().assume_init() but with an annotation that this is
"the best we can do".
2019-12-22 21:58:12 -05:00
Mark Rousskov
0f24ccd21d Change bound order in rustfmt test
It is unclear why this changed, but since it seems like a harmless
change, we're going to move forward with reformatting.
2019-12-22 21:46:51 -05:00
Oliver Scherer
056dff5748 Fix ICE in mir interpretation 2019-12-23 01:24:11 +01:00
Mark Rousskov
86f12c110b test fallout 2019-12-22 19:04:10 -05:00
Yuki Okushi
6ec3a63bb2 Add test for issue-66270 2019-12-23 07:42:26 +09:00
Yuki Okushi
96253c2d15 Add test for issue-66205 2019-12-23 07:42:26 +09:00
Yuki Okushi
7c485ccfad Add test for issue-61747 2019-12-23 07:42:26 +09:00
bors
3982d3514e Auto merge of #67505 - Centril:rollup-7win7ty, r=Centril
Rollup of 6 pull requests

Successful merges:

 - #67148 ( Refactor type & bounds parsing thoroughly)
 - #67410 (Reenable static linking of libstdc++ on windows-gnu)
 - #67439 (Cleanup `lower_pattern_unadjusted` & Improve slice pat typeck)
 - #67480 (Require issue = "none" over issue = "0" in unstable attributes)
 - #67500 (Tweak non_shorthand_field_patterns' suggestion)
 - #67504 (Warn against relying on ?Sized being last)

Failed merges:

r? @ghost
2019-12-22 07:01:50 +00:00
Mazdak Farrokhzad
c35546383f
Rollup merge of #67500 - JohnTitor:non-shorthand-field-patterns, r=Centril
Tweak non_shorthand_field_patterns' suggestion

Fixes #66434

r? @estebank
2019-12-22 02:40:06 +01:00
Mazdak Farrokhzad
eaeb1138c6
Rollup merge of #67480 - rossmacarthur:fix-41260-avoid-issue-0-part-2, r=Centril
Require issue = "none" over issue = "0" in unstable attributes

These changes make the use of `issue = "none"` required in unstable attributes throughout the compiler.

Notes:
- #66299 is now in beta so `issue = "none"` is accepted.
- The `tidy` tool now fails on `issue = "0"`.
- Tests that used `issue = "0"` were changed to use `issue = "none"`, except for _one_ that asserts `issue = "0"` can still be used.
- The compiler still allows `issue = "0"` because some submodules require it, this could be disallowed once these are updated.

Resolves #41260

r? @varkor
2019-12-22 02:40:04 +01:00
Mazdak Farrokhzad
616373e668
Rollup merge of #67148 - Centril:ty-polish, r=estebank
Refactor type & bounds parsing thoroughly

PR is based on https://github.com/rust-lang/rust/pull/67131 with first one from this PR being ` extract parse_ty_tuple_or_parens`.

Also fixes #67146.

r? @estebank
2019-12-22 02:40:00 +01:00
bors
6e9172f633 Auto merge of #66932 - rust-lang:pass-check-runfail, r=petrochenkov
Revamp `// run-fail` wrt. `--pass` & support `// build-fail` & `// check-fail`

Revamp how `// run-fail` tests work internally by having a separate `FailMode` that does not interfere with `PassMode`. In particular, `--pass check` will now have no effect on `// *-fail` tests. Moreover, new test annotations `// check-fail` (the default) and `// build-fail` are added. The latter is useful to distinguish post-monomorphization failures from pre-monomorphization failures as seen throughout the PR. Finally, ensure that non-`Ui` tests do not listen to `--pass check` such that the flag can be used with e.g. `./x.py test --pass check` directly.

Fixes #66929.
Fixes #67128.

r? @petrochenkov
cc @RalfJung @ninjasource
2019-12-22 00:10:13 +00:00
Yuki Okushi
30e84b0244 Tweak non_shorthand_field_patterns' suggestion 2019-12-22 08:21:36 +09:00
Mazdak Farrokhzad
73e6a2174a add build-fail to 32-bit tests 2019-12-21 22:33:36 +01:00