Commit graph

27692 commits

Author SHA1 Message Date
Matthew Jasper
d96485d49e Add more tests for borrowck and dropck slice pattern handling 2019-12-09 20:43:24 +00:00
Matthew Jasper
96dc03bad7 Remove uniform_array_move_out passes
These passes were buggy, MIR building is now responsible for
canonicalizing `ConstantIndex` projections and `MoveData` is responsible
for splitting `Subslice` projections.
2019-12-09 20:43:22 +00:00
bors
3ff17e7c5f Auto merge of #67016 - lqd:placeholder_loans, r=matthewjasper
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-09 10:50:41 +00:00
bors
dbbe4f10fa Auto merge of #67004 - estebank:issue-66958, r=eddyb
Do not ICE on async fn with non-Copy infered type arg

Fix #66958.
2019-12-09 05:16:48 +00:00
Mazdak Farrokhzad
56f830e292
Rollup merge of #66325 - BartMassey:master, r=joshtriplett
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-08 03:39:43 +01:00
bors
de17464b14 Auto merge of #65881 - anp:implicit-caller-location, r=eddyb,oli-obk
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-07 21:14:39 +00:00
bors
5c5c8eb864 Auto merge of #66927 - RalfJung:engines-dont-panic, r=oli-obk
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-07 14:46:30 +00:00
Adam Perry
15d1f7cffd Add additional layer of #[track_caller] to test, avoid const prop. 2019-12-06 18:37:54 -08:00
Mazdak Farrokhzad
18a79e0e16
Rollup merge of #67078 - kamleshbhalui:master, r=Centril
accept union inside enum if not followed by identifier

Fixes #66943
2019-12-06 23:27:02 +01:00
Mazdak Farrokhzad
941c4cd56b
Rollup merge of #67052 - Centril:config-1, r=petrochenkov
Ditch `parse_in_attr`

Fixes #66940

r? @petrochenkov
2019-12-06 23:26:59 +01:00
Mazdak Farrokhzad
99fee7896b
Rollup merge of #67009 - Aaron1011:fix/coerce-suggestion, r=Centril
Emit coercion suggestions in more places

Fixes #66910

We have several different kinds of suggestions we can try to make when
type coercion fails. However, we were previously only emitting these
suggestions from `demand_coerce_diag`. This resulted in the compiler
failing to emit applicable suggestions in several different cases, such
as when the implicit return value of a function had the wrong type.

This commit adds a new `emit_coerce_suggestions` method, which tries to
emit a number of related suggestions. This method is called from both
`demand_coerce_diag` and `CoerceMany::coerce_inner`, which covers a much
wider range of cases than before.

We now suggest using `.await` in more cases where it is applicable,
among other improvements.

I'm not happy about disabling the `issue-59756`, but from what I can tell, the suggestion infrastructure in rustc lacks any way of indicating mutually exclusive suggestions (and compiletest lacks a way to only apply a subset of available suggestions).
2019-12-06 23:26:57 +01:00
Mazdak Farrokhzad
2bd35c065c
Rollup merge of #66606 - christianpoveda:mut-refs-in-const-fn, r=oli-obk
Add feature gate for mut refs in const fn

r? @oli-obk
2019-12-06 23:26:54 +01:00
Mazdak Farrokhzad
99191c2e71 parse_meta: ditch parse_in_attr 2019-12-06 21:17:18 +01:00
Mazdak Farrokhzad
cbc9f68312 derive: avoid parse_in_attr 2019-12-06 20:37:59 +01:00
Mazdak Farrokhzad
bbcda98d41 cfg_attr: avoid .outer_tokens 2019-12-06 20:37:59 +01:00
Esteban Küber
7ed9066766 review comments 2019-12-06 10:06:10 -08:00
Esteban Küber
0f306a7db4 Do not ICE on async fn with non-Copy infered type arg
Fix #66958.
2019-12-06 10:06:10 -08:00
Yuki Okushi
c85284ec58
Rollup merge of #67054 - RalfJung:set-discriminant-unreachable, r=oli-obk
codegen "unreachable" for invalid SetDiscriminant

Follow-up from https://github.com/rust-lang/rust/pull/66960. I also realized I don't understand our policy for using `abort` vs `unreachable`. AFAIK `abort` is safe to call and just aborts the process, while `unreachable` is UB. But sometimes we use both, like here

d825e35ee8/src/librustc_codegen_ssa/mir/block.rs (L827-L828)

and here

d825e35ee8/src/librustc_codegen_ssa/mir/block.rs (L264-L265)

The second case is even more confusing because that looks like an unreachable `return` to me, so why would we codegen a safe abort there?

r? @eddyb Cc @oli-obk
2019-12-07 00:10:05 +09:00
Yuki Okushi
0df1609215
Rollup merge of #67008 - ollie27:rustdoc_issue_61732, r=Centril
rustdoc: Add test for fixed issue

#61732 was almost certainly fixed by #63400.

Closes #61732
2019-12-07 00:09:59 +09:00
Yuki Okushi
afd9e95b8b
Rollup merge of #66959 - GuillaumeGomez:cfg-duplicates, r=eddyb
Remove potential cfgs duplicates

Fixes https://github.com/rust-lang/rust/issues/66921.

Before going any further (the issue seems to be linked to metadata as far as I can tell). Do you think this is the good place to do it or should it be done before?

r? @eddyb
2019-12-07 00:09:54 +09:00
Yuki Okushi
2a4f638d24
Rollup merge of #66846 - gizmondo:master, r=michaelwoerister
Make try_mark_previous_green aware of cycles.

Fixes #61323

r? @michaelwoerister
2019-12-07 00:09:52 +09:00
Remy Rakic
1314ba323b add subset relations test using polonius
It's a relatively simple smoke-test for subset errors, executed outside
of the polonius compare-mode.
2019-12-06 11:50:02 +01:00
Remy Rakic
720716f9d0 bless polonius output due to lacking the 'static special-casing 2019-12-06 11:50:02 +01:00
Remy Rakic
695640816a bless polonius output of test ui/nll/outlives-suggestion-simple.rs
The polonius output has one more error which should be displayed
in the regular case, but error reporting in the regular case stopped
at the first error.

Admittedly it would be nice to combine suggestions for the same source
lifetime so that `'a: 'b` and `'a: 'c` are not bothsuggested, but instead
a single `'a: 'b + 'c` is.
2019-12-06 11:50:02 +01:00
Remy Rakic
67b04d5f64 bless polonius output of test hrtb-perfect-forwarding.rs
The plan is to use chalk and not have polonius deal with this.
2019-12-06 11:50:02 +01:00
Alex Aktsipetrov
de255a9163 Make try_mark_previous_green aware of cycles. 2019-12-06 12:48:53 +03:00
Yuki Okushi
6c0165fa78
Rollup merge of #66979 - reese:E0631-long-error, r=GuillaumeGomez
Add long error for E0631 and update ui tests.

This PR adds a long error for `E0631`, which covers errors where closure argument types are mismatched. It also updates UI tests where this error is applicable.

Part of #61137
2019-12-06 15:37:06 +09:00
Yuki Okushi
3d2cb55734
Rollup merge of #66764 - estebank:reword-bad-collect, r=alexcrichton
Tweak wording of `collect()` on bad target type

Fix #60440.
2019-12-06 15:37:01 +09:00
Kamlesh Kumar
f8ecf04f4b accept union inside enum if not followed by identifier 2019-12-06 10:52:28 +05:30
Adam Perry
28b2257160 Error message no longer implies #[track_caller] is a requirement for Rust ABI. 2019-12-05 21:11:46 -08:00
Adam Perry
eb679c9c5d Add test for Location::caller in a macro. 2019-12-05 21:08:43 -08:00
Adam Perry
bc6e66eb3a Implement core::panic::Location::caller using #[track_caller]. 2019-12-05 21:08:35 -08:00
Adam Perry
ebaebd987f Remove #[track_caller] from incomplete features list. 2019-12-05 21:08:13 -08:00
Adam Perry
d47043b1c9 Add failing test for codegen'd track_caller attribute. 2019-12-05 20:54:28 -08:00
Adam Perry
de44f09cc3 Rename test filename to match others. 2019-12-05 20:54:03 -08:00
Adam Perry
9ab065dcda Implement #[track_caller] in const. 2019-12-05 20:50:26 -08:00
bors
234c9f21d9 Auto merge of #66911 - eddyb:nicer-rustc_regions, r=matthewjasper
rustc_mir: use nicer path printing for #[rustc_regions] NLL tests.

Similar to #66850, spotted while working on #66907.

r? @matthewjasper
2019-12-06 00:22:54 +00:00
Ralf Jung
f5bd94768a use abort instead of unreachable 2019-12-06 00:10:01 +01:00
Mazdak Farrokhzad
a008aff075
Rollup merge of #67055 - lqd:const_qualif, r=oli-obk
Make const-qualification look at more `const fn`s

As explained in a lot more detail in #67053 this makes const-qualification not ignore the unstable const fns in libcore.

r? @oli-obk cc @ecstatic-morse

(Still a bit unsure about the `cfg`s here, for bootstrapping, does that seem correct ?)

Fixes #67053.
2019-12-05 19:03:21 +01:00
Mazdak Farrokhzad
23b8c06f27
Rollup merge of #67044 - Centril:67037, r=estebank
E0023: handle expected != tuple pattern type

Fixes #67037.

r? @estebank
2019-12-05 19:03:18 +01:00
Mazdak Farrokhzad
7945dcdfdc
Rollup merge of #67011 - Aaron1011:fix/expected-found-span, r=Dylan-DPC
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-05 19:03:17 +01:00
Mazdak Farrokhzad
8e6cf861e5
Rollup merge of #67010 - estebank:raw-idents, r=Centril
Accurately portray raw identifiers in error messages

When refering to or suggesting raw identifiers, refer to them with `r#`.

Fix #65634.
2019-12-05 19:03:15 +01:00
Mazdak Farrokhzad
3f4827c785
Rollup merge of #66863 - osa1:fix_66702, r=cramertj
Check break target availability when checking breaks with values

Fixes #66702

I'll be adding a regression test.
2019-12-05 19:03:09 +01:00
Remy Rakic
4a760c6ea1 add regression test for issue 67053 2019-12-05 15:09:06 +01:00
Ralf Jung
e822235323 add a test 2019-12-05 14:33:37 +01:00
bors
d825e35ee8 Auto merge of #66520 - alexcrichton:disable-gdb-wasm, r=eddyb
Disable gdb pretty printer global section on wasm targets

The wasm targets don't support gdb anyway so there's no need for this
section there.
2019-12-05 05:28:48 +00:00
Mazdak Farrokhzad
4746d37339 E0023: handle expected != pat-tup-type 2019-12-05 06:18:01 +01:00
Alex Crichton
5ce09bcfa2 Disable gdb pretty printer global section on wasm targets
The wasm targets don't support gdb anyway so there's no need for this
section there.
2019-12-04 20:15:21 -08:00
bors
c4f1304935 Auto merge of #66408 - nnethercote:greedy-process_obligations, r=nmatsakis
Make `process_obligations()` greedier.

`process_obligations()` adds new nodes, but it does not process these
new nodes until the next time it is called.

This commit changes it so that it does process these new nodes within
the same call. This change reduces the number of calls to
`process_obligations()` required to complete processing, sometimes
giving significant speed-ups.

The change required some changes to tests.
- The output of `cycle-cache-err-60010.rs` is slightly different.
- The unit tests required extra cases to handle the earlier processing
  of the added nodes. I mostly did these in the simplest possible way,
  by making the added nodes be ignored, thus giving outcomes the same as
  with the old behaviour. But I changed `success_in_grandchildren()`
  more extensively so that some obligations are completed earlier than
  they used to be.

r? @nikomatsakis
2019-12-04 14:33:38 +00:00
bors
7fa046534e Auto merge of #66275 - oli-obk:organize-intrinsics-promotion-checks, r=RalfJung
Organize intrinsics promotion checks

cc @vertexclique

supersedes #61835

r? @RalfJung
2019-12-04 11:22:26 +00:00