erichkeane wrote:

>As I mentioned in 
>https://github.com/llvm/llvm-project/pull/69104#discussion_r1365269451, I'm 
>not putting any restrictions on type parameter of the attribute, which makes 
>even more sense for more generic preferred_type.

>But I'm confused by the fact you are raising this question. In 
>https://github.com/llvm/llvm-project/pull/69104#discussion_r1364432624, you 
>wrote:

It was just a question, based on the motivation I was misguided and wanted to 
make sure I had the complete list.  I can see value to leaving it unrestricted.

>I'd like to state upfront that I'm diagnosing only booleans, because I see how 
>it can help maintaining Clang headers. Now, on CHAR_BIT == 8 platform, your 
>example results in 8 bits for value, and 1 bit of padding 
>(http://eel.is/c++draft/class.bit#1.sentence-6). I find such bit-field 
>somewhat strange (why can't padding be declared explicitly via unnamed 
>bit-field?), but maybe I haven't seen enough bit-fields in my life to 
>appreciate it.

No, I'm saying that there ARE cases where the user would want to do something 
like:
` unsigned SomeChar : 9;`

That is because in some interfaces in the C standard library will return an 
integer that is EITHER a CHAR or an error-code.  So if the user is intending to 
capture that, this would be a false positive.  Definitively motivated IMO more 
than a 2 bit `bool`.  But since you're limiting this to `bool`, I'm less 
concerned.

>I wonder if we should treat one-bit bit-fields as if they were bool 
>automatically (e.g., create this attribute implicitly in that case). How often 
>do we expect to see one-bit bit-fields that are arithmetic? I'm sure it 
>happens (to multiply against -1, 0, or 1 depending on the sign of the 
>bit-field, for example), but I expect it to be quite rare compared to 
>bool-like use.

I'd be tentative to do that initially, I think I'd prefer that be a future 
'enhancement' after we evaluate the fall-out of this.  The rest of this patch 
has some significant promise, and I'd like to not hold it up trying to evaluate 
that.


>However, will this actually work in practice in the debugger? If not, perhaps 
>we should limit to just integer and enumeration types for now, leaving the 
>extension for the future.

OOof, yeah, I was initially thinking about something like `Fancy`, but the 
tests I'd need to feel comfortable doing something like that would be pretty 
extensive.  Additionally, anything 'floating point' would be REALLY messy as a 
bitfield anyway.  I like the idea of limiting this to 
`isIntegralOrEnumerationType` (or, perhaps that and `isa<EnumType>` so that we 
support incomplete enum types, just with no diagnostics).

https://github.com/llvm/llvm-project/pull/69104
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to