diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2022-02-07 14:08:33 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-07 14:08:33 +0000 |
| commit | 4445a8ff84e1d729df1b0320760bd8f5dd618e78 (patch) | |
| tree | bfb9137b3126a7f9246e2fea88910da93d9bf831 /src/test/ui | |
| parent | e3c972e2524319a1eec1bf905bf8aafa5cda7218 (diff) | |
| parent | cef9b4758386622c2c52df0920eea978786283a0 (diff) | |
| download | rust-4445a8ff84e1d729df1b0320760bd8f5dd618e78.tar.gz rust-4445a8ff84e1d729df1b0320760bd8f5dd618e78.zip | |
Rollup merge of #93394 - m-ou-se:fix-93378, r=estebank
Don't allow {} to refer to implicit captures in format_args.
Fixes #93378
Diffstat (limited to 'src/test/ui')
| -rw-r--r-- | src/test/ui/fmt/format-args-capture-issue-93378.rs | 11 | ||||
| -rw-r--r-- | src/test/ui/fmt/format-args-capture-issue-93378.stderr | 22 | ||||
| -rw-r--r-- | src/test/ui/fmt/format-args-capture.rs | 8 |
3 files changed, 41 insertions, 0 deletions
diff --git a/src/test/ui/fmt/format-args-capture-issue-93378.rs b/src/test/ui/fmt/format-args-capture-issue-93378.rs new file mode 100644 index 00000000000..67444444264 --- /dev/null +++ b/src/test/ui/fmt/format-args-capture-issue-93378.rs @@ -0,0 +1,11 @@ +fn main() { + let a = "a"; + let b = "b"; + + println!("{a} {b} {} {} {c} {}", c = "c"); + //~^ ERROR: invalid reference to positional arguments 1 and 2 (there is 1 argument) + + let n = 1; + println!("{a:.n$} {b:.*}"); + //~^ ERROR: invalid reference to positional argument 0 (no arguments were given) +} diff --git a/src/test/ui/fmt/format-args-capture-issue-93378.stderr b/src/test/ui/fmt/format-args-capture-issue-93378.stderr new file mode 100644 index 00000000000..588541044fe --- /dev/null +++ b/src/test/ui/fmt/format-args-capture-issue-93378.stderr @@ -0,0 +1,22 @@ +error: invalid reference to positional arguments 1 and 2 (there is 1 argument) + --> $DIR/format-args-capture-issue-93378.rs:5:26 + | +LL | println!("{a} {b} {} {} {c} {}", c = "c"); + | ^^ ^^ + | + = note: positional arguments are zero-based + +error: invalid reference to positional argument 0 (no arguments were given) + --> $DIR/format-args-capture-issue-93378.rs:9:23 + | +LL | println!("{a:.n$} {b:.*}"); + | ------- ^^^--^ + | | | + | | this precision flag adds an extra required argument at position 0, which is why there are 3 arguments expected + | this parameter corresponds to the precision flag + | + = note: positional arguments are zero-based + = note: for information about formatting flags, visit https://doc.rust-lang.org/std/fmt/index.html + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/fmt/format-args-capture.rs b/src/test/ui/fmt/format-args-capture.rs index e830a5bc9c5..d31d2a6c336 100644 --- a/src/test/ui/fmt/format-args-capture.rs +++ b/src/test/ui/fmt/format-args-capture.rs @@ -5,6 +5,7 @@ fn main() { named_argument_takes_precedence_to_captured(); formatting_parameters_can_be_captured(); capture_raw_strings_and_idents(); + repeated_capture(); #[cfg(panic = "unwind")] { @@ -80,3 +81,10 @@ fn formatting_parameters_can_be_captured() { let s = format!("{x:-^width$.precision$}"); assert_eq!(&s, "--7.000--"); } + +fn repeated_capture() { + let a = 1; + let b = 2; + let s = format!("{a} {b} {a}"); + assert_eq!(&s, "1 2 1"); +} |
