Rollup merge of #126922 - asquared31415:asm_binary_label, r=estebank
add lint for inline asm labels that look like binary fixes #94426 Due to a bug/feature in LLVM, labels composed of only the digits `0` and `1` can sometimes be confused with binary literals, even if a binary literal would not be valid in that position. This PR adds detection for such labels and also as a drive-by change, adds a note to cases such as `asm!(include_str!("file"))` that the label that it found came from an expansion of a macro, it wasn't found in the source code. I expect this PR to upset some people that were using labels `0:` or `1:` without issue because they never hit the case where LLVM got it wrong, but adding a heuristic to the lint to prevent this is not feasible - it would involve writing a whole assembly parser for every target that we have assembly support for. [zulip discussion](https://rust-lang.zulipchat.com/#narrow/stream/238009-t-compiler.2Fmeetings/topic/.5Bweekly.5D.202024-06-20/near/445870628) r? ``@estebank``
This commit is contained in:
commit
fc0136e4f4
8 changed files with 397 additions and 91 deletions
|
@ -2047,10 +2047,32 @@ pub struct UnitBindingsDiag {
|
|||
}
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(lint_builtin_asm_labels)]
|
||||
#[help]
|
||||
#[note]
|
||||
pub struct BuiltinNamedAsmLabel;
|
||||
pub enum InvalidAsmLabel {
|
||||
#[diag(lint_invalid_asm_label_named)]
|
||||
#[help]
|
||||
#[note]
|
||||
Named {
|
||||
#[note(lint_invalid_asm_label_no_span)]
|
||||
missing_precise_span: bool,
|
||||
},
|
||||
#[diag(lint_invalid_asm_label_format_arg)]
|
||||
#[help]
|
||||
#[note(lint_note1)]
|
||||
#[note(lint_note2)]
|
||||
FormatArg {
|
||||
#[note(lint_invalid_asm_label_no_span)]
|
||||
missing_precise_span: bool,
|
||||
},
|
||||
#[diag(lint_invalid_asm_label_binary)]
|
||||
#[note]
|
||||
Binary {
|
||||
#[note(lint_invalid_asm_label_no_span)]
|
||||
missing_precise_span: bool,
|
||||
// hack to get a label on the whole span, must match the emitted span
|
||||
#[label]
|
||||
span: Span,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
pub enum UnexpectedCfgCargoHelp {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue