check if merged attributes list is empty
This commit is contained in:
parent
ae9173d7dd
commit
6b5ccfc87f
3 changed files with 48 additions and 7 deletions
|
@ -74,14 +74,16 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||||
// Merge attributes into the inner expression.
|
// Merge attributes into the inner expression.
|
||||||
if !e.attrs.is_empty() {
|
if !e.attrs.is_empty() {
|
||||||
let old_attrs = self.attrs.get(&ex.hir_id.local_id).copied().unwrap_or(&[]);
|
let old_attrs = self.attrs.get(&ex.hir_id.local_id).copied().unwrap_or(&[]);
|
||||||
self.attrs.insert(
|
let attrs = &*self.arena.alloc_from_iter(
|
||||||
ex.hir_id.local_id,
|
self.lower_attrs_vec(&e.attrs, e.span)
|
||||||
&*self.arena.alloc_from_iter(
|
.into_iter()
|
||||||
self.lower_attrs_vec(&e.attrs, e.span)
|
.chain(old_attrs.iter().cloned()),
|
||||||
.into_iter()
|
|
||||||
.chain(old_attrs.iter().cloned()),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
if attrs.is_empty() {
|
||||||
|
return ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.attrs.insert(ex.hir_id.local_id, attrs);
|
||||||
}
|
}
|
||||||
return ex;
|
return ex;
|
||||||
}
|
}
|
||||||
|
|
6
tests/ui/attributes/invalid-reprs.rs
Normal file
6
tests/ui/attributes/invalid-reprs.rs
Normal 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
|
||||||
|
}
|
33
tests/ui/attributes/invalid-reprs.stderr
Normal file
33
tests/ui/attributes/invalid-reprs.stderr
Normal 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`.
|
Loading…
Add table
Add a link
Reference in a new issue