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.
|
||||
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;
|
||||
}
|
||||
|
|
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