Skip to content

Commit

Permalink
auto merge of #15785 : treeman/rust/fix-15780, r=alexcrichton
Browse files Browse the repository at this point in the history
Fix for #15780.
  • Loading branch information
bors committed Jul 20, 2014
2 parents 50481f5 + 820a558 commit 4f55b52
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/libsyntax/ext/format.rs
Expand Up @@ -215,12 +215,21 @@ impl<'a, 'b> Context<'a, 'b> {
}
}

fn describe_num_args(&self) -> String {
match self.args.len() {
0 => "no arguments given".to_string(),
1 => "there is 1 argument".to_string(),
x => format!("there are {} arguments", x),
}
}

fn verify_arg_type(&mut self, arg: Position, ty: ArgumentType) {
match arg {
Exact(arg) => {
if self.args.len() <= arg {
let msg = format!("invalid reference to argument `{}` (there \
are {} arguments)", arg, self.args.len());
let msg = format!("invalid reference to argument `{}` ({:s})",
arg, self.describe_num_args());

self.ecx.span_err(self.fmtsp, msg.as_slice());
return;
}
Expand Down
15 changes: 15 additions & 0 deletions src/test/compile-fail/ifmt-bad-arg.rs
Expand Up @@ -29,6 +29,21 @@ fn main() {
format!("{foo}", foo=1, foo=2); //~ ERROR: duplicate argument
format!("", foo=1, 2); //~ ERROR: positional arguments cannot follow

// bad number of arguments, see #15780

format!("{0}");
//~^ ERROR invalid reference to argument `0` (no arguments given)

format!("{0} {1}", 1);
//~^ ERROR invalid reference to argument `1` (there is 1 argument)

format!("{0} {1} {2}", 1, 2);
//~^ ERROR invalid reference to argument `2` (there are 2 arguments)

format!("{0} {1}");
//~^ ERROR invalid reference to argument `0` (no arguments given)
//~^^ ERROR invalid reference to argument `1` (no arguments given)

// bad syntax of the format string

format!("{"); //~ ERROR: expected `}` but string was terminated
Expand Down

0 comments on commit 4f55b52

Please sign in to comment.