]> git.lizzy.rs Git - rust.git/commit
Auto merge of #105605 - inquisitivecrystal:attr-validation, r=cjgillot
authorbors <bors@rust-lang.org>
Mon, 26 Dec 2022 09:06:51 +0000 (09:06 +0000)
committerbors <bors@rust-lang.org>
Mon, 26 Dec 2022 09:06:51 +0000 (09:06 +0000)
commitf206533fd40378da6e2a07567e8d7592edd13ee4
treefef7f402534df2e2db69c49dadcae2c6e287c3a7
parent797b5f0f8e9ab6d02a6a1464b04dea75a7a4cde4
parent47b642677715caa8e5699ecb397e34125f3256e8
Auto merge of #105605 - inquisitivecrystal:attr-validation, r=cjgillot

Don't perform invalid checks in `codegen_attrs`

The attributes `#[track_caller]` and `#[cmse_nonsecure_entry]` are only valid on functions. When validating one of these attributes, codegen_attrs previously called `fn_sig`, [which can only be used on functions](https://github.com/rust-lang/rust/pull/105201), on the item the attribute was attached to, assuming that the item was a function without checking. This led to [ICEs in situations where the attribute was incorrectly used on non-functions](https://github.com/rust-lang/rust/issues/105594).

With this change, we skip calling `fn_sig` if the item the attribute is attached to must be a function but isn't, because `check_attr` will reject such cases without codegen_attrs's intervention.

As a side note, some of the attributes in codegen_attrs are only valid on functions, but that property isn't actually checked. I'm planning to fix that in a follow up PR since it's a behavior change that will need to be validated rather than an obvious bugfix. Thankfully, all the attributes like that I've found so far are unstable.

Fixes #105594.

r? `@cjgillot`