This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add casts for legitimate integer to enum conversions


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]