[cfe-dev] Semantic Analysis in Clang

Mohammad Adil madil90 at gmail.com
Fri Jan 25 05:57:14 PST 2013


I need to insert some code in the file being parser. I need to make sure
that the resulting file compiles fine. The code that I am inserting will
mostly be " ostream << type_x ;". Now before I do that, I need to ensure
that "type_x" has a stream operator defined. Is that possible any other
way? I am very grateful for your help.

Regards,
Adil


On Fri, Jan 25, 2013 at 6:34 PM, Manuel Klimek <klimek at google.com> wrote:

> On Fri, Jan 25, 2013 at 1:13 PM, Mohammad Adil <madil90 at gmail.com> wrote:
>
>> Thanks for the reply. Well, here's the detailed problem. Once all the
>> syntax checking has been done, the next step before generating IR is to do
>> semantic analysis and type checking. Let us say that I encounter a code
>> like this:
>>
>> string b;
>> vector<T> a;
>> cout<<b;
>> cout<<a;
>>
>>       How does clang figure out that the 3rd statement is valid because
>> an operator for string exists, while the 4rth statement is not valid. More
>> specifically, I want to know how clang searches through all the operators
>> (or functions). I have to use this functionality. Does the clang api allow
>> me to do this easily or will I have to replicate this functionality?
>>
>
> As far as I know the clang API does not allow you to do that easily - you
> need the full semantic analysis state at that point during parsing, and as
> far as I'm aware this only exists implicitly in the Sema* classes. Overload
> resolution is one of those really complex and messy parts of C++ :)
>
> If you let us know what actual problem you're trying to solve, there might
> be solutions to that which are simpler than using overload resolution :)
>
> Cheers,
> /Manuel
>
>
>> Regards,
>> Adil
>>
>>
>>
>>
>>
>> On Fri, Jan 25, 2013 at 4:35 PM, Manuel Klimek <klimek at google.com> wrote:
>>
>>> On Thu, Jan 24, 2013 at 12:49 PM, madil90 <madil90 at gmail.com> wrote:
>>>
>>>> Hi,
>>>>    I am looking to perform some semantic analysis in clang. More
>>>> specifically, I want to know whether a function exists for a certain
>>>> type.
>>>> The function is global. e.g.
>>>>
>>>> String toString(A a);
>>>>
>>>>     I want to differentiate that this function exists for type A and
>>>> not for
>>>> type B. I have built an AST and am parsing it. How can I achieve this?
>>>> (Whenever I encounter a type)
>>>>
>>>
>>> I'd loop over all declarations of toString and see which type they
>>> take... Perhaps I'm misunderstanding your problem though :)
>>>
>>> Cheers,
>>> /Manuel
>>>
>>>
>>>> Regards,
>>>> Adil
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://clang-developers.42468.n3.nabble.com/Semantic-Analysis-in-Clang-tp4030012.html
>>>> Sent from the Clang Developers mailing list archive at Nabble.com.
>>>> _______________________________________________
>>>> cfe-dev mailing list
>>>> cfe-dev at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>>
>>>
>>>
>>
>>
>> --
>> Mohammad Adil
>> LUMS SSE
>>
>
>


-- 
Mohammad Adil
LUMS SSE
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130125/347049ed/attachment.html>


More information about the cfe-dev mailing list