Rollup merge of #71205 - NeoRaider:check_attr, r=jonas-schievink

rustc: fix check_attr() for methods, closures and foreign functions

This fixes an issue that previously turned up for methods in https://github.com/rust-lang/rust/pull/69274, but also exists for closures and foreign function: `check_attr` does not call `codegen_fn_attrs()` for these types when it should, meaning that incorrectly used function attributes are not diagnosed without codegen.

The issue affects our UI tests, as they run with `--emit=metadata` by default, but as it turns out, this is not the only case: Function attributes are not checked on any dead code without this fix!

This makes the fix a **breaking change**. The following very silly Rust programs compiles fine on stable Rust when it should not, which is fixed by this PR.
```rust
fn main() {
    #[target_feature(enable = "sse2")]
    || {};
}
```

I assume any real-world program which may trigger this issue would at least emit a dead code warning, but of course that is no guarantee that such code does not exist...

Fixes #70307
This commit is contained in:
Dylan DPC 2020-04-30 14:07:52 +02:00 committed by GitHub
commit 4e6772b52b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 124 additions and 22 deletions

View file

@ -1,5 +1,3 @@
// build-fail
#![feature(track_caller)]
fn main() {

View file

@ -1,5 +1,5 @@
error: `#[target_feature(..)]` can only be applied to `unsafe` functions
--> $DIR/issue-68060.rs:8:13
--> $DIR/issue-68060.rs:6:13
|
LL | #[target_feature(enable = "")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can only be applied to `unsafe` functions
@ -8,13 +8,13 @@ LL | |_| (),
| ------ not an `unsafe` function
error: the feature named `` is not valid for this target
--> $DIR/issue-68060.rs:8:30
--> $DIR/issue-68060.rs:6:30
|
LL | #[target_feature(enable = "")]
| ^^^^^^^^^^^ `` is not valid for this target
error[E0737]: `#[track_caller]` requires Rust ABI
--> $DIR/issue-68060.rs:11:13
--> $DIR/issue-68060.rs:9:13
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^