[cfe-dev] Rendering of variable declarations specifying register allocation
Renato Golin
renato.golin at linaro.org
Wed Oct 1 00:30:21 PDT 2014
Matthew,
I don't think this functionality is intended to be stable or reparseable,
but most certainly it's not a production tool.
Whatever is reported, will probably be treated as improvement, not a bug.
You shouldn't be using this as a feature, that's all I'm saying.
Cheers,
Renato
On 1 Oct 2014 02:08, "Matthew Fernandez" <matthew.fernandez at gmail.com>
wrote:
> OK, will do. While we're on the topic, Clang also seems to remove
> bracketing around parameters to inline asm:
>
> $ cat foo.c
> void foo() {
> int i = 0;
> asm ("mov %%eax, %%ebx"::"a"(i));
> }
> $ clang -c foo.c
> $ clang -cc1 -ast-print foo.c | tee bar.c
> void foo() {
> int i = 0;
> asm ("mov %%eax, %%ebx" : : "a" i);
> }
> $ clang -c bar.c
> bar.c:3:38: error: expected '(' after 'asm operand'
> asm ("mov %%eax, %%ebx" : : "a" i);
> ^
> 1 error generated.
>
> To me, this is indicative of a second bug. Should I file this one
> separately as well? My hesitancy is because I'm not sure how robust this
> functionality is intended to be. Should the output of -ast-print always be
> parseable as input to Clang? I would think yes.
>
> On 01/10/14 09:33, Renato Golin wrote:
>
>> Possibly. Opening a bug is definitely worth, though, at least to
>> investigate.
>>
>> Cheers,
>> Renato
>>
>> On 30 Sep 2014 22:48, "Matthew Fernandez" <matthew.fernandez at gmail.com
>> <mailto:matthew.fernandez at gmail.com>> wrote:
>>
>> Thanks, Renato. So this is definitely a bug? If so, I'll open a new
>> one at
>> http://llvm.org/bugs/. Just wanted to make sure it wasn't intended
>> behaviour.
>>
>> On 01/10/14 06:51, Renato Golin wrote:
>>
>> On 30 September 2014 02:57, Matthew Fernandez
>> <matthew.fernandez at gmail.com <mailto:matthew.fernandez at gmail.com>>
>> wrote:
>>
>> This seems to be independent of the target platform; at least
>> I get similar
>> results for ARM and x86. What is the intended behaviour here?
>>
>>
>> Current tip does:
>>
>> void foo() {
>> register int x asm("eax");
>> }
>>
>> AND
>>
>> void foo() {
>> register int x = 1 asm("eax");
>> }
>>
>> The first looks correct, but the second looks weird. I don't know
>> what's the expected behaviour, or if this output can be regarded
>> as
>> valid code (I'm guessing not), so in theory, it doesn't matter
>> much.
>> But it does seem an easy fix for this particular case, I think.
>>
>> cheers,
>> --renato
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141001/4969773e/attachment.html>
More information about the cfe-dev
mailing list