<div dir="ltr">You might want to look into the implementation of Clang's UBSan feature (-fsanitize=undefined). Like the other sanitizers (address, memory, and thread) UBSan works by adding extra checks into the LLVM IR from the Clang frontend. LLVM compiles those checks as it would any other IR and they are used to verify that the behavior is correct.<br>
<br>The simplest example of this might be bounds checking of a static array (and this is one of the things UBSan can check for) or overflow of a signed integer. The frontend simply adds the checks a programmer might write if they were coding defensively against such a circumstance. Then LLVM just compiles the code as normal and when you execute the program, if you trigger the check to fail, an error message is printed.<br>
<br>For the particular check you're interested in implementing... I'm not sure exactly how you'll go about implementing that check or how you'd avoid false positives, but UBSan is probably the first place to look and the ideal place for this to live, if possible.<br>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Nov 15, 2013 at 9:21 AM, Lukas Hellebrandt <span dir="ltr"><<a href="mailto:kamikazecz@gmail.com" target="_blank">kamikazecz@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
I'm trying to write a tool for detecting undefined behavior in C<br>
regarding sequence points and side effects.<br>
<br>
I'm not sure whether it should be a Clang plugin or LLVM run or<br>
something completely different (I'm really new to both Clang and LLVM)<br>
and that's what I need advice with.<br>
<br>
For my work, I need to use both AST and alias analysis<br>
<br>
Clang plugin:<br>
        +relatively easy to use<br>
        +access to AST with all the needed info EXCEPT alias analysis (right?)<br>
        -no alias analysis, I'd need to write one myself<br>
<br>
LLVM run:<br>
        +built-in alias analysis (I'd like to use it, writing my own alias<br>
analysis is not really what my work is all about)<br>
        -I do NOT have access to AST<br>
        -I don't know it at all (but I'm ready to learn it if it shows up to be<br>
the best option)<br>
<br>
The big PROBLEM is: a behavior that is undefined in C (and which Clang<br>
has access to) might be (and in my case WILL be) well defined in LLVM<br>
(for example, i=i++; is undefined in C but in LLVM code it will be<br>
already well defined and the result will depend on Clang behavior).<br>
<br>
So I thought I could use both, in Clang create a list of rules, for<br>
example "On line L, there is an undefined behavior if X aliases with Y"<br>
and then SOMEHOW dig this info from LLVM run.<br>
<br>
Is this a good idea? Is there a way (other than output to file from<br>
Clang and then read it in LLVM) to give this set of rules to LLVM? I'd<br>
also be glad for any other idea, not necessarily including LLVM and<br>
Clang, to solve this problem.<br>
<br>
Thanks in advance!<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
*****************************<br>
Lukas Hellebrandt<br>
<a href="mailto:kamikazecz@gmail.com">kamikazecz@gmail.com</a><br>
*****************************<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</font></span></blockquote></div><br></div></div>