check if merged attributes list is empty

This commit is contained in:
Takayuki Maeda 2025-04-05 06:09:14 +09:00
parent ae9173d7dd
commit 6b5ccfc87f
3 changed files with 48 additions and 7 deletions

View file

@ -74,14 +74,16 @@ impl<'hir> LoweringContext<'_, 'hir> {
// Merge attributes into the inner expression.
if !e.attrs.is_empty() {
let old_attrs = self.attrs.get(&ex.hir_id.local_id).copied().unwrap_or(&[]);
self.attrs.insert(
ex.hir_id.local_id,
&*self.arena.alloc_from_iter(
self.lower_attrs_vec(&e.attrs, e.span)
.into_iter()
.chain(old_attrs.iter().cloned()),
),
let attrs = &*self.arena.alloc_from_iter(
self.lower_attrs_vec(&e.attrs, e.span)
.into_iter()
.chain(old_attrs.iter().cloned()),
);
if attrs.is_empty() {
return ex;
}
self.attrs.insert(ex.hir_id.local_id, attrs);
}
return ex;
}

View file

@ -0,0 +1,6 @@
fn main() {
let y = #[repr(uwu(4))]
//~^ ERROR attributes on expressions are experimental
//~| ERROR unrecognized representation hint
(&id(5)); //~ ERROR: cannot find function `id` in this scope
}

View file

@ -0,0 +1,33 @@
error[E0658]: attributes on expressions are experimental
--> $DIR/invalid-reprs.rs:2:13
|
LL | let y = #[repr(uwu(4))]
| ^^^^^^^^^^^^^^^
|
= note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0425]: cannot find function `id` in this scope
--> $DIR/invalid-reprs.rs:5:7
|
LL | (&id(5));
| ^^ not found in this scope
|
help: consider importing this function
|
LL + use std::process::id;
|
error[E0552]: unrecognized representation hint
--> $DIR/invalid-reprs.rs:2:20
|
LL | let y = #[repr(uwu(4))]
| ^^^^^^
|
= help: valid reprs are `Rust` (default), `C`, `align`, `packed`, `transparent`, `simd`, `i8`, `u8`, `i16`, `u16`, `i32`, `u32`, `i64`, `u64`, `i128`, `u128`, `isize`, `usize`
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0425, E0552, E0658.
For more information about an error, try `rustc --explain E0425`.