about summary refs log tree commit diff
path: root/src/librustc
AgeCommit message (Collapse)AuthorLines
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.
2019-12-06Make try_mark_previous_green aware of cycles.Alex Aktsipetrov-5/+16
2019-12-05Add caller_location paramter to FnAbi::new_internal.Adam Perry-2/+11
We pass it in `of_instance` when the instance requires caller location.
2019-12-05Generate &core::panic::Location type in a single place.Adam Perry-0/+10
2019-12-05Implement #[track_caller] in const.Adam Perry-4/+5
2019-12-05rustc: Apply clearer naming to BodyAndCache, fix Deref impl, remove unneeded ↵Paul Daniel Faria-55/+51
Index impl, remove body fn rustc_codegen_ssa: Fix BodyAndCache reborrow to Body and change instances of body() call to derefence rustc_mir: Fix BodyAndCache reborrow to Body and change intances of body() call to derefence
2019-12-05Do not ICE on closure typeckEsteban Küber-0/+4
Tackle #66868.
2019-12-05Rollup merge of #67011 - Aaron1011:fix/expected-found-span, r=Dylan-DPCMazdak Farrokhzad-11/+24
Include a span in more `expected...found` notes In most places, we use a span when emitting `expected...found` errors. However, there were a couple of places where we didn't use any span, resulting in hard-to-interpret error messages. This commit attaches the relevant span to these notes, and additionally switches over to using `note_expected_found` instead of manually formatting the message
2019-12-05Rollup merge of #67010 - estebank:raw-idents, r=CentrilMazdak Farrokhzad-0/+3
Accurately portray raw identifiers in error messages When refering to or suggesting raw identifiers, refer to them with `r#`. Fix #65634.
2019-12-04Auto merge of #66275 - oli-obk:organize-intrinsics-promotion-checks, r=RalfJungbors-3/+112
Organize intrinsics promotion checks cc @vertexclique supersedes #61835 r? @RalfJung
2019-12-04Auto merge of #65947 - eddyb:fn-abi, r=oli-obk,nagisabors-108/+124
rustc: split FnAbi's into definitions/direct calls ("of_instance") and indirect calls ("of_fn_ptr"). After this PR: * `InstanceDef::Virtual` is only used for "direct" virtual calls, and shims around those calls use `InstanceDef::ReifyShim` (i.e. for `<dyn Trait as Trait>::f as fn(_)`) * this could easily be done for intrinsics as well, to allow their reification, but I didn't do it * `FnAbi::of_instance` is **always** used for declaring/defining an `fn`, and for direct calls to an `fn` * this is great for e.g. https://github.com/rust-lang/rust/pull/65881 (`#[track_caller]`), which can introduce the "caller location" argument into "codegen signatures" by only changing `FnAbi::of_instance`, after this PR * `FnAbi::of_fn_ptr` is used primarily for indirect calls, i.e. to `fn` pointers * *not* virtual calls (which use `FnAbi::of_instance` with `InstanceDef::Virtual`) * there's also a couple uses where the `rustc_codegen_llvm` needs to declare (i.e. FFI-import) an LLVM function that has no Rust declaration available at all * at least one of them could probably be a "weak lang item" instead As there are many steps, this PR is best reviewed commit by commit - some of which arguably should be in their own PRs, I may have gotten carried away a bit. cc @nagisa @rkruppe @oli-obk @anp
2019-12-03Include a span in more `expected...found` notesAaron Hill-11/+24
In most places, we use a span when emitting `expected...found` errors. However, there were a couple of places where we didn't use any span, resulting in hard-to-interpret error messages. This commit attaches the relevant span to these notes, and additionally switches over to using `note_expected_found` instead of manually formatting the message
2019-12-03Accurately portray raw identifiers in error messagesEsteban Küber-0/+3
When refering to or suggesting raw identifiers, refer to them with `r#`. Fix #65634.
2019-12-04Leave fixmeOliver Scherer-0/+1
2019-12-03Rollup merge of #66951 - RalfJung:miri-machine-stop, r=oli-obkMazdak Farrokhzad-0/+7
miri: add throw_machine_stop macro r? @oli-obk This helps Miri: https://github.com/rust-lang/miri/pull/1093
2019-12-03Move Session to librustc_sessionMark Rousskov-4724/+1
2019-12-03Duplicate CrateConfig into SessionMark Rousskov-1/+3
Since it's just a type alias this isn't too difficult and once Session is moved back we can make this be the canonical location.
2019-12-03Directly use types from libsyntax::astMark Rousskov-5/+4
2019-12-03Re-export Client from rustc_data_structures::jobserverMark Rousskov-2/+1
2019-12-03Move NativeLibraryKind to rustc_sessionMark Rousskov-27/+16
2019-12-03Move early lint declarations to librustc_sessionMark Rousskov-153/+9
2019-12-03Move Lint to rustc_sessionMark Rousskov-87/+3
This commit breaks early-lint registration, which will be fixed in the next commit. This movement will allow essentially all crates in the compiler tree to declare lints (though not lint passes).
2019-12-03Move Level to rustc_sessionMark Rousskov-41/+3