diff options
| author | 2020-03-04 18:44:38 +0000 | |
|---|---|---|
| committer | 2020-03-04 18:44:38 +0000 | |
| commit | 9c510017451e6e3b2caf02948cc3de82e92d6fd2 (patch) | |
| tree | ba59363cac1ecfb98cd298bde684cc3488e0f4da /gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp | |
| parent | add 6.8 syspatch public key (diff) | |
| download | wireguard-openbsd-9c510017451e6e3b2caf02948cc3de82e92d6fd2.tar.xz wireguard-openbsd-9c510017451e6e3b2caf02948cc3de82e92d6fd2.zip | |
Switch powerpc clang to -msvr4-struct-return, like gcc.
Add these options from gcc to clang:
-maix-struct-return # return all structs in memory
-msvr4-struct-return # return small structs in r3/r4
ok mortimer@ jca@ deraadt@
Diffstat (limited to 'gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp')
| -rw-r--r-- | gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp b/gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp index a7c9b352584..4509e4ff35a 100644 --- a/gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp +++ b/gnu/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp @@ -1199,11 +1199,18 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val; } - if (Arg *A = Args.getLastArg(OPT_fpcc_struct_return, OPT_freg_struct_return)) { - if (A->getOption().matches(OPT_fpcc_struct_return)) { + // X86_32 has -fppc-struct-return and -freg-struct-return. + // PPC32 has -maix-struct-return and -msvr4-struct-return. + if (Arg *A = + Args.getLastArg(OPT_fpcc_struct_return, OPT_freg_struct_return, + OPT_maix_struct_return, OPT_msvr4_struct_return)) { + const Option &O = A->getOption(); + if (O.matches(OPT_fpcc_struct_return) || + O.matches(OPT_maix_struct_return)) { Opts.setStructReturnConvention(CodeGenOptions::SRCK_OnStack); } else { - assert(A->getOption().matches(OPT_freg_struct_return)); + assert(O.matches(OPT_freg_struct_return) || + O.matches(OPT_msvr4_struct_return)); Opts.setStructReturnConvention(CodeGenOptions::SRCK_InRegs); } } |
