[PATCH] D122248: [clang][CodeGen]Fix clang crash and add bitfield support in __builtin_dump_struct

Wang Yihan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 24 11:01:18 PDT 2022


yihanaa added a comment.

In D122248#3405866 <https://reviews.llvm.org/D122248#3405866>, @aaron.ballman wrote:

> In D122248#3405644 <https://reviews.llvm.org/D122248#3405644>, @yihanaa wrote:
>
>> In D122248#3405166 <https://reviews.llvm.org/D122248#3405166>, @erichkeane wrote:
>>
>>> In D122248#3405062 <https://reviews.llvm.org/D122248#3405062>, @aaron.ballman wrote:
>>>
>>>> In D122248#3403734 <https://reviews.llvm.org/D122248#3403734>, @yihanaa wrote:
>>>>
>>>>> What if we don't emit '=' for zero-width bitfield, like this:
>>>>>
>>>>>   struct Bar {
>>>>>   unsigned c : 1;
>>>>>   unsigned : 3;
>>>>>   unsigned : 0;
>>>>>   unsigned b;
>>>>>   };
>>>>>   
>>>>>   struct Bar {
>>>>>   unsigned int c : 1 = 0
>>>>>   unsigned int   : 3 = 0
>>>>>   unsigned int   : 0
>>>>>   unsigned int b = 0
>>>>>   }
>>>>>
>>>>> What do you all think?
>>>>
>>>> I like this idea best of all!
>>>
>>> Agreed!
>>
>> @erichkeane @aaron.ballman 
>> Previously we used FieldDecl->getNameAsString to get the field name, but the comments for this function indicate that it is Deprecated,and suggestion move clients to getName().
>>
>> The FieldDecl->getName() return the anonymous inner struct's name like:
>>
>>   struct T3A {
>>     union {
>>       int a;
>>       char b[4];
>>     };
>>   };
>>
>>   struct T3A {
>>   union T3A::(anonymous at ./builtin_dump_struct.c:77:5) {
>>       int a = 42
>>       char[4] b = 0x2a
>>       }
>>   }
>>
>> what do you all think?
>
> I would probably keep using `getNameAsString()` as I don't think the extra information helps overly much. That interface was marked deprecated 13 years ago, so don't feel bad for making use of it.

Okay,

In D122248#3405926 <https://reviews.llvm.org/D122248#3405926>, @erichkeane wrote:

> Agreed.  `DeclarationName::getAsString` is in no way marked deprecated though, so you could call that?
>
> `FieldDecl->getDeclName()->getAsString()` or the `DeclarationName` `operator<<` would both be equivalent with no threat of deprecation.

Thanks @erichkeane @aaron.ballman , i have updated the diff.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D122248/new/

https://reviews.llvm.org/D122248



More information about the cfe-commits mailing list