<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: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;}
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;}
--></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">Thank you for the review. Landed as r165082.<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">I’ll tweak the SourceLocation in next patch. It fails some attribute tests (generate a slightly different diagnostic if using the SourceLocation()).
<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">Thanks!<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""> metafoo@gmail.com [mailto:metafoo@gmail.com]
<b>On Behalf Of </b>Richard Smith<br>
<b>Sent:</b> Tuesday, October 02, 2012 5:40 PM<br>
<b>To:</b> Michael Han; cfe commits<br>
<b>Subject:</b> Re: [Patch] C++11 attribute parsing<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Tue, Oct 2, 2012 at 4:23 PM, Michael Han <<a href="mailto:Michael.Han@autodesk.com" target="_blank">Michael.Han@autodesk.com</a>> wrote:<o:p></o:p></p>
</div>
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">Hi,<br>
<br>
Following the feedback from Richard [1], here is the updated patch that's trying to improve clang support of C++11 attribute. Thanks!<o:p></o:p></p>
</blockquote>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The patch looks good, just a few minor nits then feel free to commit.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">> +++ lib/Parse/ParseDeclCXX.cpp (working copy)<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">> @@ -2963,46 +2978,38 @@<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">> [...]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> +    // parse attribute arguments<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Please capitalize comments, per <a href="http://llvm.org/docs/CodingStandards.html#commenting" target="_blank">http://llvm.org/docs/CodingStandards.html#commenting</a><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">> +++ lib/Parse/ParseDecl.cpp (working copy)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> @@ -154,7 +154,8 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>            Eof.setLocation(Tok.getLocation());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>            LA->Toks.push_back(Eof);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>          } else {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> -          ParseGNUAttributeArgs(AttrName, AttrNameLoc, attrs, endLoc);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> +          ParseGNUAttributeArgs(AttrName, AttrNameLoc, attrs, endLoc,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> +                                0, AttrNameLoc, AttributeList::AS_GNU);<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This should be SourceLocation(), rather than AttrNameLoc, since there isn't a scope token (I see that you were preserving the existing behavior, but we may as well fix this). Likewise in the other two calls without a scope token. If something
 is relying on the source location being valid here, we'll need to fix it to not do so (feel free to defer this tweak in that case).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">> @@ -173,11 +174,15 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>  }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>  <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>  <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> -/// Parse the arguments to a parameterized GNU attribute<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> +/// Parse the arguments to a parameterized GNU attribute or<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> +/// a C++ 11 attribute in "gnu" namespace.<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">C++11 is usually written without the space.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">> +++ test/Parser/cxx0x-attributes.cpp (working copy)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> @@ -4,7 +4,7 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>  namespace std {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>    typedef decltype(sizeof(int)) size_t;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">>  <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> -  // libc++'s implementation<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">> +  // libc++'s implementation <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">An extra tab has appeared at the end of this line.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>