[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