<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1202521920;
        mso-list-type:hybrid;
        mso-list-template-ids:2092887154 -886696120 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:20.4pt;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:SimSun;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:56.4pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:92.4pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:128.4pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:164.4pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:200.4pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:236.4pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:272.4pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:308.4pt;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I think the problem is when declaring implicit copy assignment the TypeSourceInfo for the copy assignment method declaration is set to 0 but RAV relies on it
 to traverse the parameter variable declaration inside the copy assignment function.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Attach a work in progress patch here. I am not sure if this is the right way of building the type nodes for implicit copy assignment as it feels hacky (and
 it introduces two regressions). For explicit declared functions the type nodes are built through GetFullTypeForDeclarator() but that is not reusable in this case.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Is there any better approach to build the type nodes for implicit declared functions?
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Michael.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> cfe-dev-bounces@cs.uiuc.edu [mailto:cfe-dev-bounces@cs.uiuc.edu]
<b>On Behalf Of </b>Manuel Klimek<br>
<b>Sent:</b> Monday, June 10, 2013 5:42 AM<br>
<b>To:</b> Alexandros Tzannes<br>
<b>Cc:</b> cfe-dev@cs.uiuc.edu; Vikram Sadanand Adve<br>
<b>Subject:</b> Re: [cfe-dev] Visiting Implicit Code [RecursiveASTVisitor]<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">(or alternatively, hack up a patch that fixes the problem, together with nice tests, and send it to cfe-commits)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Mon, Jun 10, 2013 at 2:41 PM, Manuel Klimek <<a href="mailto:klimek@google.com" target="_blank">klimek@google.com</a>> wrote:<o:p></o:p></p>
<div>
<p class="MsoNormal">The easiest way to get an answer is probably to hang out on #llvm on oftc and try to get a hold of zygoloid or dgregor.<o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Wed, Jun 5, 2013 at 7:54 PM, Alexandros Tzannes <<a href="mailto:atzannes@illinois.edu" target="_blank">atzannes@illinois.edu</a>> wrote:<o:p></o:p></p>
<p class="MsoNormal">Hi all,<br>
I am interesting in fixing this bug, unless someone is already working on it, but I may need some help as I am not familiar with the parser side of the Frontend in clang. Does anyone have any suggestions or advice on my question below?<br>
<br>
Thanks in advance<br>
Alex<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
<br>
On 05/30/2013 11:35 PM, Alexandros Tzannes wrote:<o:p></o:p></p>
<p class="MsoNormal">Ok I (mis)filed a bug on this :) Thanks for refiling it.<br>
<br>
Now, if I were to try and fix this bug, where would I start? More specifically, is getTypeSourceInfo() supposed to return null for implicit function declarations? Probably not, right?<br>
<br>
On 05/29/2013 07:20 PM, Jordan Rose wrote:<o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">Sounds like a mistake—there are plenty of legitimate reasons to traverse the params of an implicit function. Please file a bug at
<a href="http://llvm.org/bugs/" target="_blank">http://llvm.org/bugs/</a>.<br>
<br>
Jordan<br>
<br>
<br>
On May 29, 2013, at 9:39 , Alexandros Tzannes <<a href="mailto:atzannes@illinois.edu" target="_blank">atzannes@illinois.edu</a>> wrote:<o:p></o:p></p>
<p class="MsoNormal">Hi,<br>
I'm writing a checker that needs to visit and understand implicit code (among other things).<br>
<br>
Note: All three "should" functions of my visitor return true, though I'm not sure this matters in this specific case (keep reading).<br>
  bool shouldVisitTemplateInstantiations() const { return true; }<br>
  bool shouldVisitImplicitCode() const { return true; }<br>
  bool shouldWalkTypesOfTypeLocs() const { return true; }<br>
<br>
<br>
In the code below the operator= is implicit (see commented out code)<br>
<br>
class Data {<br>
public:<br>
  int x;<br>
  int y;<br>
<br>
//inline Data &operator=(const Data &D) noexcept {<br>
//  this->x = D.x;<br>
//  this->y = D.y;<br>
//  return *this;<br>
//}<br>
<br>
};<br>
<br>
void copy(Data in, Data out) {<br>
  out = in;<br>
}<br>
<br>
I'm visiting the code using the RecursiveASTVisitor and my problem is that the parameter of the implicit function is not visited because getTypeSourceInfo() returns null on line 1739 of RecursiveASTVisitor.h<br>
<br>
-- RecursiveASTVisitor.h:lines 1735-1741 ----------------------------<br>
<br>
  // Visit the function type itself, which can be either<br>
  // FunctionNoProtoType or FunctionProtoType, or a typedef.  This<br>
  // also covers the return type and the function parameters,<br>
  // including exception specifications.<br>
  if (TypeSourceInfo *TSI = D->getTypeSourceInfo()) {<br>
    TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));<br>
  }<br>
<br>
---------------------------------------------------------------------<br>
<br>
Nevertheless, dumping the AST node for the CXXMethod (operator=) reveals that a nameless parameter is properly created.<br>
<br>
Is this behavior (of not visiting the parameters of an implicit function) by design, or a corner case that slipped through the cracks? Any advice on how to visit the parameters of implicit functions with the RecursiveASTVisitor?<br>
<br>
Cheers!<br>
Alex<br>
_______________________________________________<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><o:p></o:p></p>
<p class="MsoNormal"><br>
_______________________________________________<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><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<p class="MsoNormal"><span style="color:#888888">-- <br>
"Under the Illinois Freedom of Information Act (FOIA), any written<br>
communication to or from University employees regarding University<br>
business is a public record and may be subject to public disclosure."</span><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
<br>
_______________________________________________<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><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>