AaronBallman wrote:

> > > Wouldn't it be better to go the other way around? i.e. have a 
> > > `[[clang::compressed_bitfield]]` (or whatever) which influences the ABI, 
> > > so it's possible to do stuff like
> > > ```
> > > [[clang::compressed_bitfield]] bool IsSomething : 1;
> > > [[clang::compressed_bitfield]] MyEnum Whatever : 3;
> > > [[clang::compressed_bitfield]] int MoreStuff : 4;
> > > ```
> > > 
> > > 
> > > which the current approach doesn't allow.
> > 
> > 
> > The issue is that MSVC wouldn't know/recognize/implement this attribute - 
> > so clang couldn't do that without breaking ABI compatibility with MSVC.
> 
> That's not important for everybody, and you could still `#if` around that 
> code like
> 
> ```c++
> #if __has_cpp_attribute(clang::compressed_bitfield)
> #define BITFILED_T(ActualType, ABIType) 
> static_assert(check_abi_compat<ActualType, ABIType>()); 
> [[clang::compressed_bitfield]] ActualType
> #else
> #define BITFIELD_T(ActualType, ABIType) ABIType
> ...
> ```
> 
> Sure, it's not super pretty, but it gets you there and allows you to do more 
> stuff. We could also ask the MSVC folks whether there would be interest to 
> add such an attribute, since there is clearly interest in having a good ABI 
> and stronger typing (CC @StephanTLavavej @CaseyCarter).

I think that's a somewhat orthogonal feature to the one @Endilll is proposing. 
While it might make sense to ask the MSVC and GCC folks if they'd be willing to 
entertain a similar attribute, the implementation landscape is much wider in C 
and those implementations may have similar ABI issues. If an implementation 
ignores the `compressed_bitfield` attribute, you get potential ABI issues; if 
an implementation ignores the `debug_info_type` attribute, you get the default 
debugging experience but no change to codegen behavior. So I think there may be 
room for both features.

We have a `preferred_name` attribute already for specifying "please display 
this name instead of that name" in diagnostics; this seems somewhat similar in 
nature in that it's "please display this type instead of that bit-field type" 
in the debugger, so mayyybe we want to name this `preferred_type` instead? If 
this could also be useful for diagnostics which mention types and can be 
triggered with a bit-field, that might also be a reason to use a different name 
(I'm not certain we have many/any such diagnostics today though.) I'm not 
opposed to the current name, but more thinking that it might be too specific 
and we may want a path to more generalization in the future.

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