diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-03-28 01:33:13 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-28 01:33:13 +0900 |
| commit | 973fb4b77feb589cd8fe4c0f5ee2454b246a1532 (patch) | |
| tree | 63064f4bc45cb025d9ef27074c86a8393b15cdea /compiler/rustc_parse_format/src | |
| parent | 1f33a6a0daa472260aacd6788a84b27ba2c57f2b (diff) | |
| parent | 5b9bac2ab62063229c419909f89a41890c57f78f (diff) | |
| download | rust-973fb4b77feb589cd8fe4c0f5ee2454b246a1532.tar.gz rust-973fb4b77feb589cd8fe4c0f5ee2454b246a1532.zip | |
Rollup merge of #83348 - osa1:issue83344, r=jackh726
format macro argument parsing fix
When the character next to `{}` is "shifted" (when mapping a byte index
in the format string to span) we should avoid shifting the span end
index, so first map the index of `}` to span, then bump the span,
instead of first mapping the next byte index to a span (which causes
bumping the end span too much).
Regression test added.
Fixes #83344
---
r? ```@estebank```
Diffstat (limited to 'compiler/rustc_parse_format/src')
| -rw-r--r-- | compiler/rustc_parse_format/src/lib.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/rustc_parse_format/src/lib.rs b/compiler/rustc_parse_format/src/lib.rs index a5fdf064e94..50db69f4209 100644 --- a/compiler/rustc_parse_format/src/lib.rs +++ b/compiler/rustc_parse_format/src/lib.rs @@ -213,11 +213,13 @@ impl<'a> Iterator for Parser<'a> { Some(String(self.string(pos + 1))) } else { let arg = self.argument(); - if let Some(end) = self.must_consume('}') { - let start = self.to_span_index(pos); - let end = self.to_span_index(end + 1); + if let Some(rbrace_byte_idx) = self.must_consume('}') { + let lbrace_inner_offset = self.to_span_index(pos); + let rbrace_inner_offset = self.to_span_index(rbrace_byte_idx); if self.is_literal { - self.arg_places.push(start.to(end)); + self.arg_places.push( + lbrace_inner_offset.to(InnerOffset(rbrace_inner_offset.0 + 1)), + ); } } Some(NextArgument(arg)) |
