mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
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.
This commit is contained in:
parent
e7da7f8f71
commit
0830d30190
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user