Commit graph

7799 commits

Author SHA1 Message Date
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
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
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
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
Mazdak Farrokhzad
4746d37339 E0023: handle expected != pat-tup-type 2019-12-05 06:18:01 +01: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
Esteban Küber
b5ad0cb033 review comments: move test 2019-12-03 22:25:15 -08:00
Aaron Hill
168e35d569
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-03 23:13:10 -05:00
Esteban Küber
f6b435d923 Accurately portray raw identifiers in error messages
When refering to or suggesting raw identifiers, refer to them with `r#`.

Fix #65634.
2019-12-03 19:01:42 -08:00
Reese Williams
911b7d6d4d Update missed test. 2019-12-03 14:58:41 -05:00
Mazdak Farrokhzad
8dcb5326dd
Rollup merge of #66973 - cuviper:min-llvm7, r=alexcrichton
Update the minimum external LLVM to 7

LLVM 7 is over a year old, which should be plenty for compatibility. The
last LLVM 6 holdout was llvm-emscripten, which went away in #65501.

I've also included a fix for LLVM 8 lacking `MemorySanitizerOptions`,
which was broken by #66522.
2019-12-03 19:41:57 +01:00
Mazdak Farrokhzad
ded98853ec
Rollup merge of #66960 - wesleywiser:fix_66787_take2, r=oli-obk,RalfJung
[const-prop] Fix ICE calculating enum discriminant

Fixes #66787

Different approach than #66857

r? @oli-obk
cc @RalfJung @eddyb
2019-12-03 19:41:55 +01:00
Esteban Küber
3091b823d1 Tweak wording of collect() on bad target type 2019-12-03 06:52:55 -08:00
Wesley Wiser
0be80f2909 [const-prop] Fix ICE calculating enum discriminant
Fixes #66787
2019-12-03 06:11:29 -05:00
Mazdak Farrokhzad
bce77980a2
Rollup merge of #66967 - Nadrieril:remove-or-pat-hack, r=varkor
Remove hack for top-level or-patterns in match checking

Follow-up to #66612.

Or-patterns are now truly first-class in match checking. As a side-effect, redundant subpatterns are linted as such, making the `unreachable_patterns` lint a bit more general.

cc #54883

r? @varkor
2019-12-03 11:07:08 +01:00
Mazdak Farrokhzad
cf937fa84d
Rollup merge of #66935 - petrochenkov:attrtok2, r=Centril
syntax: Unify macro and attribute arguments in AST

The unified form (`ast::MacArgs`) represents parsed arguments instead of an unstructured token stream that was previously used for attributes.
It also tracks some spans and delimiter kinds better for fn-like macros and macro definitions.

I've been talking about implementing this with @nnethercote in https://github.com/rust-lang/rust/pull/65750#issuecomment-546517322.
The parsed representation is closer to `MetaItem` and requires less token juggling during conversions, so it potentially may be faster.

r? @Centril
2019-12-03 11:07:05 +01:00
Mazdak Farrokhzad
8dacfc2ada
Rollup merge of #66651 - Areredify:on-unimplemented-scope, r=davidtwco
Add `enclosing scope` parameter to `rustc_on_unimplemented`

Adds a new parameter to `#[rustc_on_unimplemented]`, `enclosing scope`, which highlights the function or closure scope with a message.

The wip part refers to adding this annotation to `Try` trait to improve ergonomics (which I don't know how to do since I change both std and librustc)

Closes #61709.
2019-12-03 11:07:01 +01:00
Oliver Scherer
46c00a21e1 Move all intrinsic whitelists into the constness check file 2019-12-03 10:20:15 +01:00
Mahmut Bulut
f1bacb2dca Check intrinsics for callability in const fns 2019-12-03 10:20:15 +01:00
Ömer Sinan Ağacan
6857c93183 Check break target availability when checking breaks with values
Fixes #66702
2019-12-03 11:16:37 +03:00
Reese Williams
7693bb9e1d Add long error for E0631 and update ui tests. 2019-12-02 22:01:27 -05:00
Josh Stone
2304c25f31 Update the minimum external LLVM to 7
LLVM 7 is over a year old, which should be plenty for compatibility. The
last LLVM 6 holdout was llvm-emscripten, which went away in #65501.

I've also included a fix for LLVM 8 lacking `MemorySanitizerOptions`,
which was broken by #66522.
2019-12-02 11:36:21 -08:00
Vadim Petrochenkov
1a496f3379 syntax: Use ast::MacArgs for attributes 2019-12-02 21:56:34 +03:00
Vadim Petrochenkov
a81804b4d5 syntax: Introduce a struct MacArgs for macro arguments 2019-12-02 21:56:34 +03:00
Nadrieril
1c1bec2f6d Remove top-level or-pattern hack 2019-12-02 16:03:03 +00:00
Nadrieril
ef087d96f0 Move recently changed tests to the correct file 2019-12-02 16:03:03 +00:00
Nadrieril
a476af22e8 Correct error on partially unreachable or-pat in if let 2019-12-02 16:03:03 +00:00
Nadrieril
5c7bd52a78 Lint for redundant branches in or-patterns 2019-12-02 16:03:00 +00:00
Nadrieril
00ccadf43f Add some tests 2019-12-02 16:00:24 +00:00
Ralf Jung
f32f56969c
Rollup merge of #66654 - ecstatic-morse:check-consts-ref, r=eddyb,matthewjasper
Handle const-checks for `&mut` outside of `HasMutInterior`

Addresses [this comment](https://github.com/rust-lang/rust/pull/64470#discussion_r328200508).

Const-checking relied on `HasMutInterior` to forbid `&mut` in a const context. This was strange because all we needed to do was look for an `Rvalue::Ref` with a certain `BorrowKind`, whereas the `Qualif` traits are specifically meant to get the qualifs for a *value*. This PR removes that logic from `HasMutInterior` and moves it into `check_consts::Validator`.

As a result, we can now properly handle qualifications for `static`s, which had to be ignored previously since you can e.g. borrow a static `Cell` from another `static`. We also remove the `derived_from_illegal_borrow` logic, since it is no longer necessary; we give good errors for subsequent reborrows/borrows of illegal borrows.
2019-12-02 09:34:10 +01:00
Ralf Jung
8438770e1f
Rollup merge of #66245 - tmiasko:cfg-sanitize, r=oli-obk
Conditional compilation for sanitizers

Configure sanitize option when compiling with a sanitizer to make
it possible to execute different code depending on whether given
sanitizer is enabled or not.
2019-12-02 09:34:09 +01:00
Mazdak Farrokhzad
319064f469
Rollup merge of #66907 - eddyb:br-nicer-named, r=oli-obk
rustc: don't just show raw DefIndex's in BrNamed's fmt::Debug impl.

Context: these `fmt::Debug` impls only get used with `-Z verbose` (which some tests use).

I was going to print the path like in #66850 (or rather, use `DefId`'s `fmt::Debug`, which is close but not as nice), but then I realized that most of the `DefId`s were `crate0:DefIndex(0)`, i.e. the crate root.
As the crate root is not a lifetime, they're clearly dummies of some sort, and we don't have to print anything other than the name for them.

This means that out of all the tests, there's only 5 instances of `BrNamed` that now print the full path to the lifetime parameter, and everything else is shorter instead, which doesn't feel too bad.

cc @nikomatsakis
2019-12-02 04:09:04 +01:00
Vadim Petrochenkov
55ba05bd0d rustc_plugin: Remove support for plugin arguments 2019-12-01 20:53:25 +03:00
Tomasz Miąsko
c703ff2655 Conditional compilation for sanitizers
Configure sanitize option when compiling with a sanitizer to make
it possible to execute different code depending on whether given
sanitizer is enabled or not.
2019-12-01 09:03:35 +01:00
Mazdak Farrokhzad
d4f59564e7
Rollup merge of #66880 - aDotInTheVoid:add-E0203-long, r=GuillaumeGomez
Add long error code explanation message for E0203

Addressed some of #61137

r? @GuillaumeGomez
2019-12-01 04:49:29 +01:00
Mazdak Farrokhzad
99f9fa3695
Rollup merge of #66679 - mark-i-m:fix-anon-lifetime-errors, r=matthewjasper
Improve lifetime errors with implicit trait object lifetimes

r? @matthewjasper

cc @estebank

I still think the ideal solution would be to construct a `BrAnon`, but that seems like a more invasive change, and can be done later. This at least gets rid of the hack in `OutliveSuggestion` and is slightly more principled.
2019-12-01 04:49:23 +01:00
Eduard-Mihai Burtescu
84bad09420 rustc_mir: use nicer path printing for #[rustc_regions] NLL tests. 2019-11-30 18:47:21 +02:00
Mazdak Farrokhzad
472bee260e
Rollup merge of #66870 - tmiasko:simplify-ty, r=oli-obk
SimplifyArmIdentity only for locals with the same type

Fixes #66856
Fixes #66851
2019-11-30 16:56:52 +01:00
Mazdak Farrokhzad
3af14f994d
Rollup merge of #66612 - Nadrieril:or-patterns-initial, r=varkor
Initial implementation of or-pattern usefulness checking

The title says it all.
I'd like to request a perf run on that, hopefully this doesn't kill performance too much.

cc https://github.com/rust-lang/rust/issues/54883
2019-11-30 16:56:45 +01:00
Eduard-Mihai Burtescu
9034efe3f7 rustc: don't just show raw DefIndex's in BrNamed's fmt::Debug impl. 2019-11-30 17:29:56 +02:00
Nadrieril Feneanar
0f4c5fb20c
Apply suggestions from code review
Co-Authored-By: varkor <github@varkor.com>
2019-11-30 13:35:46 +00:00
David Tolnay
b14d9c2120
Rollup merge of #66847 - dtolnay:_fmt, r=joshtriplett
Allow any identifier as format arg name

Previously:

```console
error: invalid format string: invalid argument name `_x`
 --> src/main.rs:2:16
  |
2 |     println!("{_x}", _x=0);
  |                ^^ invalid argument name in format string
  |
  = note: argument names cannot start with an underscore
```

Not supporting identifiers starting with underscore appears to have been an arbitrary limitation from 2013 in code that was most likely never reviewed: https://github.com/rust-lang/rust/pull/8245/files#diff-0347868ef389c805e97636623e4a4ea6R277

The error message was dutifully improved in #50610 but is there any reason that leading underscore would be a special case?

This commit updates the format_args parser to accept identifiers with leading underscores.
2019-11-29 18:46:09 -08:00