public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: Tom Tromey <tom@tromey.com>, Simon Marchi <simon.marchi@efficios.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 3/5] gdb: allow duplicate enumerators in flag enums
Date: Tue, 18 Feb 2020 20:48:00 -0000	[thread overview]
Message-ID: <31be9c0a-c389-123b-e2cd-338add47aca2@simark.ca> (raw)
In-Reply-To: <87a75f7hs7.fsf@tromey.com>

On 2020-02-18 3:38 p.m., Tom Tromey wrote:
>>>>>> "Simon" == Simon Marchi <simon.marchi@efficios.com> writes:
> 
> Simon> I have come across some uses cases where it would be desirable to treat
> Simon> an enum that has duplicate values as a "flag enum".  For example, this
> Simon> one here [1]:
> 
> Simon>             /* Alias for header backward compatibility. */
> Simon>             MEMBARRIER_CMD_SHARED = MEMBARRIER_CMD_GLOBAL,
> Simon>     };
> 
> Simon> The last enumerator is kept for backwards compatibility.  Without this
> Simon> patch, this enumeration wouldn't be considered a flag enum, because two
> Simon> enumerators collide.   With this patch, it would be considered a flag
> Simon> enum, and the value 3 would be printed as:
> 
> Does it always choose the first enumerator?

Yes.

generic_val_print_enum_1 iterates on the enum type's fields (so,
enumerators) and clears those bits in the value as it goes.  So
if multiple enumerators match, the first one in the enum type's
fields will be printed.  Is this list of fields guaranteed to be
in the same order as what's in the code though?

> 
> Simon>  	  if (nbits != 0 && nbits && nbits != 1)
> Simon>  	    flag_enum = 0;
> Simon> -	  else if ((mask & value) != 0)
> Simon> -	    flag_enum = 0;
> Simon> -	  else
> Simon> -	    mask |= value;
> 
> I wonder if this allows too much, though.
> 
> Maybe instead it should check for duplicate enumerator values and allow
> those, while still disallowing enums with conflicts, like:
> 
> enum x {
>   one = 0x11,
>   two = 0x10,
>   three = 0x01
> };
> 
> ... which probably isn't a sensible flag enum.

Not sure what you mean here.  With the current patch, this enum would not
bne marked as a flag enum, as `one` has multiple bits set.

Simon

  parent reply	other threads:[~2020-02-18 20:48 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-13 20:30 [PATCH 1/5] gnulib: import count-one-bits module and use it Simon Marchi
2020-02-13 20:30 ` [PATCH 2/5] gdb: fix printing of flag enums with multi-bit enumerators Simon Marchi
2020-02-17 10:56   ` Luis Machado
2020-02-17 17:27     ` Simon Marchi
2020-02-17 17:40       ` Luis Machado
2020-02-17 19:20         ` Simon Marchi
2020-02-18 20:42           ` Tom Tromey
2020-02-13 20:30 ` [PATCH 5/5] gdb: change print format of flag enums with value 0 Simon Marchi
2020-02-17 12:08   ` Luis Machado
2020-02-17 19:02     ` Simon Marchi
2020-02-18 20:45   ` Tom Tromey
2020-02-18 20:52     ` Simon Marchi
2020-02-13 20:30 ` [PATCH 3/5] gdb: allow duplicate enumerators in flag enums Simon Marchi
2020-02-17 11:01   ` Luis Machado
2020-02-18 20:38   ` Tom Tromey
2020-02-18 20:42     ` Tom Tromey
2020-02-18 20:48     ` Simon Marchi [this message]
2020-02-18 21:57       ` Tom Tromey
2020-02-18 22:25         ` Simon Marchi
2020-02-13 20:38 ` [PATCH 4/5] gdb: print unknown part of flag enum in hex Simon Marchi
2020-02-17 11:04   ` Luis Machado
2020-02-17 18:59     ` Simon Marchi
2020-02-18 20:43   ` Tom Tromey
2020-02-14 19:53 ` [PATCH 1/5] gnulib: import count-one-bits module and use it Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=31be9c0a-c389-123b-e2cd-338add47aca2@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@efficios.com \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).