[cfe-dev] Right parenthesis of a condition.

Dorian Haglund via cfe-dev cfe-dev at lists.llvm.org
Wed Feb 28 03:08:04 PST 2018


Thanks for your help Alexey.

It made me realize that I forgot a very important step of my problem:

Before giving the file to be monitored to clang, we preprocess the source
with gcc.

Which means that is if the original source file /tmp/test.c is:

#include <stdlib.h>

int main()
{
  int* a = 0;
  if (a != NULL)
    return 1;
  return 0;
}


Clang would receive (I only pasted the last 15 lines) :

# 2 "/tmp/test.c" 2


# 3 "/tmp/test.c"
int main()
{
  int* a = 0;
  if (a !=
# 6 "/tmp/test.c" 3 4
          ((void *)0)
# 6 "/tmp/test.c"
              )
    return 1;
  return 0;
}

In that case, I would like to get the location of the enclosing parenthesis
for the 'IfStmt' (the one just before the 'return 1;'). I tried to toy with
the lexer to get it but with no success.
Do you have any idea ?

Best regards


2018-02-28 10:21 GMT+01:00 Alexey Knyshev <alexey.knyshev at gmail.com>:

> Hi Dorian,
>
> Hope it would be helpful:
> https://stackoverflow.com/a/24223347
>
> Regards, Alexey K
>
> 2018-02-28 12:11 GMT+03:00 Dorian Haglund via cfe-dev <
> cfe-dev at lists.llvm.org>:
>
>> Hello,
>>
>> I'm using the clang library to monitor (among other things) the if
>> statements in my program.
>>
>> i need to get the location of the right parenthesis of the condition of
>> the if (and while) statements.
>>
>> I've tried things such as:
>>
>> auto condLocEnd = statement->getCond()->getLocEnd();auto condLoc = Lexer::findLocationAfterToken(condLocEnd, tok::r_paren, sm, LangOptions(), false);
>>
>> Unfortunately condLoc is invalid when the condition contains a macro. Eg:
>>  if(p == NULL). I can't figure out how to get the location of the right
>> parenthesis.
>>
>> Do you know how to get it ? If it is not possible, could you explain why ?
>> Best regards,
>>
>>
>> --
>> Dorian Haglund
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>>
>
>
> --
> linkedin.com/profile
> <https://www.linkedin.com/profile/view?id=AAMAABn6oKQBDhBteiQnWsYm-S9yxT7wQkfWhSw>
>
> github.com/alexeyknyshev
> bitbucket.org/alexeyknyshev
>



-- 
Dorian Haglund
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180228/bad84c75/attachment.html>


More information about the cfe-dev mailing list