Commit graph

28733 commits

Author SHA1 Message Date
bors
6af388b250 Auto merge of #68847 - ecstatic-morse:const-impl, r=oli-obk
Allow trait methods to be called on concrete types in a const context

This partially implements [RFC 2632](https://github.com/rust-lang/rfcs/pull/2632) by const-checking methods inside an `impl const` block and allowing those methods to be called on concrete types. Calling trait methods on type parameters in a const context is not yet allowed. Implementing this will require much more work. Since we are only concerned with methods on concrete types, we are able to take advantage of the machinery in `Instance::resolve`, which is doing most of the work.

This also propagates `#[rustc_const_unstable]` from parent items to child items, making that attribute behave like `#[stable]` and `#[unstable]` do. This allows trait methods to be marked as unstably const.

cc #67792 #57563
cc @rust-lang/wg-const-eval
r? @oli-obk
2020-02-20 08:41:17 +00:00
Dylan MacKenzie
19801b12c9 Update tests 2020-02-19 09:39:29 -08:00
Dylan DPC
61d3b6dedb
Rollup merge of #69280 - ecstatic-morse:promote-shuffle-no-special-case, r=petrochenkov
Remove special case for `simd_shuffle` arg promotion

After rust-lang/stdarch#825, these intrinsics are now defined with `#[rustc_args_required_const(2)]`, so the special-case is no longer necessary.
2020-02-19 18:12:11 +01:00
Dylan MacKenzie
b43dc806ae Add #[rustc_args_required_const] to simd_shuffle tests 2020-02-18 23:36:09 -08:00
Dylan MacKenzie
160e6304e8 Add passing test for Add on generic struct 2020-02-18 21:03:29 -08:00
Dylan MacKenzie
c8f0abb51c Add ignored test for associated types in const impl 2020-02-18 21:03:29 -08:00
Dylan MacKenzie
4992eb2c6f Test rustc_const_unstable on trait fns 2020-02-18 21:03:29 -08:00
Dylan MacKenzie
70f78797d5 Ensure const impl cannot coexist with non-const impl 2020-02-18 21:03:29 -08:00
Dylan MacKenzie
d6d6d25c34 Split const trait method test and impl ops::Add 2020-02-18 21:03:28 -08:00
Dylan MacKenzie
323ff193b8 Add tests for calling trait methods on concrete types 2020-02-18 21:03:28 -08:00
bors
3a8108d8e5 Auto merge of #69113 - ecstatic-morse:unified-dataflow-borrowed, r=wesleywiser
Combine `HaveBeenBorrowedLocals` and `IndirectlyMutableLocals` into one dataflow analysis

This PR began as an attempt to port `HaveBeenBorrowedLocals` to the new dataflow framework (see #68241 for prior art). Along the way, I noticed that it could share most of its code with `IndirectlyMutableLocals` and then found a few bugs in the two analyses:
- Neither one marked locals as borrowed after an `Rvalue::AddressOf`.
- `IndirectlyMutableLocals` was missing a minor fix that `HaveBeenBorrowedLocals` got in #61069. This is not a problem today since it is only used during const-checking, where custom drop glue is forbidden. However, this may change some day.

I decided to combine the two analyses so that they wouldn't diverge in the future while ensuring that they remain distinct types (called `MaybeBorrowedLocals` and `MaybeMutBorrowedLocals` to be consistent with the `Maybe{Un,}InitializedPlaces` naming scheme). I fixed the bugs and switched to exhaustive matching where possible to make them less likely in the future. Finally, I added comments explaining some of the finer points of the transfer function for these analyses (see #61069 and #65006).
2020-02-19 04:57:10 +00:00
bors
a2fb0c28be Auto merge of #69241 - shahn:checked_add_revert, r=Mark-Simulacrum,lqd
Revert "Remove `checked_add` in `Layout::repeat`"

This fixes a a segfault in safe code, a stable regression. Reported in #69225.

This reverts commit a983e0590a.
2020-02-19 01:36:31 +00:00
Sebastian Hahn
3e17d191fa Revert "Remove checked_add in Layout::repeat"
This fixes a a segfault in safe code, a stable regression. Reported in
\#69225.

This reverts commit a983e0590a.

Also adds a test for the expected behaviour.
2020-02-18 23:57:48 +01:00
Mazdak Farrokhzad
6c6d45c6e7
Rollup merge of #69236 - Centril:mut-parens-at-recovery, r=estebank
parse: recover `mut (x @ y)` as `(mut x @ mut y)`.

Follow up to https://github.com/rust-lang/rust/pull/68992#discussion_r376829749 and https://github.com/rust-lang/rust/pull/63945.

Specifically, when given `let mut (x @ y)` we recover with `let (mut x @ mut y)` as the suggestion:

```rust
error: `mut` must be attached to each individual binding
  --> $DIR/mut-patterns.rs:12:9
   |
LL |     let mut (x @ y) = 0;
   |         ^^^^^^^^^^^ help: add `mut` to each binding: `(mut x @ mut y)`
   |
   = note: `mut` may be followed by `variable` and `variable @ pattern`
```

r? @matthewjasper @estebank
2020-02-18 22:16:31 +01:00
Mazdak Farrokhzad
c499570b5d
Rollup merge of #69217 - LeSeulArtichaut:remove-lint-impl-op, r=estebank
Do not emit note suggesting to implement operation trait to foreign type

When a binary operation isn't valid, you will get a lint proposing to add a trait implementation to make the operation possible. However, this cannot be done for foreign types, such as types from `core` or `std`.

For example:
```
= note: an implementation of `std::ops::Add` might be missing for `std::option::Option<i8>`
```
As mentioned in https://github.com/rust-lang/rust/issues/60497#issuecomment-562665539:
> The note suggesting implementing Add<i8> should only be emitted if Option<i8> were local to the current crate, which it isn't, so in this case it shouldn't be emitted.

(I will use the CI to check tests for me, or my computer will just burn... and running IDEs is not possible on a pile of ashes)

r? @estebank
2020-02-18 22:16:29 +01:00
Mazdak Farrokhzad
1cf0194b46
Rollup merge of #69211 - petrochenkov:prevtok, r=Centril
parser: Simplify treatment of macro variables in `Parser::bump`

Follow-up to https://github.com/rust-lang/rust/pull/69006.

Token normalization for `$ident` and `$lifetime` is merged directly into `bump`.
Special "unknown macro variable" diagnostic for unexpected `$`s is removed as preventing legal code from compiling (as a result `bump` also doesn't call itself recursively anymore and can't make `prev_token` inconsistent).

r? @Centril
2020-02-18 22:16:28 +01:00
Mazdak Farrokhzad
b864d23f34
Rollup merge of #69194 - Centril:assoc-extern-fuse, r=petrochenkov
parse: fuse associated and extern items up to defaultness

Language changes:

- The grammar of extern `type` aliases is unified with associated ones, and becomes:
  ```rust
  TypeItem = "type" ident generics {":" bounds}? where_clause {"=" type}? ";" ;
  ```

  Semantic restrictions (`ast_validation`) are added to forbid any parameters in `generics`, any bounds in `bounds`, and any predicates in `where_clause`, as well as the presence of a type expression (`= u8`).

  (Work still remains to fuse this with free `type` aliases, but this can be done later.)

- The grammar of constants and static items (free, associated, and extern) now permits the absence of an expression, and becomes:

  ```rust
  GlobalItem = {"const" {ident | "_"} | "static" "mut"? ident} {"=" expr}? ";" ;
  ```

  - A semantic restriction is added to enforce the presence of the expression (the body).
  - A semantic restriction is added to reject `const _` in associated contexts.

Together, these changes allow us to fuse the grammar of associated items and extern items up to `default`ness which is the main goal of the PR.

-----------------------

We are now very close to fully fusing the entirely of item parsing and their ASTs. To progress further, we must make a decision: should we parse e.g. `default use foo::bar;` and whatnot? Accepting that is likely easiest from a parsing perspective, as it does not require using look-ahead, but it is perhaps not too onerous to only accept it for `fn`s (and all their various qualifiers), `const`s, `static`s, and `type`s.

r? @petrochenkov
2020-02-18 22:16:26 +01:00
Mazdak Farrokhzad
981acd9035
Rollup merge of #69159 - estebank:use-appropriate-lt-name, r=ecstatic-morse
Select an appropriate unused lifetime name in suggestion

Follow up to #69048.
2020-02-18 22:16:24 +01:00
Mazdak Farrokhzad
5e2a095ba0
Rollup merge of #69146 - matthewjasper:literal-qualif, r=eddyb
Always const qualify literals by type

r? @eddyb
2020-02-18 22:16:23 +01:00
Dylan DPC
8b93e67c32
Rollup merge of #69200 - jonas-schievink:yield-print, r=eddyb,Zoxc
Fix printing of `Yield` terminator

Addresses the bug found in https://github.com/rust-lang/rust/issues/69039#issuecomment-586633495
2020-02-18 16:07:25 +01:00
Dylan DPC
d1f175b2ad
Rollup merge of #69192 - JohnTitor:add-tests, r=Centril
Add more regression tests

Closes #39618
Closes #51798
Closes #62894
Closes #63952
Closes #68653

r? @Centril
2020-02-18 16:07:24 +01:00
Yuki Okushi
8b34f72b4f
Rollup merge of #69223 - spunit262:empty-string-gdb-version, r=Dylan-DPC
Ignore GDB versions with broken str printing.

https://sourceware.org/bugzilla/show_bug.cgi?id=22236
2020-02-18 20:09:06 +09:00
Yuki Okushi
35e7c783a2
Rollup merge of #69175 - estebank:shall-not-ice, r=petrochenkov
Do not ICE when encountering `yield` inside `async` block

Fix #67158.
2020-02-18 20:09:05 +09:00
Yuki Okushi
6c4f8598b9
Rollup merge of #67272 - fisherdarling:master, r=varkor,hellow554
recursion_limit parsing handles overflows

This PR adds overflow handling to `#![recursion_limit]` attribute parsing. If parsing the given value results in an `IntErrorKind::Overflow`, then the recursion_limit is set to `usize::max_value()`.

closes #67265
2020-02-18 20:08:59 +09:00
Vadim Petrochenkov
950845c5b1 Add a test for proc macro generating $ IDENT 2020-02-17 22:47:59 +03:00
Vadim Petrochenkov
d33b3562e5 parser: Do not call bump recursively
Token normalization is merged directly into `bump`.
Special "unknown macro variable" diagnostic for unexpected `$`s is removed as preventing legal code from compiling.
2020-02-17 22:12:39 +03:00
Mazdak Farrokhzad
0b1e08cb55 parse: recover mut (x @ y) as (mut x @ mut y). 2020-02-17 16:08:13 +01:00
LeSeulArtichaut
2e07892c7d Do not emit note suggesting to implement trait to foreign type
Update tests

Extend to other operations

Refractor check in a separate function

Fix more tests
2020-02-17 15:21:36 +01:00
bors
0176a9eef8 Auto merge of #69129 - Centril:macro-legacy-errors, r=petrochenkov
Transition macro_legacy_warnings into a hard error

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

r? @petrochenkov
2020-02-17 11:54:49 +00:00
Esteban Küber
e5b2c66dea Do not ICE when encountering yield inside async block 2020-02-16 18:53:52 -08:00
Esteban Küber
8bafe883b6 Select an appropriate unused lifetime name in suggestion 2020-02-16 18:41:02 -08:00
Yuki Okushi
eb12ed889d Rename FunctionRetTy to FnRetTy 2020-02-17 11:24:29 +09:00
Fisher Darling
c53693d34d Handle recursion_limit parsing errors 2020-02-16 19:08:25 -07:00
spunit262
a9b5c692d9 Ignore GDB versions with broken str printing.
https://sourceware.org/bugzilla/show_bug.cgi?id=22236
2020-02-16 17:49:45 -07:00
bors
5e7af4669f Auto merge of #67885 - tobithiel:fix_group_lint_allow_override, r=Mark-Simulacrum
rustc_session: allow overriding lint level of individual lints from a group

Fixes #58211 and fixes rust-lang/rust-clippy#4778 and fixes rust-lang/rust-clippy#4091

Instead of hard-coding the lint level preferences (from lowest to highest precedence: `lint::Allow -> lint::Warn -> lint::Deny -> lint::Forbid`), the position of the argument in the command line gets taken into account.

Examples:
1. Passing `-D unused -A unused-variables` denies everything in the lint group `unused` **except** `unused-variables` which is explicitly allowed.
1. Passing `-A unused-variables -D unused` denies everything in the lint group `unused` **including** `unused-variables` since the allow is specified before the deny (and therefore overridden by the deny).

This matches the behavior that is already being used when specifying `allow`/`deny` in the source code.
2020-02-16 15:28:41 +00:00
Jonas Schievink
bb482ebf28 suspend -> yield 2020-02-16 13:08:36 +01:00
bors
2a0d1cbd46 Auto merge of #68814 - Aaron1011:fix/proc-macro-order-two, r=petrochenkov
Record proc macro harness order for use during metadata deserialization

Fixes #68690

When we generate the proc macro harness, we now explicitly recorder the
order in which we generate entries. We then use this ordering data to
deserialize the correct proc-macro-data from the crate metadata.
2020-02-16 01:46:05 +00:00
Jonas Schievink
759526e513 Fix printing of Yield terminator 2020-02-16 00:57:48 +01:00
bors
8ba3ca0e6b Auto merge of #68668 - GuillaumeGomez:struct-variant-field-search, r=ollie27
Struct variant field search

Fixes #16017.

Reopening of #64724.

cc @tomjakubowski
cc @ollie27

r? @kinnison
2020-02-15 22:32:51 +00:00
Mazdak Farrokhzad
d6238bd8d4 reject assoc statics & extern consts during parsing 2020-02-15 22:21:00 +01:00
Aaron Hill
51a16e574a
Record proc macro harness order for use during metadata deserialization
Fixes #68690

When we generate the proc macro harness, we now explicitly recorder the
order in which we generate entries. We then use this ordering data to
deserialize the correct proc-macro-data from the crate metadata.
2020-02-15 15:48:36 -05:00
Mazdak Farrokhzad
0e0c0286a2 fuse extern & associated item parsing up to defaultness 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
35884fe168 parse extern consts 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
f8d2264463 parse associated statics. 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
1c2906ead3 ast/parser: fuse static & const grammars in all contexts. 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
f3e9763543 ast: make = <expr>; optional in free statics/consts. 2020-02-15 20:57:12 +01:00
Yuki Okushi
2f39ec24b2 Add FIXME note 2020-02-16 04:36:44 +09:00
Yuki Okushi
9478503315 Add test for issue-68653 2020-02-16 03:22:00 +09:00
Yuki Okushi
426dcf0da0 Add test for issue-63952 2020-02-16 03:22:00 +09:00
Yuki Okushi
ecb8bf069e Add test for issue-62894 2020-02-16 03:22:00 +09:00