summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2021-03-28 01:33:13 +0900
committerGitHub <noreply@github.com>2021-03-28 01:33:13 +0900
commit973fb4b77feb589cd8fe4c0f5ee2454b246a1532 (patch)
tree63064f4bc45cb025d9ef27074c86a8393b15cdea /compiler
parent1f33a6a0daa472260aacd6788a84b27ba2c57f2b (diff)
parent5b9bac2ab62063229c419909f89a41890c57f78f (diff)
downloadrust-973fb4b77feb589cd8fe4c0f5ee2454b246a1532.tar.gz
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')
-rw-r--r--compiler/rustc_parse_format/src/lib.rs10
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))