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

The help message when an invalid calling convention is specified is getting a little unwieldy #93601

Closed
nagisa opened this issue Feb 2, 2022 · 4 comments · Fixed by #100488
Closed
Labels
A-diagnostics Area: Messages for errors, warnings, and lints D-verbose Diagnostics: Too much output caused by a single piece of incorrect code. E-easy Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.

Comments

@nagisa
Copy link
Member

nagisa commented Feb 2, 2022

After #93561 misspelling a calling convention will output the following note:

LL | extern "路濫狼á́́" fn foo() {}
   |        ^^^^^^^^^ invalid ABI
   |
   = help: valid ABIs: Rust, C, C-unwind, cdecl, cdecl-unwind, stdcall, stdcall-unwind, fastcall, fastcall-unwind, vectorcall, vectorcall-unwind, thiscall, thiscall-unwind, aapcs, aapcs-unwind, win64, win64-unwind, sysv64, sysv64-unwind, ptx-kernel, msp430-interrupt, x86-interrupt, amdgpu-kernel, efiapi, avr-interrupt, avr-non-blocking-interrupt, C-cmse-nonsecure-call, wasm, system, system-unwind, rust-intrinsic, rust-call, platform-intrinsic, unadjusted

This is getting pretty hard to read!

There are a couple of improvements we could make:

  1. Invoke Levenshtein magic and only suggest some calling conventions that are close, if any (covers mis-spellings);
    • This could be a MachineApplicable::MaybeIncorrect rustfix!
  2. Suggest at most a couple of the most common ABIs (possibly a target-specific list?);
  3. Do not suggest CCs that cannot be used due to them being unstable and feature not being enabled; and finally
  4. Explain where to find a full list (may involve adding CLI surface to rustc).

With these suggestions in place the message could look like:

LL | extern "wni64" fn foo() {}
   |        ^^^^^^^ invalid ABI
   |
   = help: did you mean `win64`?
   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions

or

LL | extern "路濫狼á́́" fn foo() {}
   |        ^^^^^^^^^ invalid ABI
   |
   = help: commonly used calling conventions include: `C`, `system`, `sysv64`, `win64` and `wasm`
   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
@nagisa nagisa added the A-diagnostics Area: Messages for errors, warnings, and lints label Feb 2, 2022
@compiler-errors compiler-errors added E-easy Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue. D-verbose Diagnostics: Too much output caused by a single piece of incorrect code. labels Jun 20, 2022
@ritobanrc
Copy link

I'd be interested in tackling this, though it would be my first contribution, so I'll probably need some additional guidance.

@ritobanrc
Copy link

@rustbot claim

@khyperia
Copy link
Contributor

Hey, are you still working on this? If not, I'm going to take a shot at it 🙂

@ritobanrc
Copy link

ritobanrc commented Aug 13, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-diagnostics Area: Messages for errors, warnings, and lints D-verbose Diagnostics: Too much output caused by a single piece of incorrect code. E-easy Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants