diff options
author | Tom Tromey <tromey@adacore.com> | 2020-04-02 13:13:02 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-04-02 13:17:27 -0600 |
commit | 0830d301901d225403eaf6629c20a6c09f3ec8f6 (patch) | |
tree | 9f5ba89cdcfdc1e61a37c676a555bcba373cab2f /gdb/f-lang.c | |
parent | e7da7f8f71572e3ef71a22ad3fae2388a53bd84c (diff) | |
download | gdb-0830d301901d225403eaf6629c20a6c09f3ec8f6.zip gdb-0830d301901d225403eaf6629c20a6c09f3ec8f6.tar.gz gdb-0830d301901d225403eaf6629c20a6c09f3ec8f6.tar.bz2 |
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.
Diffstat (limited to 'gdb/f-lang.c')
-rw-r--r-- | gdb/f-lang.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 2ce4ad4..6b7a5fb 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; } |