Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Properly enforce the "patterns aren't allowed in foreign functions" rule #35015

Merged
merged 2 commits into from
Aug 4, 2016

Conversation

petrochenkov
Copy link
Contributor

@petrochenkov petrochenkov commented Jul 24, 2016

Cases like arg @ PATTERN or mut arg were missing.
Apply the same rule to function pointer types.

Closes #35203
[breaking-change], no breakage in sane code is expected though
r? @nikomatsakis

This is somewhat related to rust-lang/rfcs#1685 (cc @matklad).
The goal is to eventually support full pattern syntax where it makes sense (function body may present) and to support only the following forms - TYPE, ident: TYPE, _: TYPE - where patterns don't make sense (function body doesn't present), i.e. in foreign functions and function pointer types.

@nikomatsakis
Copy link
Contributor

Started crater run.

@nikomatsakis
Copy link
Contributor

PR looks good, but I'd like to see the results of the crater run so as to decide if this should be a warning or what.

@matklad
Copy link
Member

matklad commented Jul 26, 2016

Hm, if we make the plain TYPE syntax valid, then we perhaps be unable to give "You declared a pattern as an argument in a foreign function declaration." diagnostic, because we'll be unable to parse a pattern in that position.

@nikomatsakis
Copy link
Contributor

Crater run failed for some reason. =(

@nikomatsakis
Copy link
Contributor

Trying to restart this crater run.

@nikomatsakis
Copy link
Contributor

nikomatsakis commented Aug 2, 2016

Argh, sorry, that took a while. Here was the result:

https://gist.github.com/nikomatsakis/47dea4e98ffa9d3f350838602cc2a080

5424 crates tested: 3824 working / 1501 broken / 6 regressed / 35 fixed / 58 unknown.

Of those 6 regressions, only commands-0.0.3 was definitely caused by this PR. simd-0.11 was a timeout and hence inconclusive. The others all seemed to have to do with serde in some way that did not seem particularly related to this PR (confusing).

So, per rust-lang/rfcs#1589, So I'd be happy to land this change without a lint warning, but we are still missing a few things:

  • A special note on the change indicating that it is a new error and redirecting people to a tracking issue
  • A tracking issue explaining what changed
  • Submit a PR to commands-0.0.3

…heck

Apply the same check to function pointer types
@petrochenkov
Copy link
Contributor Author

@nikomatsakis
Done.

@nikomatsakis
Copy link
Contributor

@petrochenkov great!

@bors r+

@bors
Copy link
Contributor

bors commented Aug 3, 2016

📌 Commit 5c88efc has been approved by nikomatsakis

@bors
Copy link
Contributor

bors commented Aug 4, 2016

⌛ Testing commit 5c88efc with merge 271d048...

bors added a commit that referenced this pull request Aug 4, 2016
Properly enforce the "patterns aren't allowed in foreign functions" rule

Cases like `arg @ PATTERN` or `mut arg` were missing.
Apply the same rule to function pointer types.

Closes #35203
[breaking-change], no breakage in sane code is expected though
r? @nikomatsakis

This is somewhat related to rust-lang/rfcs#1685 (cc @matklad).
The goal is to eventually support full pattern syntax where it makes sense (function body may present) and to support *only* the following forms - `TYPE`, `ident: TYPE`, `_: TYPE` - where patterns don't make sense (function body doesn't present), i.e. in foreign functions and function pointer types.
@bors bors merged commit 5c88efc into rust-lang:master Aug 4, 2016
@petrochenkov petrochenkov deleted the forearg branch September 21, 2016 20:01
Manishearth added a commit to Manishearth/rust that referenced this pull request Oct 26, 2016
Prohibit patterns in trait methods without bodies

They are not properly type checked
```rust
trait Tr {
    fn f(&a: u8); // <- This compiles
}
```
, mostly rejected by the parser already and generally don't make much sense.
This PR is kind of a missing part of rust-lang#35015.

Needs crater run.
cc rust-lang#35078 (comment) rust-lang#35015 rust-lang/rfcs#1685 rust-lang#35203
r? @eddyb
bors added a commit that referenced this pull request Oct 29, 2016
Prohibit patterns in trait methods without bodies

They are not properly type checked
```rust
trait Tr {
    fn f(&a: u8); // <- This compiles
}
```
, mostly rejected by the parser already and generally don't make much sense.
This PR is kind of a missing part of #35015.

Given the [statistics from crater](#37378 (comment)), the effect of this PR is mostly equivalent to improving `unused_mut` lint.

cc #35078 (comment) #35015 rust-lang/rfcs#1685 #35203
r? @eddyb
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants