Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve E0617 to Distinguish Between Fn Item and Fn Pointer in FFI #120197

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

HTGAzureX1212
Copy link
Contributor

@HTGAzureX1212 HTGAzureX1212 commented Jan 21, 2024

This Pull Requests aims to improve the diagnostics emitted in the error E0617 when making with the difference between fn types and fn pointers more obvious.

This involves changing the way how ty::FnDef is pretty-printed. This implementation specifically proposes to change it to be printed in this way:

{fn item <value path of the function>: <function signature>}

Rendered diagnostic:

error[E0617]: can't pass `{fn item test: fn() -> u8}` to variadic function
  --> $DIR/issue-69232.rs:10:12
   |
LL |     foo(1, test);
   |            ^^^^
   |
   = help: a function item is zero-sized and needs to be casted into a function pointer to be used in FFI
   = note: for more information on function items, visit https://doc.rust-lang.org/reference/types/function-item.html
help: cast the value to `fn() -> u8`
   |
LL |     foo(1, test as fn() -> u8);
   |            ~~~~~~~~~~~~~~~~~~
help: cast the value into a function pointer
   |
LL |     foo(1, test as fn() -> u8);
   |            ~~~~~~~~~~~~~~~~~~

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0617`.

This also causes all diagnostic messages that utilize the pretty-printing of ty::FnDef to use this implementation.

Tests in tests/ui are currently left untouched before a consensus can be reached over how the ty::FnDef pretty-print should be modified for diagnostics.

Supersedes #94637. Possible resolution of #69232.

Edit 1: I made the output a bit shorter.

Edit 2: Added example diagnostic.

@rustbot
Copy link
Collaborator

rustbot commented Jan 21, 2024

r? @cjgillot

(rustbot has picked a reviewer for you, use r? to override)

@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 Jan 21, 2024
@HTGAzureX1212 HTGAzureX1212 changed the title Improve E0617 to Distinguish Between Fn Item and Fn Pointer in FFI Improve Printing of Function Definition Types Jan 21, 2024
@HTGAzureX1212 HTGAzureX1212 changed the title Improve Printing of Function Definition Types Improve E0617 to Distinguish Between Fn Item and Fn Pointer in FFI Jan 21, 2024
@compiler-errors
Copy link
Member

See #99927 for another atttempt to distinguish FnDef types in pretty printing.

@cjgillot
Copy link
Contributor

r? @estebank

@rustbot rustbot assigned estebank and unassigned cjgillot Jan 27, 2024
@bors
Copy link
Contributor

bors commented Jan 29, 2024

☔ The latest upstream changes (presumably #119972) made this pull request unmergeable. Please resolve the merge conflicts.

@HTGAzureX1212 HTGAzureX1212 force-pushed the HTGAzureX1212/issue-69232-improve-error-617 branch from e4a6aa3 to 54d8f92 Compare February 8, 2024 02:04
@rust-log-analyzer

This comment has been minimized.

Copy link
Contributor

@estebank estebank left a comment

Choose a reason for hiding this comment

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

You'll have to rebless the tests. After fixing that, could you squash all of your commits into a single one?

tidy

fix compiler error

fix compiler error round 2

tweak fndef pretty print

fmt

shorten the pretty-print output

add a ui test specifically for linked issue 69232

Implement suggestion

Co-authored-by: Esteban Kuber <estebank@users.noreply.github.com>

fix compiler errors

rebless tests
@HTGAzureX1212 HTGAzureX1212 force-pushed the HTGAzureX1212/issue-69232-improve-error-617 branch from 3e36dc2 to fe5d397 Compare February 9, 2024 04:47
@HTGAzureX1212
Copy link
Contributor Author

You'll have to rebless the tests. After fixing that, could you squash all of your commits into a single one?

All done.

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-16 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=HTGAzureX1212
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_aa15ea83-f633-4a40-8bb4-79cfa6b13d1a
GITHUB_EVENT_NAME=pull_request
GITHUB_EVENT_NAME=pull_request
GITHUB_EVENT_PATH=/home/runner/work/_temp/_github_workflow/event.json
GITHUB_GRAPHQL_URL=https://api.github.com/graphql
GITHUB_HEAD_REF=HTGAzureX1212/issue-69232-improve-error-617
GITHUB_JOB=pr
GITHUB_PATH=/home/runner/work/_temp/_runner_file_commands/add_path_aa15ea83-f633-4a40-8bb4-79cfa6b13d1a
GITHUB_REF=refs/pull/120197/merge
GITHUB_REF_NAME=120197/merge
GITHUB_REF_PROTECTED=false
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=3f81e0c32f97e6cd5948f57c91668ea2790e3295
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_aa15ea83-f633-4a40-8bb4-79cfa6b13d1a
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_aa15ea83-f633-4a40-8bb4-79cfa6b13d1a
GITHUB_TRIGGERING_ACTOR=HTGAzureX1212
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120197/merge
GITHUB_WORKFLOW_SHA=3f81e0c32f97e6cd5948f57c91668ea2790e3295
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
#12 writing image sha256:8a21de9826b3dd40355e852382fdd78cbed1dd4dc9d2054149bbdab85ab7b832 done
#12 naming to docker.io/library/rust-ci done
#12 DONE 10.0s
##[endgroup]
Setting extra environment values for docker:  --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-16]
##[group]Clock drift check
  local time: Fri Feb  9 04:50:00 UTC 2024
  network time: Fri, 09 Feb 2024 04:50:00 GMT
  network time: Fri, 09 Feb 2024 04:50:00 GMT
##[endgroup]
sccache: Starting the server...
##[group]Configure the build
configure: processing command line
configure: 
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-16', '--enable-llvm-link-shared', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'change-id=99999999', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'build.optimized-compiler-builtins', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-16/bin/llvm-config
configure: llvm.link-shared     := True
configure: rust.thin-lto-import-instr-limit := 10
configure: change-id            := 99999999
---
Uplifting library (stage1 -> stage2)
##[group]Testing stage2 compiletest suite=mir-opt mode=mir-opt (x86_64-unknown-linux-gnu)

running 283 tests
.......F................................................................................  88/283
....i..................................................................F....F.......F.i. 176/283
.i.i.FF.F..............F................F.....iFFi...iii............ii........i......... 264/283

failures:

---- [mir-opt] tests/mir-opt/building/custom/consts.rs stdout ----
---- [mir-opt] tests/mir-opt/building/custom/consts.rs stdout ----
6     let mut _2: i8;
7     let mut _3: u32;
8     let mut _4: i32;
-     let mut _5: fn() {consts::<10>};
+     let mut _5: {fn item consts::<10>: fn()};
11     bb0: {
12         _1 = const 5_u8;

thread '[mir-opt] tests/mir-opt/building/custom/consts.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/building/custom/consts.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/building/custom/consts.consts.built.after.mir

---- [mir-opt] tests/mir-opt/inline/cycle.rs stdout ----
7   
8       bb0: {
8       bb0: {
9           StorageLive(_1);
-           _1 = f::<fn() {main}>(main) -> [return: bb1, unwind continue];
+           _1 = f::<{fn item main: fn()}>(main) -> [return: bb1, unwind continue];
12   
13       bb1: {

thread '[mir-opt] tests/mir-opt/inline/cycle.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/inline/cycle.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/inline/cycle.g.Inline.panic-unwind.diff
---- [mir-opt] tests/mir-opt/inline/inline_any_operand.rs stdout ----
2 
3 fn bar() -> bool {
4     let mut _0: bool;
4     let mut _0: bool;
-     let _1: fn(i32, i32) -> bool {foo};
-     let mut _2: fn(i32, i32) -> bool {foo};
+     let _1: {fn item foo: fn(i32, i32) -> bool};
+     let mut _2: {fn item foo: fn(i32, i32) -> bool};
7     let mut _3: i32;
8     let mut _4: i32;
9     scope 1 {

thread '[mir-opt] tests/mir-opt/inline/inline_any_operand.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/inline/inline_any_operand.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/inline/inline_any_operand.bar.Inline.after.mir
---- [mir-opt] tests/mir-opt/inline/inline_cycle.rs stdout ----
---- [mir-opt] tests/mir-opt/inline/inline_cycle.rs stdout ----
4   fn two() -> () {
5       let mut _0: ();
6       let _1: ();
- +     let mut _2: fn() {f};
- +     scope 1 (inlined call::<fn() {f}>) {
+ +     let mut _2: {fn item f: fn()};
+ +     scope 1 (inlined call::<{fn item f: fn()}>) {
9 +         debug f => _2;
10 +         let _3: ();

12   
13       bb0: {
14           StorageLive(_1);
14           StorageLive(_1);
- -         _1 = call::<fn() {f}>(f) -> [return: bb1, unwind continue];
+ -         _1 = call::<{fn item f: fn()}>(f) -> [return: bb1, unwind continue];
16 +         StorageLive(_2);
17 +         _2 = f;
18 +         StorageLive(_3);

- +         _3 = <fn() {f} as FnOnce<()>>::call_once(move _2, const ()) -> [return: bb1, unwind continue];
+ +         _3 = <{fn item f: fn()} as FnOnce<()>>::call_once(move _2, const ()) -> [return: bb1, unwind continue];
21   
22       bb1: {

thread '[mir-opt] tests/mir-opt/inline/inline_cycle.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/inline/inline_cycle.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/inline/inline_cycle.two.Inline.panic-unwind.diff
---- [mir-opt] tests/mir-opt/inline/inline_retag.rs stdout ----
2 
3 fn bar() -> bool {
4     let mut _0: bool;
4     let mut _0: bool;
-     let _1: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo};
-     let mut _2: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo};
+     let _1: {fn item foo: for<'a, 'b> fn(&'a i32, &'b i32) -> bool};
+     let mut _2: {fn item foo: for<'a, 'b> fn(&'a i32, &'b i32) -> bool};
7     let mut _3: &i32;
8     let _4: &i32;
9     let _5: i32;
thread '[mir-opt] tests/mir-opt/inline/inline_retag.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/inline/inline_retag.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/inline/inline_retag.bar.Inline.after.mir
---- [mir-opt] tests/mir-opt/inline/inline_diverging.rs stdout ----
4   fn h() -> () {
5       let mut _0: ();
5       let mut _0: ();
6       let _1: (!, !);
- +     let mut _2: fn() -> ! {sleep};
- +     scope 1 (inlined call_twice::<!, fn() -> ! {sleep}>) {
+ +     let mut _2: {fn item sleep: fn() -> !};
+ +     scope 1 (inlined call_twice::<!, {fn item sleep: fn() -> !}>) {
9 +         debug f => _2;
- +         let mut _3: &fn() -> ! {sleep};
+ +         let mut _3: &{fn item sleep: fn() -> !};
11 +         let _4: !;
- +         let mut _5: &fn() -> ! {sleep};
+ +         let mut _5: &{fn item sleep: fn() -> !};
13 +         let mut _7: !;
14 +         scope 2 {
15 +             debug a => _4;
22   
23       bb0: {
24           StorageLive(_1);
24           StorageLive(_1);
- -         _1 = call_twice::<!, fn() -> ! {sleep}>(sleep) -> unwind continue;
+ -         _1 = call_twice::<!, {fn item sleep: fn() -> !}>(sleep) -> unwind continue;
26 +         StorageLive(_2);
27 +         _2 = sleep;
28 +         StorageLive(_6);
29 +         StorageLive(_4);
30 +         StorageLive(_3);
31 +         _3 = &_2;
31 +         _3 = &_2;
- +         _4 = <fn() -> ! {sleep} as Fn<()>>::call(move _3, const ()) -> [return: bb1, unwind: bb5];
+ +         _4 = <{fn item sleep: fn() -> !} as Fn<()>>::call(move _3, const ()) -> [return: bb1, unwind: bb5];
34 + 
35 +     bb1: {

36 +         StorageDead(_3);
36 +         StorageDead(_3);
37 +         StorageLive(_5);
38 +         _5 = &_2;
- +         _6 = <fn() -> ! {sleep} as Fn<()>>::call(move _5, const ()) -> [return: bb2, unwind: bb4];
+ +         _6 = <{fn item sleep: fn() -> !} as Fn<()>>::call(move _5, const ()) -> [return: bb2, unwind: bb4];
41 + 
42 +     bb2: {

thread '[mir-opt] tests/mir-opt/inline/inline_diverging.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/inline/inline_diverging.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/inline/inline_diverging.h.Inline.panic-unwind.diff

---- [mir-opt] tests/mir-opt/inline/issue_78442.rs stdout ----
7       let _2: ();
8 -     let mut _3: &impl Fn();
9 -     let _4: impl Fn();
- +     let mut _3: &fn() {foo};
- +     let _4: fn() {foo};
+ +     let mut _3: &{fn item foo: fn()};
+ +     let _4: {fn item foo: fn()};
12       let mut _5: ();
14       bb0: {

23           StorageLive(_5);
24           _5 = ();
24           _5 = ();
25 -         _2 = <impl Fn() as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb5];
- +         _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb5];
+ +         _2 = <{fn item foo: fn()} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb5];
28   
29       bb2: {

thread '[mir-opt] tests/mir-opt/inline/issue_78442.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/inline/issue_78442.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-unwind.diff
---- [mir-opt] tests/mir-opt/issue_104451_unwindable_intrinsics.rs stdout ----
11         StorageLive(_1);
12         StorageLive(_2);
13         _2 = ();
13         _2 = ();
-         _1 = const_eval_select::<(), fn() -> ! {ow_ct}, fn() -> ! {ow_ct}, !>(move _2, ow_ct, ow_ct) -> unwind continue;
+         _1 = const_eval_select::<(), {fn item ow_ct: fn() -> !}, {fn item ow_ct: fn() -> !}, !>(move _2, ow_ct, ow_ct) -> unwind continue;
16 }
17 

thread '[mir-opt] tests/mir-opt/issue_104451_unwindable_intrinsics.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/issue_104451_unwindable_intrinsics.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-unwind.mir
---- [mir-opt] tests/mir-opt/issue_99325.rs stdout ----
1 // MIR for `main` after built
2 
3 | User Type Annotations
3 | User Type Annotations
- | 0: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[d56d]::function_with_bytes), UserArgs { args: [&*b"AAAA"], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:13:16: 13:46, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
- | 1: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[d56d]::function_with_bytes), UserArgs { args: [UnevaluatedConst { def: DefId(0:8 ~ issue_99325[d56d]::main::{constant#1}), args: [] }: &ReStatic [u8; 4_usize]], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:14:16: 14:68, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
+ | 0: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[d56d]::function_with_bytes), UserArgs { args: [&*b"AAAA"], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:13:16: 13:46, inferred_ty: {fn item function_with_bytes::<&*b"AAAA">: fn() -> &'static [u8]}
+ | 1: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[d56d]::function_with_bytes), UserArgs { args: [UnevaluatedConst { def: DefId(0:8 ~ issue_99325[d56d]::main::{constant#1}), args: [] }: &ReStatic [u8; 4_usize]], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:14:16: 14:68, inferred_ty: {fn item function_with_bytes::<&*b"AAAA">: fn() -> &'static [u8]}
7 fn main() -> () {
8     let mut _0: ();

thread '[mir-opt] tests/mir-opt/issue_99325.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/issue_99325.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/issue_99325.main.built.after.64bit.mir
---- [mir-opt] tests/mir-opt/nll/region_subtyping_basic.rs stdout ----
69         StorageLive(_8);
70         StorageLive(_9);
71         _9 = (*_6);
71         _9 = (*_6);
-         _8 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _9) -> [return: bb3, unwind: bb7];
+         _8 = ConstValue(ZeroSized: {fn item use_x: fn(usize) -> bool})(move _9) -> [return: bb3, unwind: bb7];
74 
75     bb3: {

81 
81 
82     bb4: {
83         StorageLive(_10);
-         _10 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x0000000000000016): usize)) -> [return: bb5, unwind: bb7];
+         _10 = ConstValue(ZeroSized: {fn item use_x: fn(usize) -> bool})(const ConstValue(Scalar(0x0000000000000016): usize)) -> [return: bb5, unwind: bb7];
86 
87     bb5: {

thread '[mir-opt] tests/mir-opt/nll/region_subtyping_basic.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/nll/region_subtyping_basic.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir
---- [mir-opt] tests/mir-opt/lower_intrinsics.rs stdout ----
3   
4   fn non_const() -> usize {
5       let mut _0: usize;
5       let mut _0: usize;
-       let _1: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>};
-       let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>};
+       let _1: {fn item std::intrinsics::size_of::<T>: extern "rust-intrinsic" fn() -> usize};
+       let mut _2: {fn item std::intrinsics::size_of::<T>: extern "rust-intrinsic" fn() -> usize};
8       scope 1 {
9           debug size_of_t => _1;

thread '[mir-opt] tests/mir-opt/lower_intrinsics.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
thread '[mir-opt] tests/mir-opt/lower_intrinsics.rs' panicked at src/tools/compiletest/src/runtest.rs:4131:21:
Actual MIR output differs from expected MIR output /checkout/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-unwind.diff

failures:
    [mir-opt] tests/mir-opt/building/custom/consts.rs
    [mir-opt] tests/mir-opt/inline/cycle.rs

@bors
Copy link
Contributor

bors commented Feb 10, 2024

☔ The latest upstream changes (presumably #120862) made this pull request unmergeable. Please resolve the merge conflicts.

@apiraino
Copy link
Contributor

Switching to waiting on author to rebase. Then I think we should be set here, right?

Feel free to request a review with @rustbot ready, thanks!

@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 Mar 28, 2024
@HTGAzureX1212
Copy link
Contributor Author

Hey, just a heads up - currently going through exams and I wouldn't be available until the end of April. (Given that there are also some MIR tests that I have to fix, it'd be great if someone else could pick this up from here)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. 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.

None yet

8 participants