public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Avoid assertion failure due to complex type change
@ 2020-04-02 19:19 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2020-04-02 19:19 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0830d301901d225403eaf6629c20a6c09f3ec8f6

commit 0830d301901d225403eaf6629c20a6c09f3ec8f6
Author: Tom Tromey <tromey@adacore.com>
Date:   Thu Apr 2 13:13:02 2020 -0600

    Avoid assertion failure due to complex type change
    
    Tankut Baris Aktemur pointed out that the recent series to change how
    complex types are handled introduced a regression.
    
    This assert in init_complex_type was firing:
    
      gdb_assert (TYPE_CODE (target_type) == TYPE_CODE_INT
                  || TYPE_CODE (target_type) == TYPE_CODE_FLT);
    
    The problem was that f-lang.c could call init_complex_type with a type
    whose code was TYPE_CODE_ERROR.
    
    It seemed best to me to fix this in f-lang.c, rather than to change
    init_complex_type to accept error types.
    
    Tested on x86-64 Fedora 30.  I'm checking this in.
    
    gdb/ChangeLog
    2020-04-02  Tom Tromey  <tromey@adacore.com>
    
            * f-lang.c (build_fortran_types): Use arch_type to initialize
            builtin_complex_s32 in the TYPE_CODE_ERROR case.

Diff:
---
 gdb/ChangeLog | 5 +++++
 gdb/f-lang.c  | 9 +++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 993a358d345..3b58f2ee546 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-02  Tom Tromey  <tromey@adacore.com>
+
+	* f-lang.c (build_fortran_types): Use arch_type to initialize
+	builtin_complex_s32 in the TYPE_CODE_ERROR case.
+
 2020-04-02  Tom Tromey  <tromey@adacore.com>
 
 	* dwarf2/read.c (partial_die_info::read): Do not create a vector
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 2ce4ad43610..6b7a5fb7dba 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -744,8 +744,13 @@ build_fortran_types (struct gdbarch *gdbarch)
     = init_complex_type ("complex*8", builtin_f_type->builtin_real);
   builtin_f_type->builtin_complex_s16
     = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8);
-  builtin_f_type->builtin_complex_s32
-    = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
+
+  if (TYPE_CODE (builtin_f_type->builtin_real_s16) == TYPE_CODE_ERROR)
+    builtin_f_type->builtin_complex_s32
+      = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32");
+  else
+    builtin_f_type->builtin_complex_s32
+      = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
 
   return builtin_f_type;
 }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-02 19:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-02 19:19 [binutils-gdb] Avoid assertion failure due to complex type change Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).