From 30d950231e430d3fc4f6e27f6ebb47e8056dc3f7 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 14 May 2018 20:17:21 +0200 Subject: [PATCH] Add missing error codes in libsyntax-ext asm --- src/libsyntax_ext/asm.rs | 9 ++++-- src/libsyntax_ext/diagnostics.rs | 52 ++++++++++++++++++++++++++++++++ src/test/ui/E0662.rs | 20 ++++++++++++ src/test/ui/E0662.stderr | 9 ++++++ src/test/ui/E0663.rs | 20 ++++++++++++ src/test/ui/E0663.stderr | 9 ++++++ src/test/ui/E0664.rs | 21 +++++++++++++ src/test/ui/E0664.stderr | 9 ++++++ 8 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 src/test/ui/E0662.rs create mode 100644 src/test/ui/E0662.stderr create mode 100644 src/test/ui/E0663.rs create mode 100644 src/test/ui/E0663.stderr create mode 100644 src/test/ui/E0664.rs create mode 100644 src/test/ui/E0664.stderr diff --git a/src/libsyntax_ext/asm.rs b/src/libsyntax_ext/asm.rs index e1eabc5cb0145..369c5b1ff60db 100644 --- a/src/libsyntax_ext/asm.rs +++ b/src/libsyntax_ext/asm.rs @@ -179,9 +179,11 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, let (constraint, _str_style) = panictry!(p.parse_str()); if constraint.as_str().starts_with("=") { - cx.span_err(p.prev_span, "input operand constraint contains '='"); + span_err_if_not_stage0!(cx, p.prev_span, E0662, + "input operand constraint contains '='"); } else if constraint.as_str().starts_with("+") { - cx.span_err(p.prev_span, "input operand constraint contains '+'"); + span_err_if_not_stage0!(cx, p.prev_span, E0663, + "input operand constraint contains '+'"); } panictry!(p.expect(&token::OpenDelim(token::Paren))); @@ -203,7 +205,8 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, if OPTIONS.iter().any(|&opt| s == opt) { cx.span_warn(p.prev_span, "expected a clobber, found an option"); } else if s.as_str().starts_with("{") || s.as_str().ends_with("}") { - cx.span_err(p.prev_span, "clobber should not be surrounded by braces"); + span_err_if_not_stage0!(cx, p.prev_span, E0664, + "clobber should not be surrounded by braces"); } clobs.push(s); diff --git a/src/libsyntax_ext/diagnostics.rs b/src/libsyntax_ext/diagnostics.rs index a840c0392e9fe..33ae24c37e53f 100644 --- a/src/libsyntax_ext/diagnostics.rs +++ b/src/libsyntax_ext/diagnostics.rs @@ -38,6 +38,58 @@ let a; asm!("nop" : "r"(a)); ``` +Considering that this would be a long explanation, we instead recommend you to +take a look at the unstable book: +https://doc.rust-lang.org/unstable-book/language-features/asm.html +"##, + +E0662: r##" +An invalid input operand constraint was passed to the `asm` macro (third line). + +Erroneous code example: + +```compile_fail,E0662 +asm!("xor %eax, %eax" + : + : "=test"("a") + ); +``` + +Considering that this would be a long explanation, we instead recommend you to +take a look at the unstable book: +https://doc.rust-lang.org/unstable-book/language-features/asm.html +"##, + +E0663: r##" +An invalid input operand constraint was passed to the `asm` macro (third line). + +Erroneous code example: + +```compile_fail,E0663 +asm!("xor %eax, %eax" + : + : "+test"("a") + ); +``` + +Considering that this would be a long explanation, we instead recommend you to +take a look at the unstable book: +https://doc.rust-lang.org/unstable-book/language-features/asm.html +"##, + +E0664: r##" +A clobber was surrounded by braces in the `asm` macro. + +Erroneous code example: + +```compile_fail,E0663 +asm!("mov $$0x200, %eax" + : + : + : "{eax}" + ); +``` + Considering that this would be a long explanation, we instead recommend you to take a look at the unstable book: https://doc.rust-lang.org/unstable-book/language-features/asm.html diff --git a/src/test/ui/E0662.rs b/src/test/ui/E0662.rs new file mode 100644 index 0000000000000..6adb11c56169c --- /dev/null +++ b/src/test/ui/E0662.rs @@ -0,0 +1,20 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-stage1 + +#![feature(asm)] + +fn main() { + asm!("xor %eax, %eax" + : + : "=test"("a") //~ ERROR E0662 + ); +} diff --git a/src/test/ui/E0662.stderr b/src/test/ui/E0662.stderr new file mode 100644 index 0000000000000..215e3a6d2f023 --- /dev/null +++ b/src/test/ui/E0662.stderr @@ -0,0 +1,9 @@ +error[E0662]: input operand constraint contains '=' + --> $DIR/E0662.rs:18:12 + | +LL | : "=test"("a") //~ ERROR E0662 + | ^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0662`. diff --git a/src/test/ui/E0663.rs b/src/test/ui/E0663.rs new file mode 100644 index 0000000000000..9eb05ada4a82a --- /dev/null +++ b/src/test/ui/E0663.rs @@ -0,0 +1,20 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-stage1 + +#![feature(asm)] + +fn main() { + asm!("xor %eax, %eax" + : + : "+test"("a") //~ ERROR E0663 + ); +} diff --git a/src/test/ui/E0663.stderr b/src/test/ui/E0663.stderr new file mode 100644 index 0000000000000..123aa73eccc5e --- /dev/null +++ b/src/test/ui/E0663.stderr @@ -0,0 +1,9 @@ +error[E0663]: input operand constraint contains '+' + --> $DIR/E0663.rs:18:12 + | +LL | : "+test"("a") //~ ERROR E0663 + | ^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0663`. diff --git a/src/test/ui/E0664.rs b/src/test/ui/E0664.rs new file mode 100644 index 0000000000000..738ffc18e3827 --- /dev/null +++ b/src/test/ui/E0664.rs @@ -0,0 +1,21 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-stage1 + +#![feature(asm)] + +fn main() { + asm!("mov $$0x200, %eax" + : + : + : "{eax}" //~ ERROR E0664 + ); +} diff --git a/src/test/ui/E0664.stderr b/src/test/ui/E0664.stderr new file mode 100644 index 0000000000000..570811729be85 --- /dev/null +++ b/src/test/ui/E0664.stderr @@ -0,0 +1,9 @@ +error[E0664]: clobber should not be surrounded by braces + --> $DIR/E0664.rs:19:12 + | +LL | : "{eax}" //~ ERROR E0664 + | ^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0664`.