Auto merge of #50317 - varkor:repr-align-assign, r=nagisa
Improve error message for #[repr(align=x)] Before: ``` error[E0552]: unrecognized representation hint --> src/main.rs:1:8 | 1 | #[repr(align="8")] | ^^^^^^^^^ ``` After: ``` error[E0693]: incorrect `repr(align)` attribute format --> src/main.rs:1:8 | 2 | #[repr(align="8")] | ^^^^^^^^^ help: use parentheses instead: `align(8)` ``` Fixes #50314.
This commit is contained in:
commit
774a6a3c4b
4 changed files with 57 additions and 0 deletions
|
@ -1045,6 +1045,30 @@ pub fn find_repr_attrs(diagnostic: &Handler, attr: &Attribute) -> Vec<ReprAttr>
|
|||
span_err!(diagnostic, item.span, E0589,
|
||||
"invalid `repr(align)` attribute: {}", literal_error);
|
||||
}
|
||||
} else {
|
||||
if let Some(meta_item) = item.meta_item() {
|
||||
if meta_item.ident.name == "align" {
|
||||
if let MetaItemKind::NameValue(ref value) = meta_item.node {
|
||||
recognised = true;
|
||||
let mut err = struct_span_err!(diagnostic, item.span, E0693,
|
||||
"incorrect `repr(align)` attribute format");
|
||||
match value.node {
|
||||
ast::LitKind::Int(int, ast::LitIntType::Unsuffixed) => {
|
||||
err.span_suggestion(item.span,
|
||||
"use parentheses instead",
|
||||
format!("align({})", int));
|
||||
}
|
||||
ast::LitKind::Str(s, _) => {
|
||||
err.span_suggestion(item.span,
|
||||
"use parentheses instead",
|
||||
format!("align({})", s));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if !recognised {
|
||||
// Not a word we recognize
|
||||
|
|
|
@ -324,4 +324,5 @@ register_diagnostics! {
|
|||
E0589, // invalid `repr(align)` attribute
|
||||
E0629, // missing 'feature' (rustc_const_unstable)
|
||||
E0630, // rustc_const_unstable attribute must be paired with stable/unstable attribute
|
||||
E0693, // incorrect `repr(align)` attribute format
|
||||
}
|
||||
|
|
17
src/test/ui/repr-align-assign.rs
Normal file
17
src/test/ui/repr-align-assign.rs
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#[repr(align=8)] //~ ERROR incorrect `repr(align)` attribute format
|
||||
struct A(u64);
|
||||
|
||||
#[repr(align="8")] //~ ERROR incorrect `repr(align)` attribute format
|
||||
struct B(u64);
|
||||
|
||||
fn main() {}
|
15
src/test/ui/repr-align-assign.stderr
Normal file
15
src/test/ui/repr-align-assign.stderr
Normal file
|
@ -0,0 +1,15 @@
|
|||
error[E0693]: incorrect `repr(align)` attribute format
|
||||
--> $DIR/repr-align-assign.rs:11:8
|
||||
|
|
||||
LL | #[repr(align=8)] //~ ERROR incorrect `repr(align)` attribute format
|
||||
| ^^^^^^^ help: use parentheses instead: `align(8)`
|
||||
|
||||
error[E0693]: incorrect `repr(align)` attribute format
|
||||
--> $DIR/repr-align-assign.rs:14:8
|
||||
|
|
||||
LL | #[repr(align="8")] //~ ERROR incorrect `repr(align)` attribute format
|
||||
| ^^^^^^^^^ help: use parentheses instead: `align(8)`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0693`.
|
Loading…
Add table
Add a link
Reference in a new issue