CMSE features should check ABI conformance in rustc, not LLVM (original) (raw)

Using #[cmse_nonsecure_entry] on a function limits its capabilities. Namely, only up to 4 32-bit arguments can be accepted, and none of them may be passed on the stack. The same is true for the "C-cmse-nonsecure-call" ABI.

Currently, this is checked in LLVM, so the user experience is sub-par, and the check happens very late (during codegen instead of type checking). It should be checked in rustc instead.