On 14 October 2017 at 17:19, Sam van Kampen via gcc <gcc@gcc.gnu.org> wrote:
> On Sat, Oct 14, 2017 at 04:43:33PM +0100, Jonathan Wakely wrote:
>> On 14 October 2017 at 15:50, Sam van Kampen wrote:
>> > Dear maintainers,
>> >
>> > Having come across https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414
>> > (bug #61414) quite often myself I decided I wanted to fix it.
>> >
>> > By reading through parts of the GCC internals manual I have
>> > managed to add a warning flag, the code for which I will submit to
>> > gcc-patches, but since this is my first time contributing to GCC I have
>> > some questions.
>> >
>> >     1. When it comes to the patch, should I post it to the bug tracker
>> >        before sending it to gcc-patches?
>>
>> No. Patches go to the mailing list, not bugzilla.
>>
>> But you can add the URL of the gcc-patches mail to bugzilla (and then
>> somebody should add the "patch" keyword to the bug).
>
> Noted.
>
>> >     2. A better fix for this bug would be to only warn when the number
>> >        of defined enumerators would not fit inside a bitfield of the
>> >        specified size. Seeing as I don't know the GCC internals very
>> >        well, I'm wondering if anyone could point me in the right
>> >        direction when it comes to getting the number of defined
>> >        enumerators in an enum type.
>>
>> Why does the number of enumerators make any difference?
>
> I suppose the number of enumerators does not make any difference, but
> rather the enumerator with the highest integer value. For instance, in

And the lowest value, consider enum X { Y = -200, Z = 5 };

> this example:
>
>         enum class A { A, B, C; };
>         struct D { A enum_field : 2; };
>
> the enumerator with the highest integer value is C, with an integer
> value of 2. This enum type therefore fits inside the bit-field in

But it doesn't, because as I think it says in the bug report, a scoped
enum (i.e. enum class) has a fixed underlying type, and all values of
the underlying type are valid values of the enumeration type.

enum class A { a, b, c };
A max = A{std::numeric_limits<std::underlying_type_t<A>>::max()};

> struct D, and so the compiler should not emit a warning in my eyes.
>
> Of course, you can cast an integer to an enum type and assign it that
> way, which should probably trigger a warning if the value could be too
> large (it already triggers -Woverflow if the value is a compile-time
> constant).

As I said in the bug report, PR 51242 comment 27 suggests a more useful warning.


>> >     3. When it comes to documentation and tests, I've documented the
>> >        flag in doc/invoke.texi and will add a test in the test suite,
>> >        hopefully when the patch includes the check specified in 2. Are
>> >        there are any other places I should add documentation?
>>
>> No, that's all.
>
> Thanks.
>
> Sam

Reply via email to