This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Add casts for legitimate integer to enum conversions
- From: Pedro Alves <palves at redhat dot com>
- To: Simon Marchi <simon dot marchi at ericsson dot com>, gdb-patches at sourceware dot org
- Date: Thu, 06 Aug 2015 20:46:56 +0100
- Subject: Re: [PATCH] Add casts for legitimate integer to enum conversions
- Authentication-results: sourceware.org; auth=none
- References: <1438889665-25655-1-git-send-email-simon dot marchi at ericsson dot com>
On 08/06/2015 08:34 PM, Simon Marchi wrote:
> This patch is mostly extracted from Pedro's C++ branch.
Thanks a lot again for doing this. While patches are in the branch,
you're doing a lot of work to clean them up, split/merge them, writing
rationales, etc. Much appreciated. And when you reach the same
conclusions I did, makes me much more confident to march ahead with
the patches quickly.
> It adds explicit
> casts from integer to enum types, where it is really the intention to do
> so. This could be because we are ...
>
> * iterating on enum values (we need to iterate on an equivalent integer)
> * converting from a value read from bytes (dwarf attribute, agent
> expression opcode) to the equivalent enum
> * reading the equivalent integer value from another language (Python/Guile)
>
> An exception to that is the casts in regcache.c. It seems to me like
> struct regcache's register_status field could be a pointer to an array of
> enum register_status. Doing so would waste a bit of memory (4 bytes
> used by the enum vs 1 byte used by the current signed char, for each
> register). If we switch to C++11 one day, we can define the underlying
> type of an enum type, so we could have the best of both worlds.
Yeah, I had similar thoughts, and had decided to leave it be until
we have C++11.
>
> gdb/ChangeLog:
>
> * arm-tdep.c (set_fp_model_sfunc): Add cast from integer to enum.
> (arm_set_abi): Likewise.
> * ax-general.c (ax_print): Likewise.
> * c-exp.y (exp : string_exp): Likewise.
> * compile/compile-loc2c.c (compute_stack_depth_worker): Likewise.
> (do_compile_dwarf_expr_to_c): Likewise.
> * cp-name-parser.y (demangler_special : DEMANGLER_SPECIAL start):
> Likewise.
> * dwarf2expr.c (execute_stack_op): Likewise.
> * dwarf2loc.c (dwarf2_compile_expr_to_ax): Likewise.
> (disassemble_dwarf_expression): Likewise.
> * dwarf2read.c (dwarf2_add_member_fn): Likewise.
> (read_array_order): Likewise.
> (abbrev_table_read_table): Likewise.
> (read_attribute_value): Likewise.
> (skip_unknown_opcode): Likewise.
> (dwarf_decode_macro_bytes): Likewise.
> (dwarf_decode_macros): Likewise.
> * eval.c (value_f90_subarray): Likewise.
> * guile/scm-param.c (gdbscm_make_parameter): Likewise.
> * i386-linux-tdep.c (i386_canonicalize_syscall): Likewise.
> * infrun.c (handle_command): Likewise.
> * memory-map.c (memory_map_start_memory): Likewise.
> * osabi.c (set_osabi): Likewise.
> * parse.c (operator_length_standard): Likewise.
> * ppc-linux-tdep.c (ppc_canonicalize_syscall): Likewise, and use
> single return point.
> * python/py-frame.c (gdbpy_frame_stop_reason_string): Likewise.
> * python/py-symbol.c (gdbpy_lookup_symbol): Likewise.
> (gdbpy_lookup_global_symbol): Likewise.
> * record-full.c (record_full_restore): Likewise.
> * regcache.c (regcache_register_status): Likewise.
> (regcache_raw_read): Likewise.
> (regcache_cooked_read): Likewise.
> * rs6000-tdep.c (powerpc_set_vector_abi): Likewise.
> * symtab.c (initialize_ordinary_address_classes): Likewise.
> * target-debug.h (target_debug_print_signals): Likewise.
> * utils.c (do_restore_current_language): Likewise.
LGTM.
Thanks,
Pedro Alves