From: Tom Tromey Date: Tue, 6 Sep 2022 14:44:52 +0000 (-0600) Subject: Fix crash in amd64-tdep.c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=862ebb27bbe30768356776a10827dd1c0824d405;p=binutils-gdb.git Fix crash in amd64-tdep.c amd64-tdep.c could crash when 'finish'ing from a function whose return type had variable length. In this situation, the value will be passed by reference, and this patch avoids the crash. (Note that this does not fully fix the bug reported, but it does fix the crash, so it seems worthwhile to land independently.) --- diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index b8cd8188044..0f2dab8b479 100644 --- a/gdb/amd64-tdep.c +++ b/gdb/amd64-tdep.c @@ -666,7 +666,8 @@ amd64_classify_aggregate (struct type *type, enum amd64_reg_class theclass[2]) loc_bitpos attributes, which will cause an assert to trigger within the unaligned field check. As classes with virtual bases are not trivially copyable, checking that first avoids this problem. */ - if (type->length () > 16 + if (TYPE_HAS_DYNAMIC_LENGTH (type) + || type->length () > 16 || !language_pass_by_reference (type).trivially_copyable || amd64_has_unaligned_fields (type)) {