Skip to content

Polish some macro parsing code#158577

Merged
rust-bors[bot] merged 19 commits into
rust-lang:mainfrom
bal-e:macro-parsing-polish
Jul 7, 2026
Merged

Polish some macro parsing code#158577
rust-bors[bot] merged 19 commits into
rust-lang:mainfrom
bal-e:macro-parsing-polish

Conversation

@bal-e

@bal-e bal-e commented Jun 29, 2026

Copy link
Copy Markdown

View all comments

I'm working on some optimizations to macro_parser.rs and the surrounding code (specifically, changing the current BFS approach into a DFS), and these changes fell out during that effort. I think they make the code more accessible in addition to laying some foundations for my future work (in particular, the handling of ambiguities).

This is my first proper entrance into rustc code, please let me know if I'm holding something wrong :)

The commits are organized and individually reviewable.

r? @nnethercote

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 29, 2026
@rustbot

rustbot commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Thanks for the pull request, and welcome! The Rust Project is excited to review your changes, and you should hear from @nnethercote (or someone else) some time within the next two weeks.

Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate:

  • @rustbot author: the review is finished, PR author should check the comments and take action accordingly
  • @rustbot review: the author is ready for a review, this PR will be queued again in the reviewer's queue

@rust-log-analyzer

This comment has been minimized.

@bal-e
bal-e force-pushed the macro-parsing-polish branch from a0f4444 to e9fd0f3 Compare June 29, 2026 18:24
@rust-log-analyzer

This comment has been minimized.

@nnethercote nnethercote left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR and welcome to rust-lang/rust!

Five of these eight commits look good to me, and for three of them I have concerns.

  • Replace Cow with an explicit fast-path is extra complexity and I don't think it's a net improvement. More details below.
  • Move ambiguity handling into Tracker is doing multiple things at once which makes it hard to follow. In particular, I'm not sure which parts are pure refactoring vs. new functionality. (More below.) Are you able to split these into multiple commits? It's fine to rewrite git history and then re-push.
  • fixup: TODO -> FIXME should be folded into the first commit, but if that one is removed then this one won't be necessary.

View changes since this review

parser.approx_token_stream_pos(),
"no rules expected this token in macro call",
));
}

@nnethercote nnethercote Jun 29, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where did this code come from? It looks like it's a special extracted from a mixture of parse_tt and parse_tt_inner, I think? It's non-trivial, non-obvious duplication of code from other paths, which I don't like. I don't think the removal of Cow is much of a win (Cow makes the "this might get cloned" behaviour more explicit) and even if it is a win, the extra complexity here outweighs it.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fair. This change originally fell out after I had made the BFS->DFS change, which merged the logic between parse_tt and parse_tt_inner and so made the duplication more obvious. I'll remove this commit from the PR and keep it for later, applying it after the BFS->DFS change to see whether it makes more sense in that context.

// Distinguish meta-variable matchers from others.
let (metavar_locs, fixed_locs) = locs
.into_iter()
.partition::<Vec<_>, _>(|loc| matches!(loc, MatcherLoc::MetaVarDecl { .. }));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This partition is new and the commit message didn't mention it. What's happening here? Does this change the error message?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is inspired by the BFS->DFS switch I will make later, where I lose the separation between bb_mps and next_mps/cur_mps. But I don't think it's necessary right now, and clearly it's introducing some new complexity.

I think I will change this method's signature to take bb_mps and next_mps as separate arguments; I can change the parameters again in the BFS->DFS PR to fit its needs. I still think this commit (moving ambiguity handling to the tracker) is worthwhile so I'll keep it in.

@nnethercote

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 1, 2026
@rustbot

rustbot commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@bal-e bal-e left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR and welcome to rust-lang/rust!

❤️

Five of these eight commits look good to me, and for three of them I have concerns.

I'll take it out of this PR and possibly re-introduce it in the BFS->DFS PR, I think it'll feel like a better fit at that point.

  • Move ambiguity handling into Tracker is doing multiple things at once which makes it hard to follow. In particular, I'm not sure which parts are pure refactoring vs. new functionality. (More below.) Are you able to split these into multiple commits? It's fine to rewrite git history and then re-push.

Yep, that commit could use some more splitting, I'm on it :)

  • fixup: TODO -> FIXME should be folded into the first commit, but if that one is removed then this one won't be necessary.

I was going to fold that into the responsible commit before merging for sure :) But as you said, it'll probably disappear from this PR anyways.

View changes since this review

parser.approx_token_stream_pos(),
"no rules expected this token in macro call",
));
}

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fair. This change originally fell out after I had made the BFS->DFS change, which merged the logic between parse_tt and parse_tt_inner and so made the duplication more obvious. I'll remove this commit from the PR and keep it for later, applying it after the BFS->DFS change to see whether it makes more sense in that context.

// Distinguish meta-variable matchers from others.
let (metavar_locs, fixed_locs) = locs
.into_iter()
.partition::<Vec<_>, _>(|loc| matches!(loc, MatcherLoc::MetaVarDecl { .. }));

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is inspired by the BFS->DFS switch I will make later, where I lose the separation between bb_mps and next_mps/cur_mps. But I don't think it's necessary right now, and clearly it's introducing some new complexity.

I think I will change this method's signature to take bb_mps and next_mps as separate arguments; I can change the parameters again in the BFS->DFS PR to fit its needs. I still think this commit (moving ambiguity handling to the tracker) is worthwhile so I'll keep it in.

arya dradjica added 3 commits July 1, 2026 08:17
While familiarizing myself with this code, it took me a while to figure
out the meaning and need for this boolean. Making it an explicit enum
seems to be convention here, and it makes it easy to understand its
purpose.

`tests/ui/macros` pass.
Duplicate meta-variable bindings are already checked for when building
a macro definition, in `macro_check.rs`. If duplicates are detected,
the macro definition is replaced with a dummy, so duplicate bindings
are impossible at macro instantiation time. Instead of treating them
like an error, report a `bug!` instead.

This simplifies things semantically: now a `NamedParseResult::Error` can
only be caused by an ambiguity error. This allows it to be specialized
a bit.

`tests/ui/macros` pass.
@bal-e
bal-e force-pushed the macro-parsing-polish branch from 7b5c3be to d4adbf8 Compare July 2, 2026 17:28
@bal-e

bal-e commented Jul 2, 2026

Copy link
Copy Markdown
Author

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jul 2, 2026
@rust-log-analyzer

This comment has been minimized.

/// and we want to prioritize earlier failures over later ones, so we use [`WhichMatcher`].
///
/// The second element is the approximate parser position.
position_in_tokenstream: (WhichMatcher, u32),

@nnethercote nnethercote Jul 2, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possible follow-up: split this tuple into separate fields, because the tuple doesn't really add anything?

View changes since the review

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I'll add a commit for that!

@nnethercote

Copy link
Copy Markdown
Contributor

Move ambiguity handling into Tracker hasn't been split up?

In the meantime, let's do a perf run, just in case it has an effect:

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jul 2, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jul 2, 2026
@rust-bors

rust-bors Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: f4b2f2d (f4b2f2d7f23ac180e4648448b27ccf6581078a3c)
Base parent: c397dae (c397dae808f70caebab1fc4e11b3edf7e59f58c7)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (f4b2f2d): comparison URL.

Overall result: ✅ improvements - no action needed

Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.4% [-0.4%, -0.3%] 5
Improvements ✅
(secondary)
-0.5% [-0.7%, -0.3%] 8
All ❌✅ (primary) -0.4% [-0.4%, -0.3%] 5

Max RSS (memory usage)

This perf run didn't have relevant results for this metric.

Cycles

Results (secondary -2.2%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.4% [2.4%, 2.4%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.3% [-5.6%, -2.2%] 4
All ❌✅ (primary) - - 0

Binary size

This perf run didn't have relevant results for this metric.

Bootstrap: 485.944s -> 483.648s (-0.47%)
Artifact size: 393.37 MiB -> 393.82 MiB (0.11%)

@JonathanBrouwer

Copy link
Copy Markdown
Contributor

The queue is actually not that bad right now, relatively speaking, I'd rather give it one more try on its own as perf-sensitive PRs in rollups are still annoying for perf triage
@bors retry

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 6, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Contributor

@bors p=6
Scheduling

@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jul 6, 2026
Polish some macro parsing code



I'm working on some optimizations to `macro_parser.rs` and the surrounding code (specifically, changing the current BFS approach into a DFS), and these changes fell out during that effort. I think they make the code more accessible in addition to laying some foundations for my future work (in particular, the handling of ambiguities).

This is my first proper entrance into rustc code, please let me know if I'm holding something wrong :)

The commits are organized and individually reviewable.

r? @nnethercote
@bal-e

bal-e commented Jul 6, 2026

Copy link
Copy Markdown
Author

#158847 suffered exactly the same failure as the previous build here did ... is there an actual failure on main that needs to be debugged?

@rust-bors rust-bors Bot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jul 6, 2026
@rust-bors

rust-bors Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

💔 Test for 59236e4 failed: CI. Failed job:

@JonathanBrouwer

Copy link
Copy Markdown
Contributor

@bors retry

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 6, 2026
@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
##[endgroup]
Image input checksum 1e63f6d0440ccda9af03fd9de4b2bcf99c5f1455224adc97236d0a92c365cf9ef85d3aed709cf7fa6b0b5c1bc8bff42b6f59c1f002407a0e518aa3291c0d1495
##[group]Building docker image for dist-powerpc64le-linux-gnu
Docker version 28.0.4, build b8034c0
Error response from daemon: Get "https://ghcr.io/v2/": Get "https://ghcr.io/token?account=rust-lang&client_id=docker&offline_token=true&service=ghcr.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers) (Client.Timeout exceeded while awaiting headers)
##[error]Process completed with exit code 1.
##[group]Run echo "disk usage:"
echo "disk usage:"
df -h
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}

@rust-bors

This comment has been minimized.

@rust-bors rust-bors Bot added merged-by-bors This PR was explicitly merged by bors. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jul 7, 2026
@rust-bors

rust-bors Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

☀️ Test successful - CI
Approved by: nnethercote
Duration: 3h 17m 54s
Pushing b960fcf to main...

@rust-bors
rust-bors Bot merged commit b960fcf into rust-lang:main Jul 7, 2026
15 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Jul 7, 2026
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing c4af710 (parent) -> b960fcf (this PR)

Test differences

Show 2 test diffs

2 doctest diffs were found. These are ignored, as they are noisy.

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard b960fcf2ff0f04967b30b947be8fc155fb067901 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-powerpc64le-linux-gnu: 1h 7m -> 1h 31m (+36.0%)
  2. dist-ohos-armv7: 58m 29s -> 1h 14m (+26.7%)
  3. dist-x86_64-msvc-alt: 2h 45m -> 2h 1m (-26.7%)
  4. x86_64-gnu-llvm-22-2: 1h 44m -> 1h 18m (-24.7%)
  5. dist-riscv64-linux: 1h 10m -> 1h 26m (+22.0%)
  6. x86_64-gnu-gcc-core-tests: 10m 57s -> 8m 55s (-18.6%)
  7. i686-gnu-2: 1h 44m -> 1h 25m (-18.3%)
  8. pr-check-1: 33m 27s -> 28m 23s (-15.1%)
  9. test-various: 2h 13m -> 1h 55m (-14.0%)
  10. x86_64-gnu-debug: 2h 11m -> 1h 53m (-13.3%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (b960fcf): comparison URL.

Overall result: ✅ improvements - no action needed

@rustbot label: -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.4% [-0.5%, -0.2%] 7
Improvements ✅
(secondary)
-0.5% [-0.7%, -0.2%] 9
All ❌✅ (primary) -0.4% [-0.5%, -0.2%] 7

Max RSS (memory usage)

Results (secondary 5.2%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
5.2% [5.2%, 5.2%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Cycles

Results (secondary -3.9%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.9% [-3.9%, -3.9%] 1
All ❌✅ (primary) - - 0

Binary size

This perf run didn't have relevant results for this metric.

Bootstrap: 490.62s -> 489.183s (-0.29%)
Artifact size: 389.03 MiB -> 388.47 MiB (-0.14%)

@bal-e
bal-e deleted the macro-parsing-polish branch July 7, 2026 04:06
rust-bors Bot pushed a commit that referenced this pull request Jul 11, 2026
Preparatory changes for macro parsing BFS->DFS

This PR contains some miscellaneous commits I accumulated while working on the BFS->DFS change. Their goal is to simplify the code and clarifying existing behavior. It is a conceptual follow-up to #158577. High-level overview:

- Adds context about the current match arm to `Tracker` through the new `Tracker::prepare()`, so that the `WhichMatcher` parameter is available implicitly. In a later PR, this will be used to reference `MatcherLoc`s by index.

- Reformulates matching failures to work more like ambiguity errors wrt. `Tracker`; `Tracker::build_failure()` (which would build a failure consumed by `Tracker::after_arm()`) becomes `Tracker::failure()` which eagerly processes the error. This removes the need for `ParseResult::Failure` to store any data at all. This relies on the match arm context provided by `Tracker::prepare()`.

- There is a subtle edge case involving `token::Eof` and non-terminal parsing; `Parser::nonterminal_may_begin_with()` would sometimes return `true` for `token::Eof`, even though the non-terminal parse would never be attempted. `TtParser` did not check `bb_mps` when handling `token::Eof`, so non-terminal parses at EOF were being silently dropped. I changed `Parser::nonterminal_may_begin_with()` to always return `false` for `token::Eof`, making this behavior much more visible. I added a test case to make sure meta-variables return the same error uniformly when parsed against EOF.

Contains #158894, which should be merged soon (after which I'll rebase onto `main`).

Best reviewed commit-by-commit.

r? @nnethercote
rust-bors Bot pushed a commit that referenced this pull request Jul 11, 2026
Preparatory changes for macro parsing BFS->DFS

This PR contains some miscellaneous commits I accumulated while working on the BFS->DFS change. Their goal is to simplify the code and clarifying existing behavior. It is a conceptual follow-up to #158577. High-level overview:

- Adds context about the current match arm to `Tracker` through the new `Tracker::prepare()`, so that the `WhichMatcher` parameter is available implicitly. In a later PR, this will be used to reference `MatcherLoc`s by index.

- Reformulates matching failures to work more like ambiguity errors wrt. `Tracker`; `Tracker::build_failure()` (which would build a failure consumed by `Tracker::after_arm()`) becomes `Tracker::failure()` which eagerly processes the error. This removes the need for `ParseResult::Failure` to store any data at all. This relies on the match arm context provided by `Tracker::prepare()`.

- There is a subtle edge case involving `token::Eof` and non-terminal parsing; `Parser::nonterminal_may_begin_with()` would sometimes return `true` for `token::Eof`, even though the non-terminal parse would never be attempted. `TtParser` did not check `bb_mps` when handling `token::Eof`, so non-terminal parses at EOF were being silently dropped. I changed `Parser::nonterminal_may_begin_with()` to always return `false` for `token::Eof`, making this behavior much more visible. I added a test case to make sure meta-variables return the same error uniformly when parsed against EOF.

Contains #158894, which should be merged soon (after which I'll rebase onto `main`).

Best reviewed commit-by-commit.

r? @nnethercote
rust-bors Bot pushed a commit that referenced this pull request Jul 12, 2026
Preparatory changes for macro parsing BFS->DFS



This PR contains some miscellaneous commits I accumulated while working on the BFS->DFS change. Their goal is to simplify the code and clarifying existing behavior. It is a conceptual follow-up to #158577. High-level overview:

- Adds context about the current match arm to `Tracker` through the new `Tracker::prepare()`, so that the `WhichMatcher` parameter is available implicitly. In a later PR, this will be used to reference `MatcherLoc`s by index.

- Reformulates matching failures to work more like ambiguity errors wrt. `Tracker`; `Tracker::build_failure()` (which would build a failure consumed by `Tracker::after_arm()`) becomes `Tracker::failure()` which eagerly processes the error. This removes the need for `ParseResult::Failure` to store any data at all. This relies on the match arm context provided by `Tracker::prepare()`.

- There is a subtle edge case involving `token::Eof` and non-terminal parsing; `Parser::nonterminal_may_begin_with()` would sometimes return `true` for `token::Eof`, even though the non-terminal parse would never be attempted. `TtParser` did not check `bb_mps` when handling `token::Eof`, so non-terminal parses at EOF were being silently dropped. I changed `Parser::nonterminal_may_begin_with()` to always return `false` for `token::Eof`, making this behavior much more visible. I added a test case to make sure meta-variables return the same error uniformly when parsed against EOF.

Contains #158894, which should be merged soon (after which I'll rebase onto `main`).

Best reviewed commit-by-commit.

r? @nnethercote
pull Bot pushed a commit to LeeeeeeM/miri that referenced this pull request Jul 13, 2026
Preparatory changes for macro parsing BFS->DFS



This PR contains some miscellaneous commits I accumulated while working on the BFS->DFS change. Their goal is to simplify the code and clarifying existing behavior. It is a conceptual follow-up to rust-lang/rust#158577. High-level overview:

- Adds context about the current match arm to `Tracker` through the new `Tracker::prepare()`, so that the `WhichMatcher` parameter is available implicitly. In a later PR, this will be used to reference `MatcherLoc`s by index.

- Reformulates matching failures to work more like ambiguity errors wrt. `Tracker`; `Tracker::build_failure()` (which would build a failure consumed by `Tracker::after_arm()`) becomes `Tracker::failure()` which eagerly processes the error. This removes the need for `ParseResult::Failure` to store any data at all. This relies on the match arm context provided by `Tracker::prepare()`.

- There is a subtle edge case involving `token::Eof` and non-terminal parsing; `Parser::nonterminal_may_begin_with()` would sometimes return `true` for `token::Eof`, even though the non-terminal parse would never be attempted. `TtParser` did not check `bb_mps` when handling `token::Eof`, so non-terminal parses at EOF were being silently dropped. I changed `Parser::nonterminal_may_begin_with()` to always return `false` for `token::Eof`, making this behavior much more visible. I added a test case to make sure meta-variables return the same error uniformly when parsed against EOF.

Contains rust-lang/rust#158894, which should be merged soon (after which I'll rebase onto `main`).

Best reviewed commit-by-commit.

r? @nnethercote
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-bors This PR was explicitly merged by bors. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants