<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 3 February 2014 14:08, Richard <span dir="ltr"><<a href="mailto:legalize@xmission.com" target="_blank">legalize@xmission.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<br>
In article <<a href="mailto:CAENS6EsgzhXWfANFze8VAp68qDGHnrHNZJaaLmi28YJtnQwOmw@mail.gmail.com" target="_blank">CAENS6EsgzhXWfANFze8VAp68qDGHnrHNZJaaLmi28YJtnQwOmw@mail.gmail.com</a>>,<br>
<div>    David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> writes:<br>
<br>
> On Mon, Feb 3, 2014 at 3:06 AM, Vassil Vassilev <<a href="mailto:vvasilev@cern.ch" target="_blank">vvasilev@cern.ch</a>> wrote:<br>
><br>
</div><div>> >   A few months ago I was looking for a copy-paste detector for a C++<br>
> > project. I didn't find such a feature of clang's static analyzer. Is this<br>
> > the case?<br>
><br>
> copy-paste detector? As in plagarism detection?<br>
<br>
</div>I don't think plagiarism is the concern.  The conern is that<br>
copy/paste of blocks of code where the pasted block needs to be<br>
updated in several places, but not all of the updates were performed.<br></blockquote><div><br></div><div>I've implemented this sort of thing, but it's only 80% finished and has been kicking around on the low-priority end of my todo list for the past couple of years. Patch attached. It'd be great if someone were interested in finishing this off. I won't get to it soon.</div>


<div><br></div><div>Note that it's a warning instead of a static analysis check which means that it must have an aggressively low number of false positives, and that it must be run quickly. The implementation I have analyzes conditional operators and if/elseif chains, but doesn't collect all the expressions through something like a && b &&c && a. That would be the next thing to add.</div>


<div><br></div><div>It does have some really cool properties that we can only get because clang integrates closely with its preprocessor. Consider this sample from the testcase:</div><div><br>#define num_cpus() (1)<br>#define max_omp_threads() (1)<br>


int test8(int expr) {<br>  if (expr) {<br>    return num_cpus();<br>  } else {<br>    return max_omp_threads();<br>  }<br>}</div><div><br></div><div>We know better than to warn on that, even though the AST looks the same. If you instead write "return num_cpus();" twice, we warn on that (that's test9 in the testsuite).</div>


<div><br></div><div>Nick</div><div><br>
</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Coverity can detect such instances, for instance.<br>



<br>
Here is an article from 2006 describing such a tool:<br>
<<a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.113" target="_blank">http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.113</a>><br>
<br>
Wikipedia says PMD has a copy/paste detector that works with C++:<br>
<<a href="http://en.wikipedia.org/wiki/PMD_(software)#Copy.2FPaste_Detector_.28CPD.29" target="_blank">http://en.wikipedia.org/wiki/PMD_(software)#Copy.2FPaste_Detector_.28CPD.29</a>><br>
<br>
"Note that CPD works with Java, JSP, C, C++, C#, Fortran and PHP code.<br>
Your own language is missing ? See how to add it here"<br>
<<a href="http://pmd.sourceforge.net/snapshot/cpd-usage.html" target="_blank">http://pmd.sourceforge.net/snapshot/cpd-usage.html</a>><br>
<span><font color="#888888">--<br>
"The Direct3D Graphics Pipeline" free book <<a href="http://tinyurl.com/d3d-pipeline" target="_blank">http://tinyurl.com/d3d-pipeline</a>><br>
     The Computer Graphics Museum <<a href="http://ComputerGraphicsMuseum.org" target="_blank">http://ComputerGraphicsMuseum.org</a>><br>
         The Terminals Wiki <<a href="http://terminals.classiccmp.org" target="_blank">http://terminals.classiccmp.org</a>><br>
  Legalize Adulthood! (my blog) <<a href="http://LegalizeAdulthood.wordpress.com" target="_blank">http://LegalizeAdulthood.wordpress.com</a>><br>
</font></span><div><div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">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>
</div></div></blockquote></div><br></div></div>