Skip to content

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

Description

@nagisa

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

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsD-verboseDiagnostics: Too much output caused by a single piece of incorrect code.E-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions