diff options
author | Benedikt Lukas Huber <benedikt.huber@tuwien.ac.at> | 2025-09-17 20:03:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-17 11:03:27 -0700 |
commit | e56b479d9f096171287e23169ce23295046535c0 (patch) | |
tree | b1bee28d633eeb15bc5f0ef94d618a43e5a27dc3 /llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp | |
parent | 4e3aa76d7f5629e7577f837d0e2397cafd85e6c5 (diff) | |
download | llvm-e56b479d9f096171287e23169ce23295046535c0.zip llvm-e56b479d9f096171287e23169ce23295046535c0.tar.gz llvm-e56b479d9f096171287e23169ce23295046535c0.tar.bz2 |
[Hexagon] Bugfix in VarArg lowering: Special case for musl (#157564)
While debugging #145206 I found that a possible cause for the problem is
the call to printf, which is variadic.
In a musl environment VarArgs are treated like *non* VarArgs.
The handling of this special case was bypassed by the commit
a4f85515c20566a3c059aacd1ee3554b598f33f0.
The reason is that the arguement `TreatAsVarArg` is only set to `true`
in
an *non* musl env. `TreatAsVarArg` determines the result of
`isVarArg()`.
The `CCIfArgVarArg` class only checks each individual
variable, but not whether `isVarArg()` is true.
Without the special case, the unnamed arguments are always passed
on the stack, as is standard calling convention. But with musl
also unnamed arguments can be passed in registers.
Possibly, this fixes #145206.
Diffstat (limited to 'llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp')
0 files changed, 0 insertions, 0 deletions