summary refs log tree commit diff
path: root/src/librustc
AgeCommit message (Collapse)AuthorLines
2020-01-13Treat extern statics just like statics in the "const pointer to static" ↵Oliver Scherer-2/+0
representation
2019-12-16improve lower_pat_slice docs + while -> forMazdak Farrokhzad-12/+26
2019-12-15improve hir::PatKind::Slice docsMazdak Farrokhzad-2/+9
2019-12-15Rollup merge of #67289 - estebank:unnamed-closure, r=CentrilMazdak Farrokhzad-4/+11
Do not ICE on unnamed future Fix #67252.
2019-12-14Do not ICE on unnamed futureEsteban Küber-4/+11
2019-12-14Auto merge of #67224 - nikomatsakis:revert-stabilization-of-never-type, ↵bors-1/+1
r=centril Revert stabilization of never type Fixes https://github.com/rust-lang/rust/issues/66757 I decided to keep the separate `never-type-fallback` feature gate, but tried to otherwise revert https://github.com/rust-lang/rust/pull/65355. Seemed pretty clean. ( cc @Centril, author of #65355, you may want to check this over briefly )
2019-12-14Revert "Stabilize the `never_type`, written `!`."Niko Matsakis-1/+1
This reverts commit 15c30ddd69d6cc3fffe6d304c6dc968a5ed046f1.
2019-12-14Auto merge of #67136 - oli-obk:const_stability, r=Centrilbors-19/+78
Require stable/unstable annotations for the constness of all stable fns with a const modifier r? @RalfJung @Centril Every `#[stable]` const fn now needs either a `#[rustc_const_unstable]` attribute or a `#[rustc_const_stable]` attribute. You can't silently stabilize the constness of a function anymore.
2019-12-13Auto merge of #65951 - estebank:type-inference-error, r=nikomatsakisbors-59/+238
Point at method call when type annotations are needed - Point at method call instead of whole expression when type annotations are needed. - Suggest use of turbofish on function and methods. Fix #49391, fix #46333, fix #48089. CC #58517, #63502, #63082. Fixes https://github.com/rust-lang/rust/issues/40015 r? @nikomatsakis
2019-12-13Consistently name `min_const_fn`Oliver Scherer-2/+2
2019-12-13Change the const stab default for internal const fnsOliver Scherer-4/+7
2019-12-13Elaborate internal const fn commentOliver Scherer-1/+3
2019-12-13Require stable/unstable annotations for the constness of all stable ↵Oliver Scherer-18/+67
functions with a `const` modifier
2019-12-13Reuse the `staged_api` feature for `rustc_const_unstable`Oliver Scherer-1/+6
2019-12-12Auto merge of #67079 - nnethercote:optimize-shallow_resolve_changed, ↵bors-28/+36
r=nikomatsakis Optimize `shallow_resolve_changed` r? @nikomatsakis
2019-12-11Add more context for type parametersEsteban Küber-15/+27
2019-12-11Reuse existing HirId → DefId tableEsteban Küber-24/+4
2019-12-11Auto merge of #66650 - matthewjasper:nonuniform-array-move, r=pnkfelixbors-11/+24
Remove uniform array move MIR passes This PR fixes a number of bugs caused by limitations of this pass * Projections from constant indexes weren't being canonicalized * Constant indexes from the start weren't being canonicalized (they could have different min_lengths) * It didn't apply to non-moves This PR makes the following changes to support removing this pass: * ConstantIndex of arrays are now generated in a canonical form (from the start, min_length is the actual length). * Subslices are now split when generating move paths and when checking subslices have been moved. Additionally * The parent move path of a projection from an array element is now calculated correctly closes #66502
2019-12-11Auto merge of #65345 - ↵bors-83/+223
davidtwco:issue-64130-async-send-sync-error-improvements, r=nikomatsakis async/await: improve not-send errors, part 2 Part of #64130. Fixes #65667. This PR improves the errors introduced in #64895 so that they have specialized messages for `Send` and `Sync`. r? @nikomatsakis
2019-12-11erase regions instead of using `builtin_deref`Nicholas Matsakis-7/+18
The reason we were invoking `builtin_deref` was to enable comparisons when the type was `&T`. For the reasons outlined in the comment, those comparisons failed because the regions disagreed.
2019-12-11Auto merge of #66821 - eddyb:global-trait-caching, r=nikomatsakisbors-24/+23
rustc: allow non-empty ParamEnv's in global trait select/eval caches. *Based on #66963* This appears to alleviate the symptoms of #65510 locally (without fixing WF directly), and is potentially easier to validate as sound (since it's a more ad-hoc version of queries we already have). I'm opening this PR primarily to test the effects on perf. r? @nikomatsakis cc @rust-lang/wg-traits
2019-12-11Change `PendingPredicateObligation::stalled_on`'s type.Nicholas Nethercote-20/+26
From a `Vec<Ty>` to a `Vec<InferTy>`, because that's a more restrictive type. This is a perf win because the ultra-hot function `shallow_resolve_changed` has less pattern-matching to do.
2019-12-11Optimize `shallow_resolve_changed`.Nicholas Nethercote-13/+15
It can be made even more specialized.
2019-12-10Avoid invalid suggestion by checking the snippet in const fn callEsteban Küber-1/+22
2019-12-10Suggest setting type param on function callEsteban Küber-0/+24
2019-12-10Use `generics_of` instead of incorrectly inspecting `FnSig` argumentsEsteban Küber-25/+44
2019-12-10Move suggestion code to its own methodEsteban Küber-42/+54
2019-12-10Use the appropriate number of type arguments in suggestionEsteban Küber-15/+66
2019-12-10Fix rebaseEsteban Küber-6/+6
2019-12-10Deduplicate logicEsteban Küber-47/+62
2019-12-10Point at method call when type annotations are neededEsteban Küber-20/+65
2019-12-09Rollup merge of #67125 - hashedone:master, r=petrochenkovTyler Mandry-5/+9
Added ExactSizeIterator bound to return types Fixes #66865
2019-12-09Make const index and subslice array projections more usefulMatthew Jasper-11/+24
* `min_length` is now exact for const index elements. * const index elements are always from the start. * make array `Subslice` `PlaceElems` count both `from` and `to` from the start.
2019-12-09Added ExactSizeIterator bound to return typesBartłomiej Kuras-23/+11
This reverts commit d97379a96e594820b9e865ae56cb8d753bf6b06a.
2019-12-09Auto merge of #67016 - lqd:placeholder_loans, r=matthewjasperbors-1/+1
In which we implement illegal subset relations errors using Polonius This PR is the rustc side of implementing subset errors using Polonius. That is, in ```rust fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 { y } ``` returning `y` requires that `'b: 'a` but we have no evidence of that, so this is an error. (Evidence that the relation holds could come from explicit bounds, or via implied bounds). Polonius outputs one such error per CFG point where the free region's placeholder loan unexpectedly flowed into another free region. While all these CFG locations could be useful in diagnostics in the future, rustc does not do that (and the duplication is only partially handled in the rest of the errors/diagnostics infrastructure, e.g. duplicate suggestions will be shown by the "outlives suggestions" or some of the `#[rustc_*]` NLL/MIR debug dumps), so I deduplicated the errors. (The ordering also matters, otherwise some of the elided lifetime naming would change behaviour). I've blessed a couple of tests, where the output is currently suboptimal: - the `hrtb-perfect-forwarding` tests mix subset errors with higher-ranked subtyping, however the plan is for chalk to eventually take care of some of this to generate polonius constraints (i.e. it's not polonius' job). Until that happens, polonius will not see the error that NLL sees. - some other tests have errors and diagnostics specific to `'static`, I _believe_ this to be because of it being treated as more "special" than in polonius. I believe the output is not wrong, but could be better, and appears elsewhere (I feel we'll need to look at polonius' handling of `'static` at some point in the future, maybe to match a bit more what NLL does when it produces errors) I'll create a tracking issue in the polonius repo to record these 2 points (and a general "we'll need to go over the blessed output" issue, much like we did for NLLs) The last blessed test is because it's an improvement: in this case, more errors/suggestions were computed, instead of the existing code path where this case apparently stops at the first error. The `Naive` variant in Polonius computes those errors, so this PR also switches the default variant to that, as we're also in the process of temporarily deactivating all other variants (which exist mostly for performance considerations) until we have completed more work on completeness and correctness, before focusing on efficiency once again. While most of the correctness in this PR is hidden in the polonius compare-mode (which of course passes locally), I've added a couple of smoke-tests to the existing ones, so that we have some confidence that it works (and keeps working) until we're in a position where we can run them on CI. As mentioned during yesterday's wg-polonius meeting, @nikomatsakis has already read through most of this PR (and which is matching what they thought needed to be done [during the recent Polonius sprint](https://hackmd.io/CGMNjt1hR_qYtsR9hgdGmw#Compiler-notes-on-generating-the-placeholder-loans-support)), but Matthew was hopefully going to review (again, not urgent), so: r? @matthewjasper (This updates to the latest `polonius-engine` release, and I'm not sure whether `Cargo.lock` updates can easily be rolled up, but apart from that: this changes little that's tested on CI, so seems safe-ish to rollup ?)
2019-12-08Auto merge of #66981 - michaelwoerister:measureme-0.5.0, r=Mark-Simulacrumbors-1/+1
Update measureme crate to 0.5.0 This PR updates the `measureme` self-profiling crate to the latest release. Heads up, this version changes the trace file format, so the `summarize` tool on perf.rlo needs to be updated to 0.5 too. r? @Mark-Simulacrum cc @wesleywiser
2019-12-08async/await: correct diag note for `async move`David Wood-10/+11
This commit corrects the diagnostic note for `async move {}` so that `await` is mentioned, rather than `yield`. Signed-off-by: David Wood <david@davidtw.co>
2019-12-08async/await: more improvements to non-send errorsDavid Wood-83/+211
Signed-off-by: David Wood <david@davidtw.co>
2019-12-08Rollup merge of #66991 - Nashenas88:body_cache_cleanup, r=eddybMazdak Farrokhzad-55/+51
Cleanup BodyCache After this PR: - `BodyCache` is renamed to `BodyAndCache` - `ReadOnlyBodyCache` is renamed to `ReadOnlyBodyAndCache` - `ReadOnlyBodyAndCache::body` fn is removed and all calls to it are replaced by a deref (possible due to fix of its `Deref` imp in #65947) cc @eddyb @oli-obk
2019-12-08Rollup merge of #66325 - BartMassey:master, r=joshtriplettMazdak Farrokhzad-2/+2
Change unused_labels from allow to warn Fixes #66324, making the unused_labels lint warn instead of allow by default. I'm told @rust-lang/lang will need to review this, and perhaps will want to do a crater run.
2019-12-07Auto merge of #65881 - anp:implicit-caller-location, r=eddyb,oli-obkbors-6/+26
Implement #[track_caller] attribute. (RFC 2091 4/N) Implements the `#[track_caller]` attribute in both const and codegen contexts. The const implementation walks up the stack to find the nearest untracked callsite. The codegen implementation adds an implicit argument to tracked function calls, and populates it with either a call to the previously-landed intrinsic or if the caller has `#[track_caller]` with a copy of the location passed to the current function. Also includes a little cleanup and a few comments in the other caller location areas. [Depends on: 65664](https://github.com/rust-lang/rust/pull/65664) [RFC 2091 text](https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md) [Tracking issue](https://github.com/rust-lang/rust/issues/47809) [Tracking doc](https://paper.dropbox.com/doc/track_rfc_2091_impl-notes--Anf1NwnIb0xcRv31YLIadyj0Ag-rwCdRc2fi2yvRZ7syGZ9q#:uid=863513134494965680023183&h2=TODO-actually-pass-location-to)
2019-12-07Added ExactSizeIterator bound to return typesBartłomiej Kuras-15/+31
in librustc in several places
2019-12-07Auto merge of #66927 - RalfJung:engines-dont-panic, r=oli-obkbors-5/+21
Miri core engine: use throw_ub instead of throw_panic See https://github.com/rust-lang/rust/issues/66902 for context: panicking is not really an "interpreter error", but just part of a normal Rust execution. This is a first step towards removing the `InterpError::Panic` variant: the core Miri engine does not use it any more. ConstProp and ConstEval still use it, though. This will be addressed in future PRs. From what I can tell, all the error messages this removes are actually duplicates. r? @oli-obk @wesleywiser
2019-12-06Rollup merge of #67071 - estebank:issue-66868, r=davidtwcoMazdak Farrokhzad-0/+4
Do not ICE on closure typeck Tackle #66868. r? @davidtwco
2019-12-06Auto merge of #65195 - varkor:to_option, r=Centrilbors-35/+9
Rename `bool::then_*` to `bool::to_option_*` and use where appropriate Name change following https://github.com/rust-lang/rfcs/pull/2757. Also try it out throughout the compiler in places I think makes the code more readable.
2019-12-07Rollup merge of #66846 - gizmondo:master, r=michaelwoeristerYuki Okushi-5/+16
Make try_mark_previous_green aware of cycles. Fixes #61323 r? @michaelwoerister
2019-12-06Fix rebase issuesvarkor-1/+1
2019-12-06Rename to `then_some` and `then`varkor-6/+6
2019-12-06Use `to_option` in various placesvarkor-35/+9
2019-12-06update to polonius 0.11 to compute subset errorslqd-1/+1
- adapt to the new polonius `FactTypes` API - reorganize the type aliases referring to polonius to avoid referencing the inner atom or fact types multiple times: only one input and output types should be enough for everyone. They could equally be in `borrow_check` as `nll` though.