[cfe-dev] extending C with Clang

Abramo Bagnara abramo.bagnara at gmail.com
Thu Sep 2 23:08:08 PDT 2010


Il 03/09/2010 00:12, John McCall ha scritto:
> 
> On Sep 2, 2010, at 3:01 PM, Wei Li wrote:
> 
>> Dear All:
>>
>> I am  extending C language for my research work and using Clang for
>> this. I am adding some annotations which are not part of C language
>> but will be helpful for my specific work.
>>
>> Now consider the following:
>>
>> int  foo() { return 1; }
>>
>> is a legal  expression in C and is acceptable by the Clang. Now if I
>> introduce a new annotation say "Wei"  and write the above expression
>> as
>>
>> int foo() Wei { return 1;}
>>
>> I have to make changes in Clang at the front end to make it work. I
>> see my extension as super set of C. That is my work should accept the
>> legal C program as well.
>>
>> Now here is the problem. When I make changes in the Clang . It accepts
>> the new annotation but breaks the C programs. My understanding is that
>> as I am adding to C so if my stuff works, any legal C  program should
>> also work. But its not happening. I am not a compiler person. I am an
>> engineer. Any suggestions? why clang is doing this or am I doing
>> something    which is not compatible with the C grammar.?
> 
> Your parser modifications are probably broken.  I would strongly
> suggest implementing Wei as a macro for __attribute__((Wei)) and then
> just adding support for your new attribute.

Isn't a better idea for user that need this to have only one

__attribute__((custom(Expr)))

and store the Expr in the AST?

In this way the Expr is subject to template trasformation and each
application can use it how it needs to.

Some application will prefer to use a string literal as Expr, while
others will prefer to have a function call like Expr where arguments are
reference to program objects.

Another option is change AnnotateAttr to accept an arbitrary expression.

Are you willing to accept a patch for one of this alternatives?



More information about the cfe-dev mailing list