mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
52f7a218fb
The `asm!` and `global_asm!` macros require their operands to appear strictly in the following order: - Template strings - Positional operands - Named operands - Explicit register operands - `clobber_abi` - `options` This is overly strict and can be inconvienent when building complex `asm!` statements with macros. This PR relaxes the ordering requirements as follows: - Template strings must still come before all other operands. - Positional operands must still come before named and explicit register operands. - Named and explicit register operands can be freely mixed. - `options` and `clobber_abi` can appear in any position.
203 lines
6.0 KiB
Plaintext
203 lines
6.0 KiB
Plaintext
error: invalid reference to argument at index 0
|
|
--> $DIR/bad-template.rs:31:15
|
|
|
|
|
LL | asm!("{}");
|
|
| ^^ from here
|
|
|
|
|
= note: no arguments were given
|
|
|
|
error: invalid reference to argument at index 1
|
|
--> $DIR/bad-template.rs:33:15
|
|
|
|
|
LL | asm!("{1}", in(reg) foo);
|
|
| ^^^ from here
|
|
|
|
|
= note: there is 1 argument
|
|
|
|
error: argument never used
|
|
--> $DIR/bad-template.rs:33:21
|
|
|
|
|
LL | asm!("{1}", in(reg) foo);
|
|
| ^^^^^^^^^^^ argument never used
|
|
|
|
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {0} */"`
|
|
|
|
error: there is no argument named `a`
|
|
--> $DIR/bad-template.rs:36:16
|
|
|
|
|
LL | asm!("{a}");
|
|
| ^
|
|
|
|
error: invalid reference to argument at index 0
|
|
--> $DIR/bad-template.rs:38:15
|
|
|
|
|
LL | asm!("{}", a = in(reg) foo);
|
|
| ^^ --------------- named argument
|
|
| |
|
|
| from here
|
|
|
|
|
= note: no positional arguments were given
|
|
note: named arguments cannot be referenced by position
|
|
--> $DIR/bad-template.rs:38:20
|
|
|
|
|
LL | asm!("{}", a = in(reg) foo);
|
|
| ^^^^^^^^^^^^^^^
|
|
|
|
error: named argument never used
|
|
--> $DIR/bad-template.rs:38:20
|
|
|
|
|
LL | asm!("{}", a = in(reg) foo);
|
|
| ^^^^^^^^^^^^^^^ named argument never used
|
|
|
|
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {a} */"`
|
|
|
|
error: invalid reference to argument at index 1
|
|
--> $DIR/bad-template.rs:41:15
|
|
|
|
|
LL | asm!("{1}", a = in(reg) foo);
|
|
| ^^^ from here
|
|
|
|
|
= note: no positional arguments were given
|
|
|
|
error: named argument never used
|
|
--> $DIR/bad-template.rs:41:21
|
|
|
|
|
LL | asm!("{1}", a = in(reg) foo);
|
|
| ^^^^^^^^^^^^^^^ named argument never used
|
|
|
|
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {a} */"`
|
|
|
|
error: invalid reference to argument at index 0
|
|
--> $DIR/bad-template.rs:45:15
|
|
|
|
|
LL | asm!("{}", in("eax") foo);
|
|
| ^^ ------------- explicit register argument
|
|
| |
|
|
| from here
|
|
|
|
|
= note: no positional arguments were given
|
|
note: explicit register arguments cannot be used in the asm template
|
|
--> $DIR/bad-template.rs:45:20
|
|
|
|
|
LL | asm!("{}", in("eax") foo);
|
|
| ^^^^^^^^^^^^^
|
|
help: use the register name directly in the assembly code
|
|
--> $DIR/bad-template.rs:45:20
|
|
|
|
|
LL | asm!("{}", in("eax") foo);
|
|
| ^^^^^^^^^^^^^
|
|
|
|
error: asm template modifier must be a single character
|
|
--> $DIR/bad-template.rs:50:17
|
|
|
|
|
LL | asm!("{:foo}", in(reg) foo);
|
|
| ^^^
|
|
|
|
error: multiple unused asm arguments
|
|
--> $DIR/bad-template.rs:53:18
|
|
|
|
|
LL | asm!("", in(reg) 0, in(reg) 1);
|
|
| ^^^^^^^^^ ^^^^^^^^^ argument never used
|
|
| |
|
|
| argument never used
|
|
|
|
|
= help: if these arguments are intentionally unused, consider using them in an asm comment: `"/* {0} {1} */"`
|
|
|
|
error: invalid reference to argument at index 0
|
|
--> $DIR/bad-template.rs:59:14
|
|
|
|
|
LL | global_asm!("{}");
|
|
| ^^ from here
|
|
|
|
|
= note: no arguments were given
|
|
|
|
error: invalid reference to argument at index 1
|
|
--> $DIR/bad-template.rs:61:14
|
|
|
|
|
LL | global_asm!("{1}", const FOO);
|
|
| ^^^ from here
|
|
|
|
|
= note: there is 1 argument
|
|
|
|
error: argument never used
|
|
--> $DIR/bad-template.rs:61:20
|
|
|
|
|
LL | global_asm!("{1}", const FOO);
|
|
| ^^^^^^^^^ argument never used
|
|
|
|
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {0} */"`
|
|
|
|
error: there is no argument named `a`
|
|
--> $DIR/bad-template.rs:64:15
|
|
|
|
|
LL | global_asm!("{a}");
|
|
| ^
|
|
|
|
error: invalid reference to argument at index 0
|
|
--> $DIR/bad-template.rs:66:14
|
|
|
|
|
LL | global_asm!("{}", a = const FOO);
|
|
| ^^ ------------- named argument
|
|
| |
|
|
| from here
|
|
|
|
|
= note: no positional arguments were given
|
|
note: named arguments cannot be referenced by position
|
|
--> $DIR/bad-template.rs:66:19
|
|
|
|
|
LL | global_asm!("{}", a = const FOO);
|
|
| ^^^^^^^^^^^^^
|
|
|
|
error: named argument never used
|
|
--> $DIR/bad-template.rs:66:19
|
|
|
|
|
LL | global_asm!("{}", a = const FOO);
|
|
| ^^^^^^^^^^^^^ named argument never used
|
|
|
|
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {a} */"`
|
|
|
|
error: invalid reference to argument at index 1
|
|
--> $DIR/bad-template.rs:69:14
|
|
|
|
|
LL | global_asm!("{1}", a = const FOO);
|
|
| ^^^ from here
|
|
|
|
|
= note: no positional arguments were given
|
|
|
|
error: named argument never used
|
|
--> $DIR/bad-template.rs:69:20
|
|
|
|
|
LL | global_asm!("{1}", a = const FOO);
|
|
| ^^^^^^^^^^^^^ named argument never used
|
|
|
|
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {a} */"`
|
|
|
|
error: asm template modifier must be a single character
|
|
--> $DIR/bad-template.rs:72:16
|
|
|
|
|
LL | global_asm!("{:foo}", const FOO);
|
|
| ^^^
|
|
|
|
error: multiple unused asm arguments
|
|
--> $DIR/bad-template.rs:74:17
|
|
|
|
|
LL | global_asm!("", const FOO, const FOO);
|
|
| ^^^^^^^^^ ^^^^^^^^^ argument never used
|
|
| |
|
|
| argument never used
|
|
|
|
|
= help: if these arguments are intentionally unused, consider using them in an asm comment: `"/* {0} {1} */"`
|
|
|
|
warning: formatting may not be suitable for sub-register argument
|
|
--> $DIR/bad-template.rs:50:15
|
|
|
|
|
LL | asm!("{:foo}", in(reg) foo);
|
|
| ^^^^^^ --- for this argument
|
|
|
|
|
= help: use `{0:e}` to have the register formatted as `eax`
|
|
= help: or use `{0:r}` to keep the default formatting of `rax`
|
|
= note: `#[warn(asm_sub_register)]` on by default
|
|
|
|
error: aborting due to 21 previous errors; 1 warning emitted
|
|
|