aboutsummaryrefslogtreecommitdiff
path: root/gdb/riscv-tdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/riscv-tdep.c')
-rw-r--r--gdb/riscv-tdep.c6
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