https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89450
Eric Gallager <egallager at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |egallager at gcc dot gnu.org --- Comment #6 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to Jonathan Wakely from comment #5) > (In reply to Martin Liška from comment #0) > > Issues is that: > > > > 14746 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */ > > 14747 if (flag_strict_enums) > > 14748 set_min_and_max_values_for_integral_type (enumtype, > > precision, sgn); > > > > is called for precision, which sets min = 0 and max = 7. > > Because that's how enums work in C++, as required by the standard. > > That's not an issue. > > > What about doing: > > > > diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c > > index 612afbacd27..46302b4a61d 100644 > > --- a/gcc/cp/decl.c > > +++ b/gcc/cp/decl.c > > @@ -14745,7 +14745,10 @@ finish_enum_value_list (tree enumtype) > > > > /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */ > > if (flag_strict_enums) > > - set_min_and_max_values_for_integral_type (enumtype, precision, sgn); > > + { > > + TYPE_MIN_VALUE (enumtype) = minnode; > > + TYPE_MAX_VALUE (enumtype) = maxnode; > > + } > > } > > else > > underlying_type = ENUM_UNDERLYING_TYPE (enumtype); > > > > I can also imagine another option level when desired. > > Please no. -fstrict-enums currently makes the compiler *more* strictly > conforming, by following the rules of the standard. Your suggestion arguably > makes it *less* conforming, by deciding that valid values should emit a > warning. > > What you want is not how enums work in C++. Please don't abuse > -fstrict-enums when what you want is "some other kind of enum, not one that > strictly follows the C++ standard". This reminds me, I think there are some other related bug reports out there, but I can't find them right now...