[cfe-dev] Get the number of bits of a bit field with libclang?

Jordy Rose jediknil at belkadan.com
Tue May 22 12:35:20 PDT 2012


On May 22, 2012, at 15:28, Argyrios Kyrtzidis wrote:

> On May 22, 2012, at 11:42 AM, Jacob Carlborg wrote:
> 
>> Is it possible to get the number of bits of a bit field with libclang?
>> 
>> struct Foo
>> {
>>    int a : 1;
>> };
>> 
>> I noticed I could traverse to the "value" of "a" and the type of the 
>> cursor was CXCursor_IntegerLiteral. But is it possible to get the actual 
>> value?
> 
> No, are you interested in submitting a patch ? I suggest something like "clang_Cursor_getBitWidthValue(CXCursor)" similar to how clang_Cursor_getNumArguments(CXCursor C) works, with the difference that it can return "unsigned" and 0 if the cursor is not a bitfield.

Unfortunately, C99 6.7.2.1p3 states that unnamed bit fields may have 0 width, and 6.7.2.1p11 explains that it's a way to separate packed units.

int a : 1;
int : 0;
int b: 1;
// a and b will be in different bytes, possibly different words.

You'll need another sentinel value, a dual return, or maybe just an assert to make this work.

Jordy



More information about the cfe-dev mailing list