diff options
Diffstat (limited to 'gdb/riscv-tdep.c')
-rw-r--r-- | gdb/riscv-tdep.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c index 932708c..200a20a 100644 --- a/gdb/riscv-tdep.c +++ b/gdb/riscv-tdep.c @@ -2857,8 +2857,12 @@ static void riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo, struct riscv_call_info *cinfo) { + auto lang_req = language_pass_by_reference (ainfo->type); + if (TYPE_HAS_DYNAMIC_LENGTH (ainfo->type) - || ainfo->length > (2 * cinfo->xlen)) + || ainfo->length > (2 * cinfo->xlen) + || !lang_req.trivially_copy_constructible + || !lang_req.trivially_destructible) { /* Argument is going to be passed by reference. */ ainfo->argloc[0].loc_type |