diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2018-05-14 20:17:21 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2018-05-15 14:29:57 +0200 |
| commit | 30d950231e430d3fc4f6e27f6ebb47e8056dc3f7 (patch) | |
| tree | 594f03ee9fa45fe37fbee1b430a659cba7d418ef | |
| parent | cb1ce7ddf8e791faddc9760ca505d513ce1c00c9 (diff) | |
| download | rust-30d950231e430d3fc4f6e27f6ebb47e8056dc3f7.tar.gz rust-30d950231e430d3fc4f6e27f6ebb47e8056dc3f7.zip | |
Add missing error codes in libsyntax-ext asm
| -rw-r--r-- | src/libsyntax_ext/asm.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax_ext/diagnostics.rs | 52 | ||||
| -rw-r--r-- | src/test/ui/E0662.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/E0662.stderr | 9 | ||||
| -rw-r--r-- | src/test/ui/E0663.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/E0663.stderr | 9 | ||||
| -rw-r--r-- | src/test/ui/E0664.rs | 21 | ||||
| -rw-r--r-- | src/test/ui/E0664.stderr | 9 |
8 files changed, 146 insertions, 3 deletions
diff --git a/src/libsyntax_ext/asm.rs b/src/libsyntax_ext/asm.rs index e1eabc5cb01..369c5b1ff60 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 a840c0392e9..33ae24c37e5 100644 --- a/src/libsyntax_ext/diagnostics.rs +++ b/src/libsyntax_ext/diagnostics.rs @@ -42,4 +42,56 @@ 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 00000000000..6adb11c5616 --- /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 <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. + +// 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 00000000000..215e3a6d2f0 --- /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 00000000000..9eb05ada4a8 --- /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 <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. + +// 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 00000000000..123aa73eccc --- /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 00000000000..738ffc18e38 --- /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 <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. + +// 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 00000000000..570811729be --- /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`. |
