https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91351
--- Comment #9 from Martin Liška <mliska at suse dot cz> ---
On 8/6/19 2:54 PM, glisse at gcc dot gnu.org wrote:
> Does the enum really have a precision of 5 bits? I would have expected
> (1<<5)-11 instead of 4294967285 (i.e. (1<<32)-11), without looking at it too
> closely.
Yep, if I see correctly:
(gdb) p debug_tree(*lhs)
<ssa_name 0x7ffff78166c0
type <enumeral_type 0x7ffff77f5f18 E
type <integer_type 0x7ffff780b000 unsigned int public unsigned SI
size <integer_cst 0x7ffff76bf0a8 constant 32>
unit-size <integer_cst 0x7ffff76bf0c0 constant 4>
align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff780b000 precision:5 min <integer_cst 0x7ffff7806378 0> max <integer_cst
0x7ffff7806390 31>>
sizes-gimplified unsigned SI size <integer_cst 0x7ffff76bf0a8 32>
unit-size <integer_cst 0x7ffff76bf0c0 4>
align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff77f5f18 precision:32 min <integer_cst 0x7ffff76bf0d8 0> max <integer_cst
0x7ffff76bf090 4294967295>
values <tree_list 0x7ffff77f4488
purpose <identifier_node 0x7ffff78079c0 e0
normal local bindings <(nil)>> value <const_decl 0x7ffff780a000
e0>
chain <tree_list 0x7ffff77f44b0
purpose <identifier_node 0x7ffff7807a00 e1
normal local bindings <(nil)>> value <const_decl
0x7ffff780a070 e1>
chain <tree_list 0x7ffff77f44d8
purpose <identifier_node 0x7ffff7807a40 e2
normal local bindings <(nil)>> value <const_decl
0x7ffff780a0e0 e2>
chain <tree_list 0x7ffff77f4500
purpose <identifier_node 0x7ffff7807a80 e3
normal local bindings <(nil)>> value <const_decl
0x7ffff780a150 e3>
chain <tree_list 0x7ffff77f4528 purpose
<identifier_node 0x7ffff7807ac0 e4> value <const_decl 0x7ffff780a1c0 e4> chain
<tree_list 0x7ffff77f4550>>>>>> context <translation_unit_decl 0x7ffff76ab168
/home/marxin/Programming/testcases/pr91351.cc>
chain <type_decl 0x7ffff76cc850 E>>
def_stmt _6 = e_2(D) + 4294967285;
version:6>
So the integer_type of the enumeral_type hash precision:5 and:
min <integer_cst 0x7ffff7806378 0>
and
max <integer_cst 0x7ffff7806390 31>
which is what one would expect from -fstrict-enums.
Martin