[clang] [llvm] [SystemZ, Clang] Enable verification of int args extensions by default. (PR #223755)

Jonas Paulsson via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 25 05:02:41 PDT 2026


JonPsson1 wrote:

Looking at this comment in CallingConv.h:

```
  enum {
    /// The default llvm calling convention, compatible with C. This convention
    /// is the only one that supports varargs calls. As with typical C calling
    /// conventions, the callee/caller have to tolerate certain amounts of
    /// prototype mismatch.
    C = 0,

    // Generic LLVM calling conventions. None of these support varargs calls,
    // and all assume that the caller and callee prototype exactly match.

    /// Attempts to make calls as fast as possible (e.g. by passing things in
    /// registers).
    Fast = 8,
...

```

So, like @nikic hinted at previously, it seems that with any other calling convention than "C", the extension attribute is present either on both or neither of the caller/callee arguemnts.

Patch updated to check only calls/functions with the C calling convention and remove the previous isInternal() heuristic.

It would be possible to also check a call to an internal function to see that the call and definition extensions match. However, when trying this with a simple (fastcc) test case the caller will actually do the extension even if there only is the extension attribute in the function definition. I suppose this makes sense as they are assumed (per comment above) to exactly match, and if the Callee has the attribute that would be the reasonable assumption to follow.

@uweigand

https://github.com/llvm/llvm-project/pull/223755


More information about the llvm-commits mailing list