[www-releases] r225843 - Add documentation for 3.5.1

Tom Stellard thomas.stellard at amd.com
Tue Jan 13 14:55:45 PST 2015


Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/ParseDecl_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/ParseDecl_8cpp_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/ParseDecl_8cpp_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/ParseDecl_8cpp_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,5895 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="clang,LLVM,Low Level Virtual Machine,C,C++,doxygen,API,frontend,documentation"/>
+<meta name="description" content="C++ source code API documentation for clang."/>
+<title>clang: ParseDecl.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">clang API Documentation</p>
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void
 (0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(11)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(12)"><span class="SelectionMark"> </span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_f65986501076cc710d4b9355ae3fe06d.html">clang</a></li><li class="navelem"><a class="el" href="dir_87e2a7550f83bd8cbfc92736891468fc.html">lib</a></li><li class="navelem"><a class="el" href="dir_58f62bc003e869f0dc8400deafe0ffa1.html">Parse</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ParseDecl.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="ParseDecl_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">//===--- ParseDecl.cpp - Declaration Parsing ------------------------------===//</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">//                     The LLVM Compiler Infrastructure</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">//  This file implements the Declaration portions of the Parser interfaces.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="preprocessor">#include "<a class="code" href="Parse_2Parser_8h.html">clang/Parse/Parser.h</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor">#include "<a class="code" href="RAIIObjectsForParser_8h.html">RAIIObjectsForParser.h</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor">#include "<a class="code" href="DeclTemplate_8h.html" title="Defines the C++ template declaration subclasses.">clang/AST/DeclTemplate.h</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "<a class="code" href="AddressSpaces_8h.html" title="Provides definitions for the various language-specific address spaces.">clang/Basic/AddressSpaces.h</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "<a class="code" href="CharInfo_8h.html">clang/Basic/CharInfo.h</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include "<a class="code" href="OpenCL_8h.html" title="Defines some OpenCL-specific enums.">clang/Basic/OpenCL.h</a>"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "<a class="code" href="ParseDiagnostic_8h.html">clang/Parse/ParseDiagnostic.h</a>"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "<a class="code" href="Lookup_8h.html">clang/Sema/Lookup.h</a>"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include "<a class="code" href="ParsedTemplate_8h.html">clang/Sema/ParsedTemplate.h</a>"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "<a class="code" href="PrettyDeclStackTrace_8h.html">clang/Sema/PrettyDeclStackTrace.h</a>"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "<a class="code" href="Scope_8h.html">clang/Sema/Scope.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "llvm/ADT/SmallSet.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "llvm/ADT/SmallString.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "llvm/ADT/StringSwitch.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="keyword">using namespace </span>clang;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">// C99 6.7: Declarations.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/// ParseTypeName</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">///       type-name: [C99 6.7.6]</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">///         specifier-qualifier-list abstract-declarator[opt]</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/// Called type-id in C++.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classclang_1_1Parser.html#aa7137dd627971c6ecad56fb67a1c1179">   39</a></span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">TypeResult</a> <a class="code" href="classclang_1_1Parser.html#aa7137dd627971c6ecad56fb67a1c1179">Parser::ParseTypeName</a>(<a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> *Range,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>                                  <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156">Declarator::TheContext</a> <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>                                  <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988f" title="A C++ access specifier (public, private, protected), plus the special value "none" which means differ...">AccessSpecifier</a> AS,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                                  <a class="code" href="classclang_1_1Decl.html">Decl</a> **OwnedType,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                                  <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> *Attrs) {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   DeclSpecContext DSC = getDeclSpecContextFromDeclaratorContext(Context);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordflow">if</span> (DSC == DSC_normal)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     DSC = DSC_type_specifier;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="comment">// Parse the common declaration-specifiers piece.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> DS(AttrFactory);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">if</span> (Attrs)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#a3d0502211a926f6af922b805ce0f1e3c" title="Concatenates two attribute lists.">addAttributes</a>(Attrs-><a class="code" href="classclang_1_1ParsedAttributes.html#a6a91d21507f031359225804d26671da5">getList</a>());</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   ParseSpecifierQualifierList(DS, AS, DSC);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordflow">if</span> (OwnedType)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     *OwnedType = DS.<a class="code" href="classclang_1_1DeclSpec.html#a4bbe84184e22b050581f44e24c1a022d">isTypeSpecOwned</a>() ? DS.<a class="code" href="classclang_1_1DeclSpec.html#ae37ea2d7ac65d48bd083cac962000d82">getRepAsDecl</a>() : 0;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="comment">// Parse the abstract-declarator, if present.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> DeclaratorInfo(DS, Context);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   ParseDeclarator(DeclaratorInfo);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">if</span> (Range)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     *Range = DeclaratorInfo.<a class="code" href="classclang_1_1Declarator.html#ac26653ad54d1663d8f1c263f726aabc3" title="Get the source range that spans this declarator.">getSourceRange</a>();</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">if</span> (DeclaratorInfo.<a class="code" href="classclang_1_1Declarator.html#acf30c6365eec56c5d3d4ec7266d9a6c9">isInvalidType</a>())</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">return</span> Actions.<a class="code" href="classclang_1_1Sema.html#a33d831649a84285baf9020d20bae3187">ActOnTypeName</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), DeclaratorInfo);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/// isAttributeLateParsed - Return true if the attribute has arguments that</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/// require late parsing.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#a29adf3f526bd3857748638ee07f2465b">   71</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ParseDecl_8cpp.html#a29adf3f526bd3857748638ee07f2465b">isAttributeLateParsed</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &II) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordflow">return</span> llvm::StringSwitch<bool>(II.<a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>())</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> #include <span class="stringliteral">"clang/Parse/AttrLateParsed.inc"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         .Default(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/// ParseGNUAttributes - Parse a non-empty attributes list.</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/// [GNU] attributes:</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">///         attribute</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">///         attributes attribute</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/// [GNU]  attribute:</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">///          '__attribute__' '(' '(' attribute-list ')' ')'</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/// [GNU]  attribute-list:</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">///          attrib</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">///          attribute_list ',' attrib</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/// [GNU]  attrib:</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">///          empty</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">///          attrib-name</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">///          attrib-name '(' identifier ')'</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">///          attrib-name '(' identifier ',' nonempty-expr-list ')'</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">///          attrib-name '(' argument-expression-list [C99 6.5.2] ')'</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/// [GNU]  attrib-name:</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">///          identifier</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">///          typespec</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">///          typequal</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">///          storageclass</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">/// Whether an attribute takes an 'identifier' is determined by the</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/// attrib-name. GCC's behavior here is not worth imitating:</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">///  * In C mode, if the attribute argument list starts with an identifier</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">///    followed by a ',' or an ')', and the identifier doesn't resolve to</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">///    a type, it is parsed as an identifier. If the attribute actually</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">///    wanted an expression, it's out of luck (but it turns out that no</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">///    attributes work that way, because C constant expressions are very</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">///    limited).</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">///  * In C++ mode, if the attribute argument list starts with an identifier,</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">///    and the attribute *wants* an identifier, it is parsed as an identifier.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">///    At block scope, any additional tokens between the identifier and the</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">///    ',' or ')' are ignored, otherwise they produce a parse error.</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">/// We follow the C++ model, but don't allow junk after the identifier.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseGNUAttributes(<a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &attrs,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                 <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *endLoc,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                 LateParsedAttrList *LateAttrs) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___attribute) && <span class="stringliteral">"Not a GNU attribute list!"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___attribute)) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">if</span> (ExpectAndConsume(tok::l_paren, diag::err_expected_lparen_after,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                          <span class="stringliteral">"attribute"</span>)) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>); <span class="comment">// skip until ) or ;</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">if</span> (ExpectAndConsume(tok::l_paren, diag::err_expected_lparen_after, <span class="stringliteral">"("</span>)) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>); <span class="comment">// skip until ) or ;</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">// Parse the attribute-list. e.g. __attribute__(( weak, alias("__f") ))</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) || isDeclarationSpecifier() ||</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>            Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma)) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma)) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="comment">// allows for empty/non-empty attributes. ((__vector_size__(16),,,,))</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       <span class="comment">// we have an identifier or declaration specifier (const, int, etc.)</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren)) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>         <span class="comment">// handle "parameterized" attributes</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         <span class="keywordflow">if</span> (LateAttrs && <a class="code" href="ParseDecl_8cpp.html#a29adf3f526bd3857748638ee07f2465b">isAttributeLateParsed</a>(*AttrName)) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>           LateParsedAttribute *LA =</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>             <span class="keyword">new</span> LateParsedAttribute(<span class="keyword">this</span>, *AttrName, AttrNameLoc);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>           LateAttrs->push_back(LA);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>           <span class="comment">// Attributes in a class are parsed at the end of the class, along</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>           <span class="comment">// with other late-parsed declarations.</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>           <span class="keywordflow">if</span> (!ClassStack.empty() && !LateAttrs->parseSoon())</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>             getCurrentClass().LateParsedDeclarations.push_back(LA);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           <span class="comment">// consume everything up to and including the matching right parens</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           ConsumeAndStoreUntil(tok::r_paren, LA->Toks, <span class="keyword">true</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           <a class="code" href="classclang_1_1Token.html">Token</a> Eof;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           Eof.<a class="code" href="classclang_1_1Token.html#ae1e49685acde6208c1c83f38540832c1" title="Reset all flags to cleared.">startToken</a>();</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           Eof.<a class="code" href="classclang_1_1Token.html#ab52b4059e1b2e648c78b7c326190d2ce">setLocation</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           LA->Toks.push_back(Eof);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           ParseGNUAttributeArgs(AttrName, AttrNameLoc, attrs, endLoc,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                                 0, <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(), <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, 0, 0,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                      <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keywordflow">if</span> (ExpectAndConsume(tok::r_paren, diag::err_expected_rparen))</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">if</span> (ExpectAndConsume(tok::r_paren, diag::err_expected_rparen))</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">if</span> (endLoc)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>       *endLoc = Loc;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment"></span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">/// \brief Normalizes an attribute name by dropping prefixed and suffixed __.</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#a613f210cd1a0e4444fc1f4d1e1418984">  185</a></span> <span class="comment"></span><span class="keyword">static</span> StringRef <a class="code" href="ParseDecl_8cpp.html#a613f210cd1a0e4444fc1f4d1e1418984" title="Normalizes an attribute name by dropping prefixed and suffixed __.">normalizeAttrName</a>(StringRef Name) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">if</span> (Name.size() >= 4 && Name.startswith(<span class="stringliteral">"__"</span>) && Name.endswith(<span class="stringliteral">"__"</span>))</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     Name = Name.drop_front(2).drop_back(2);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordflow">return</span> Name;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment"></span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/// \brief Determine whether the given attribute has an identifier argument.</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#a430653c880cc2c980448ac94c84e13ce">  192</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ParseDecl_8cpp.html#a430653c880cc2c980448ac94c84e13ce" title="Determine whether the given attribute has an identifier argument.">attributeHasIdentifierArg</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &II) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">return</span> llvm::StringSwitch<bool>(<a class="code" href="ParseDecl_8cpp.html#a613f210cd1a0e4444fc1f4d1e1418984" title="Normalizes an attribute name by dropping prefixed and suffixed __.">normalizeAttrName</a>(II.<a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>()))</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor">#include "clang/Parse/AttrIdentifierArg.inc"</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor"></span>           .Default(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">/// \brief Determine whether the given attribute parses a type argument.</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#ae43b7466f25813e5b4f2c5fd0929fb8d">  199</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ParseDecl_8cpp.html#ae43b7466f25813e5b4f2c5fd0929fb8d" title="Determine whether the given attribute parses a type argument.">attributeIsTypeArgAttr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &II) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   <span class="keywordflow">return</span> llvm::StringSwitch<bool>(<a class="code" href="ParseDecl_8cpp.html#a613f210cd1a0e4444fc1f4d1e1418984" title="Normalizes an attribute name by dropping prefixed and suffixed __.">normalizeAttrName</a>(II.<a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>()))</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">#include "clang/Parse/AttrTypeArg.inc"</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor"></span>           .Default(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <a class="code" href="structclang_1_1IdentifierLoc.html" title="Wraps an identifier and optional source location for the identifier.">IdentifierLoc</a> *Parser::ParseIdentifierLoc() {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) && <span class="stringliteral">"expected an identifier"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <a class="code" href="structclang_1_1IdentifierLoc.html" title="Wraps an identifier and optional source location for the identifier.">IdentifierLoc</a> *IL = <a class="code" href="structclang_1_1IdentifierLoc.html#a892a078bd75776549e681860755ef32f">IdentifierLoc::create</a>(Actions.<a class="code" href="classclang_1_1Sema.html#a3ccddacb1f4f71b084296175cc9e5b0e">Context</a>,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                                             Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(),</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                                             Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>());</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">return</span> IL;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="keywordtype">void</span> Parser::ParseAttributeWithTypeArg(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &AttrName,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                                        <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                                        <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                        <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *EndLoc) {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> Parens(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   Parens.consumeOpen();</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <a class="code" href="classclang_1_1ActionResult.html">TypeResult</a> T;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::r_paren))</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     T = <a class="code" href="classclang_1_1Parser.html#aa7137dd627971c6ecad56fb67a1c1179">ParseTypeName</a>();</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordflow">if</span> (Parens.consumeClose())</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="keywordflow">if</span> (T.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordflow">if</span> (T.<a class="code" href="classclang_1_1ActionResult.html#ae70d0a2fa83269f71f1634cb9e0dc3d6">isUsable</a>())</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#ade82a1c28a072e8b74d24656244b187e" title="Add an attribute with a single type argument.">addNewTypeAttr</a>(&AttrName,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                          <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(AttrNameLoc, Parens.getCloseLocation()), 0,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                          AttrNameLoc, T.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(&AttrName, <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(AttrNameLoc, Parens.getCloseLocation()),</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                  0, AttrNameLoc, 0, 0, <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment"></span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">/// Parse the arguments to a parameterized GNU attribute or</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/// a C++11 attribute in "gnu" namespace.</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseGNUAttributeArgs(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                                    <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                                    <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                                    <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *EndLoc,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                                    <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *ScopeName,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                                    <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> ScopeLoc,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                                    <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374" title="The style used to specify an attribute.">AttributeList::Syntax</a> Syntax) {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren) && <span class="stringliteral">"Attribute arg list not starting with '('"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <a class="code" href="classclang_1_1AttributeList.html#abfb7b1d3d2044394d2733eeba84cf8a2">AttributeList::Kind</a> AttrKind =</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       <a class="code" href="classclang_1_1AttributeList.html#a4e563bd986f1003c1e51398b1f7aadd9">AttributeList::getKind</a>(AttrName, ScopeName, Syntax);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="comment">// Availability attributes have their own grammar.</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="comment">// FIXME: All these cases fail to pass in the syntax and scope, and might be</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="comment">// written as C++11 gnu:: attributes.</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordflow">if</span> (AttrKind == AttributeList::AT_Availability) {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     ParseAvailabilityAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="comment">// Thread safety attributes are parsed in an unevaluated context.</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="comment">// FIXME: Share the bulk of the parsing code here and just pull out</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="comment">// the unevaluated context.</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordflow">if</span> (IsThreadSafetyAttribute(AttrName-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>())) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     ParseThreadSafetyAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="comment">// Type safety attributes have their own grammar.</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">if</span> (AttrKind == AttributeList::AT_TypeTagForDatatype) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     ParseTypeTagForDatatypeAttribute(*AttrName, AttrNameLoc, Attrs, EndLoc);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="comment">// Some attributes expect solely a type parameter.</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordflow">if</span> (<a class="code" href="ParseDecl_8cpp.html#ae43b7466f25813e5b4f2c5fd0929fb8d" title="Determine whether the given attribute parses a type argument.">attributeIsTypeArgAttr</a>(*AttrName)) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     ParseAttributeWithTypeArg(*AttrName, AttrNameLoc, Attrs, EndLoc);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="comment">// Ignore the left paren location for now.</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   ConsumeParen();</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <a class="code" href="classllvm_1_1SmallVector.html">ArgsVector</a> ArgExprs;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     <span class="comment">// If this attribute wants an 'identifier' argument, make it so.</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordtype">bool</span> IsIdentifierArg = <a class="code" href="ParseDecl_8cpp.html#a430653c880cc2c980448ac94c84e13ce" title="Determine whether the given attribute has an identifier argument.">attributeHasIdentifierArg</a>(*AttrName);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="comment">// If we don't know how to parse this attribute, but this is the only</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="comment">// token in this argument, assume it's meant to be an identifier.</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="keywordflow">if</span> (AttrKind == <a class="code" href="classclang_1_1AttributeList.html#abfb7b1d3d2044394d2733eeba84cf8a2a5e8d2e994fe496b67bb2968257a7c308">AttributeList::UnknownAttribute</a> ||</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         AttrKind == <a class="code" href="classclang_1_1AttributeList.html#abfb7b1d3d2044394d2733eeba84cf8a2ad890afb2a2da2d3b37d755375ae0736a">AttributeList::IgnoredAttribute</a>) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1Token.html">Token</a> &Next = <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>();</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>       IsIdentifierArg = Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren) || Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">if</span> (IsIdentifierArg)</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       ArgExprs.push_back(ParseIdentifierLoc());</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="keywordflow">if</span> (!ArgExprs.empty() ? Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma) : Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::r_paren)) {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="comment">// Eat the comma.</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordflow">if</span> (!ArgExprs.empty())</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">// Parse the non-empty comma-separated list of expressions.</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ArgExpr(<a class="code" href="classclang_1_1Parser.html#aa1ddd7e29d6cee82c3df71c30c194891" title="Parse an expr that doesn't include (top-level) commas.">ParseAssignmentExpression</a>());</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       <span class="keywordflow">if</span> (ArgExpr.isInvalid()) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       ArgExprs.push_back(ArgExpr.release());</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// Eat the comma, move to the next argument</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> RParen = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="keywordflow">if</span> (!ExpectAndConsume(tok::r_paren, diag::err_expected_rparen)) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrLoc = ScopeLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>() ? ScopeLoc : AttrNameLoc;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(AttrLoc, RParen), ScopeName, ScopeLoc,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                  ArgExprs.data(), ArgExprs.size(), Syntax);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment"></span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">/// \brief Parses a single argument for a declspec, including the</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">/// surrounding parens.</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseMicrosoftDeclSpecWithSingleArg(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                                                  <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                                                  <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs)</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   <span class="keywordflow">if</span> (T.expectAndConsume(diag::err_expected_lparen_after,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                          AttrName-><a class="code" href="classclang_1_1IdentifierInfo.html#ae69779507a5e059eecf91dcfcee5d958" title="Return the beginning of the actual null-terminated string for this identifier.">getNameStart</a>(), tok::r_paren))</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ArgExpr(<a class="code" href="classclang_1_1Parser.html#a6a9c7be0b89ac30ec2420874d4ff6e3f">ParseConstantExpression</a>());</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   <span class="keywordflow">if</span> (ArgExpr.isInvalid()) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     T.skipToEnd();</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   <a class="code" href="namespaceclang.html#aef421691d7b5e01971c6bf88afc6a969" title="A union of the various pointer types that can be passed to an AttributeList as an argument...">ArgsUnion</a> ExprList = ArgExpr.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, &ExprList, 1,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a78bf3b581d93a7e3f343da39aef1c2f7" title="__declspec(...)">AttributeList::AS_Declspec</a>);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   T.consumeClose();</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment"></span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">/// \brief Determines whether a declspec is a "simple" one requiring no</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">/// arguments.</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::IsSimpleMicrosoftDeclSpec(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Ident) {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   <span class="keywordflow">return</span> llvm::StringSwitch<bool>(Ident-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>())</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     .Case(<span class="stringliteral">"dllimport"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     .Case(<span class="stringliteral">"dllexport"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     .Case(<span class="stringliteral">"noreturn"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     .Case(<span class="stringliteral">"nothrow"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     .Case(<span class="stringliteral">"noinline"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     .Case(<span class="stringliteral">"naked"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     .Case(<span class="stringliteral">"appdomain"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     .Case(<span class="stringliteral">"process"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     .Case(<span class="stringliteral">"jitintrinsic"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     .Case(<span class="stringliteral">"noalias"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     .Case(<span class="stringliteral">"restrict"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     .Case(<span class="stringliteral">"novtable"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     .Case(<span class="stringliteral">"selectany"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     .Case(<span class="stringliteral">"thread"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     .Case(<span class="stringliteral">"safebuffers"</span>, <span class="keyword">true</span> )</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     .Default(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment"></span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">/// \brief Attempts to parse a declspec which is not simple (one that takes</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">/// parameters).  Will return false if we properly handled the declspec, or</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">/// true if it is an unknown declspec.</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseComplexMicrosoftDeclSpec(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Ident,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                                            <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                            <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="comment">// Try to handle the easy case first -- these declspecs all take a single</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="comment">// parameter as their argument.</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <span class="keywordflow">if</span> (llvm::StringSwitch<bool>(Ident-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>())</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       .Case(<span class="stringliteral">"uuid"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       .Case(<span class="stringliteral">"align"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>       .Case(<span class="stringliteral">"allocate"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       .Default(<span class="keyword">false</span>)) {</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     ParseMicrosoftDeclSpecWithSingleArg(Ident, Loc, Attrs);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Ident-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>() == <span class="stringliteral">"deprecated"</span>) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="comment">// The deprecated declspec has an optional single argument, so we will</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="comment">// check for a l-paren to decide whether we should parse an argument or</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="comment">// not.</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>() == tok::l_paren)</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>       ParseMicrosoftDeclSpecWithSingleArg(Ident, Loc, Attrs);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>       Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(Ident, Loc, 0, Loc, 0, 0, <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a78bf3b581d93a7e3f343da39aef1c2f7" title="__declspec(...)">AttributeList::AS_Declspec</a>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Ident-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>() == <span class="stringliteral">"property"</span>) {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="comment">// The property declspec is more complex in that it can take one or two</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="comment">// assignment expressions as a parameter, but the lhs of the assignment</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     <span class="comment">// must be named get or put.</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::l_paren)) {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_expected_lparen_after)</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         << Ident-><a class="code" href="classclang_1_1IdentifierInfo.html#ae69779507a5e059eecf91dcfcee5d958" title="Return the beginning of the actual null-terminated string for this identifier.">getNameStart</a>();</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     T.expectAndConsume(diag::err_expected_lparen_after,</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                        Ident-><a class="code" href="classclang_1_1IdentifierInfo.html#ae69779507a5e059eecf91dcfcee5d958" title="Return the beginning of the actual null-terminated string for this identifier.">getNameStart</a>(), tok::r_paren);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keyword">enum</span> AccessorKind {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>       AK_Invalid = -1,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>       AK_Put = 0, AK_Get = 1 <span class="comment">// indices into AccessorNames</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     };</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AccessorNames[] = { 0, 0 };</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="keywordtype">bool</span> HasInvalidAccessor = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="comment">// Parse the accessor specifications.</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>       <span class="comment">// Stop if this doesn't look like an accessor spec.</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="comment">// If the user wrote a completely empty list, use a special diagnostic.</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren) && !HasInvalidAccessor &&</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>             AccessorNames[AK_Put] == 0 && AccessorNames[AK_Get] == 0) {</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::err_ms_property_no_getter_or_putter);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_ms_property_unknown_accessor);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>       }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>       AccessorKind <a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a>;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> KindLoc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       StringRef KindStr = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>()-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>();</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>       <span class="keywordflow">if</span> (KindStr == <span class="stringliteral">"get"</span>) {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         Kind = AK_Get;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (KindStr == <span class="stringliteral">"put"</span>) {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         Kind = AK_Put;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>       <span class="comment">// Recover from the common mistake of using 'set' instead of 'put'.</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (KindStr == <span class="stringliteral">"set"</span>) {</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KindLoc, diag::err_ms_property_has_set_accessor)</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>           << <a class="code" href="classclang_1_1FixItHint.html#a90e122cd34933ba821718385fddfae7a" title="Create a code modification hint that replaces the given source range with the given code string...">FixItHint::CreateReplacement</a>(KindLoc, <span class="stringliteral">"put"</span>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         Kind = AK_Put;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>       <span class="comment">// Handle the mistake of forgetting the accessor kind by skipping</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>       <span class="comment">// this accessor.</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::comma) || <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::r_paren)) {</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KindLoc, diag::err_ms_property_missing_accessor_kind);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>         HasInvalidAccessor = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         <span class="keywordflow">goto</span> next_property_accessor;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       <span class="comment">// Otherwise, complain about the unknown accessor kind.</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KindLoc, diag::err_ms_property_unknown_accessor);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         HasInvalidAccessor = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         Kind = AK_Invalid;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>         <span class="comment">// Try to keep parsing unless it doesn't look like an accessor spec.</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>         <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::equal)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       <span class="comment">// Consume the identifier.</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       <span class="comment">// Consume the '='.</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::equal)) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_ms_property_expected_equal)</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>           << KindStr;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>       }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>       <span class="comment">// Expect the method name.</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>       <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_ms_property_expected_accessor_name);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>       }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>       <span class="keywordflow">if</span> (Kind == AK_Invalid) {</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         <span class="comment">// Just drop invalid accessors.</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (AccessorNames[Kind] != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         <span class="comment">// Complain about the repeated accessor, ignore it, and keep parsing.</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KindLoc, diag::err_ms_property_duplicate_accessor) << KindStr;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>         AccessorNames[<a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a>] = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>       }</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     next_property_accessor:</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       <span class="comment">// Keep processing accessors until we run out.</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma)) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         ConsumeAnyToken();</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       <span class="comment">// If we run into the ')', stop without consuming it.</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren)) {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_ms_property_expected_comma_or_rparen);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>       }</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="comment">// Only add the property attribute if it was well-formed.</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordflow">if</span> (!HasInvalidAccessor) {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>       Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#a091bf3bf1cdc17e160684be363be022e" title="Add microsoft __delspec(property) attribute.">addNewPropertyAttr</a>(Ident, Loc, 0, <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(),</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                                AccessorNames[AK_Get], AccessorNames[AK_Put],</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                                <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a78bf3b581d93a7e3f343da39aef1c2f7" title="__declspec(...)">AttributeList::AS_Declspec</a>);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     }</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     T.skipToEnd();</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="comment">// We don't recognize this as a valid declspec, but instead of creating the</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     <span class="comment">// attribute and allowing sema to warn about it, we will warn here instead.</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     <span class="comment">// This is because some attributes have multiple spellings, but we need to</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <span class="comment">// disallow that for declspecs (such as align vs aligned).  If we made the</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     <span class="comment">// attribute, we'd have to split the valid declspec spelling logic into</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="comment">// both locations.</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::warn_ms_declspec_unknown) << Ident;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="comment">// If there's an open paren, we should eat the open and close parens under</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="comment">// the assumption that this unknown declspec has parameters.</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="keywordflow">if</span> (!T.consumeOpen())</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>       T.skipToEnd();</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="comment"></span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="comment">/// [MS] decl-specifier:</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="comment">///             __declspec ( extended-decl-modifier-seq )</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="comment">/// [MS] extended-decl-modifier-seq:</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">///             extended-decl-modifier[opt]</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="comment">///             extended-decl-modifier extended-decl-modifier-seq</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseMicrosoftDeclSpec(<a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs) {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___declspec) && <span class="stringliteral">"Not a declspec!"</span>);</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   <span class="keywordflow">if</span> (T.expectAndConsume(diag::err_expected_lparen_after, <span class="stringliteral">"__declspec"</span>,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                          tok::r_paren))</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   <span class="comment">// An empty declspec is perfectly legal and should not warn.  Additionally,</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   <span class="comment">// you can specify multiple attributes per declspec.</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>() != tok::r_paren) {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <span class="comment">// We expect either a well-known identifier or a generic string.  Anything</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     <span class="comment">// else is a malformed declspec.</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     <span class="keywordtype">bool</span> IsString = Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>() == tok::string_literal ? <span class="keyword">true</span> : <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     <span class="keywordflow">if</span> (!IsString && Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>() != tok::identifier &&</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>         Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>() != tok::kw_restrict) {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_ms_declspec_type);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>       T.skipToEnd();</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <span class="keywordflow">if</span> (IsString) {</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <a class="code" href="classllvm_1_1SmallString.html">SmallString<8></a> StrBuffer;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>       <span class="keywordtype">bool</span> Invalid = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       StringRef Str = PP.<a class="code" href="classclang_1_1Preprocessor.html#a000147976c13c269dd82ef645fa3fe35">getSpelling</a>(Tok, StrBuffer, &Invalid);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       <span class="keywordflow">if</span> (Invalid) {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         T.skipToEnd();</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>       }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>       AttrName = PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(Str);</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>       AttrNameLoc = ConsumeStringToken();</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>       AttrName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>       AttrNameLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordflow">if</span> (IsString || IsSimpleMicrosoftDeclSpec(AttrName))</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>       <span class="comment">// If we have a generic string, we will allow it because there is no</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>       <span class="comment">// documented list of allowable string declspecs, but we know they exist</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>       <span class="comment">// (for instance, SAL declspecs in older versions of MSVC).</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>       <span class="comment">//</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>       <span class="comment">// Alternatively, if the identifier is a simple one, then it requires no</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>       <span class="comment">// arguments and can be turned into an attribute directly.</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, 0, 0,</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>                    <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a78bf3b581d93a7e3f343da39aef1c2f7" title="__declspec(...)">AttributeList::AS_Declspec</a>);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>       ParseComplexMicrosoftDeclSpec(AttrName, AttrNameLoc, Attrs);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   T.consumeClose();</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> }</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="keywordtype">void</span> Parser::ParseMicrosoftTypeAttributes(<a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &attrs) {</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="comment">// Treat these like attributes</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___fastcall) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___stdcall) ||</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>          Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___thiscall) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___cdecl)   ||</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>          Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___ptr64) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___w64) ||</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>          Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___ptr32) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___unaligned) ||</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>          Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___sptr) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___uptr)) {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, 0, 0,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                  <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374ae031ff8f56d481dfd27e5b656fa543d0" title="__ptr16, alignas(...), etc.">AttributeList::AS_Keyword</a>);</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> }</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="keywordtype">void</span> Parser::ParseBorlandTypeAttributes(<a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &attrs) {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="comment">// Treat these like attributes</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___pascal)) {</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, 0, 0,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                  <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374ae031ff8f56d481dfd27e5b656fa543d0" title="__ptr16, alignas(...), etc.">AttributeList::AS_Keyword</a>);</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="keywordtype">void</span> Parser::ParseOpenCLAttributes(<a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &attrs) {</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   <span class="comment">// Treat these like attributes</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___kernel)) {</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, 0, 0,</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                  <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374ae031ff8f56d481dfd27e5b656fa543d0" title="__ptr16, alignas(...), etc.">AttributeList::AS_Keyword</a>);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   }</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="keywordtype">void</span> Parser::ParseOpenCLQualifiers(<a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS) {</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   <span class="comment">// FIXME: The mapping from attribute spelling to semantics should be</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   <span class="comment">//        performed in Sema, not here.</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   <span class="keywordflow">switch</span>(Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     <span class="comment">// OpenCL qualifiers:</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     <span class="keywordflow">case</span> tok::kw___private:</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     <span class="keywordflow">case</span> tok::kw_private:</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"address_space"</span>), Loc, 0);</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="keywordflow">case</span> tok::kw___global:</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"address_space"</span>), Loc, <a class="code" href="namespaceclang_1_1LangAS.html#a78ee38b55acb7cc806cb61e6d2a9f960ae6e4b6b7e273c4bcc94b5c8e735dd76b">LangAS::opencl_global</a>);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordflow">case</span> tok::kw___local:</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"address_space"</span>), Loc, <a class="code" href="namespaceclang_1_1LangAS.html#a78ee38b55acb7cc806cb61e6d2a9f960a4071140e6be67e445aea16563c8598d7">LangAS::opencl_local</a>);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     <span class="keywordflow">case</span> tok::kw___constant:</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"address_space"</span>), Loc, <a class="code" href="namespaceclang_1_1LangAS.html#a78ee38b55acb7cc806cb61e6d2a9f960a550f6bebb117bdf4da90cc288cf5ddc8">LangAS::opencl_constant</a>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     <span class="keywordflow">case</span> tok::kw___read_only:</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"opencl_image_access"</span>), Loc, <a class="code" href="namespaceclang.html#a5733797978fc47a45addaa3bcbbe6051ab3b890c0796d006cddbe5d13714250c3">CLIA_read_only</a>);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="keywordflow">case</span> tok::kw___write_only:</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"opencl_image_access"</span>), Loc, <a class="code" href="namespaceclang.html#a5733797978fc47a45addaa3bcbbe6051a177bd47b475a9b748c3e240efca7bb0b">CLIA_write_only</a>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordflow">case</span> tok::kw___read_write:</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#a5029404f1c780aa0fd55d881194b0b89">addNewInteger</a>(</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a67eff5b9492fff49360d8000819a6719">getASTContext</a>(),</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>           PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"opencl_image_access"</span>), Loc, <a class="code" href="namespaceclang.html#a5733797978fc47a45addaa3bcbbe6051afc865a2d0a044c224f40211320ee548c">CLIA_read_write</a>);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   }</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="comment"></span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="comment">/// \brief Parse a version number.</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="comment">/// version:</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="comment">///   simple-integer</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> <span class="comment">///   simple-integer ',' simple-integer</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="comment">///   simple-integer ',' simple-integer ',' simple-integer</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment"></span><a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a> Parser::ParseVersionTuple(<a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> &Range) {</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   Range = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::numeric_constant)) {</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_version);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, tok::r_paren,</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>               <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea8a0938f86f63e2f013f91dd709f13d80" title="Stop at code completion.">StopAtCodeCompletion</a>);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   }</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   <span class="comment">// Parse the major (and possibly minor and subminor) versions, which</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   <span class="comment">// are stored in the numeric constant. We utilize a quirk of the</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   <span class="comment">// lexer, which is that it handles something like 1.2.3 as a single</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="comment">// numeric constant, rather than two separate tokens.</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<512></a> Buffer;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   Buffer.resize(Tok.<a class="code" href="classclang_1_1Token.html#ada56747093e2043afd6a497d1714332d">getLength</a>()+1);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *ThisTokBegin = &Buffer[0];</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   <span class="comment">// Get the spelling of the token, which eliminates trigraphs, etc.</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>   <span class="keywordtype">bool</span> Invalid = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   <span class="keywordtype">unsigned</span> ActualLength = PP.<a class="code" href="classclang_1_1Preprocessor.html#a000147976c13c269dd82ef645fa3fe35">getSpelling</a>(Tok, ThisTokBegin, &Invalid);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   <span class="keywordflow">if</span> (Invalid)</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   <span class="comment">// Parse the major version.</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="keywordtype">unsigned</span> AfterMajor = 0;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="keywordtype">unsigned</span> Major = 0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordflow">while</span> (AfterMajor < ActualLength && <a class="code" href="namespaceclang.html#a8e582a38f36d9c625d3e31bce653befe" title="Return true if this character is an ASCII digit: [0-9].">isDigit</a>(ThisTokBegin[AfterMajor])) {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     Major = Major * 10 + ThisTokBegin[AfterMajor] - <span class="charliteral">'0'</span>;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     ++AfterMajor;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="keywordflow">if</span> (AfterMajor == 0) {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_version);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, tok::r_paren,</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>               <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea8a0938f86f63e2f013f91dd709f13d80" title="Stop at code completion.">StopAtCodeCompletion</a>);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   }</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   <span class="keywordflow">if</span> (AfterMajor == ActualLength) {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="comment">// We only had a single version component.</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     <span class="keywordflow">if</span> (Major == 0) {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_zero_version);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     }</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>(Major);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   }</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   <span class="keywordflow">if</span> (ThisTokBegin[AfterMajor] != <span class="charliteral">'.'</span> || (AfterMajor + 1 == ActualLength)) {</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_version);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, tok::r_paren,</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>               <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea8a0938f86f63e2f013f91dd709f13d80" title="Stop at code completion.">StopAtCodeCompletion</a>);</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   }</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>   <span class="comment">// Parse the minor version.</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   <span class="keywordtype">unsigned</span> AfterMinor = AfterMajor + 1;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   <span class="keywordtype">unsigned</span> Minor = 0;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   <span class="keywordflow">while</span> (AfterMinor < ActualLength && <a class="code" href="namespaceclang.html#a8e582a38f36d9c625d3e31bce653befe" title="Return true if this character is an ASCII digit: [0-9].">isDigit</a>(ThisTokBegin[AfterMinor])) {</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     Minor = Minor * 10 + ThisTokBegin[AfterMinor] - <span class="charliteral">'0'</span>;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     ++AfterMinor;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   }</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   <span class="keywordflow">if</span> (AfterMinor == ActualLength) {</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     <span class="comment">// We had major.minor.</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordflow">if</span> (Major == 0 && Minor == 0) {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_zero_version);</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>(Major, Minor);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>   }</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>   <span class="comment">// If what follows is not a '.', we have a problem.</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>   <span class="keywordflow">if</span> (ThisTokBegin[AfterMinor] != <span class="charliteral">'.'</span>) {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_version);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, tok::r_paren,</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>               <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea8a0938f86f63e2f013f91dd709f13d80" title="Stop at code completion.">StopAtCodeCompletion</a>);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   }</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   <span class="comment">// Parse the subminor version.</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   <span class="keywordtype">unsigned</span> AfterSubminor = AfterMinor + 1;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>   <span class="keywordtype">unsigned</span> Subminor = 0;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>   <span class="keywordflow">while</span> (AfterSubminor < ActualLength && <a class="code" href="namespaceclang.html#a8e582a38f36d9c625d3e31bce653befe" title="Return true if this character is an ASCII digit: [0-9].">isDigit</a>(ThisTokBegin[AfterSubminor])) {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     Subminor = Subminor * 10 + ThisTokBegin[AfterSubminor] - <span class="charliteral">'0'</span>;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     ++AfterSubminor;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   <span class="keywordflow">if</span> (AfterSubminor != ActualLength) {</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_version);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, tok::r_paren,</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>               <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea8a0938f86f63e2f013f91dd709f13d80" title="Stop at code completion.">StopAtCodeCompletion</a>);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>();</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>   }</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a>(Major, Minor, Subminor);</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> }</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> <span class="comment"></span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> <span class="comment">/// \brief Parse the contents of the "availability" attribute.</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> <span class="comment">/// availability-attribute:</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="comment">///   'availability' '(' platform ',' version-arg-list, opt-message')'</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">/// platform:</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="comment">///   identifier</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="comment">/// version-arg-list:</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="comment">///   version-arg</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="comment">///   version-arg ',' version-arg-list</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="comment">/// version-arg:</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="comment">///   'introduced' '=' version</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="comment">///   'deprecated' '=' version</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="comment">///   'obsoleted' = version</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="comment">///   'unavailable'</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">/// opt-message:</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="comment">///   'message' '=' <string></span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseAvailabilityAttribute(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &Availability,</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>                                         <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AvailabilityLoc,</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>                                         <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &attrs,</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>                                         <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *endLoc) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   <span class="keyword">enum</span> { Introduced, Deprecated, Obsoleted, <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880a4e81c184ac3ad48a389cd4454c4a05bb">Unknown</a> };</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   <a class="code" href="structclang_1_1AvailabilityChange.html" title="Represents information about a change in availability for an entity, which is part of the encoding of...">AvailabilityChange</a> Changes[<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880a4e81c184ac3ad48a389cd4454c4a05bb">Unknown</a>];</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> MessageExpr;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   <span class="comment">// Opening '('.</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   <span class="keywordflow">if</span> (T.consumeOpen()) {</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_lparen);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   }</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   <span class="comment">// Parse the platform name,</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_availability_expected_platform);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   <a class="code" href="structclang_1_1IdentifierLoc.html" title="Wraps an identifier and optional source location for the identifier.">IdentifierLoc</a> *Platform = ParseIdentifierLoc();</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   <span class="comment">// Parse the ',' following the platform name.</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   <span class="keywordflow">if</span> (ExpectAndConsume(tok::comma, diag::err_expected_comma, <span class="stringliteral">""</span>, tok::r_paren))</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="comment">// If we haven't grabbed the pointers for the identifiers</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>   <span class="comment">// "introduced", "deprecated", and "obsoleted", do so now.</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>   <span class="keywordflow">if</span> (!Ident_introduced) {</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     Ident_introduced = PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"introduced"</span>);</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     Ident_deprecated = PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"deprecated"</span>);</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     Ident_obsoleted = PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"obsoleted"</span>);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     Ident_unavailable = PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"unavailable"</span>);</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     Ident_message = PP.<a class="code" href="classclang_1_1Preprocessor.html#acbacad0c69321bd63102c7697a95b67d">getIdentifierInfo</a>(<span class="stringliteral">"message"</span>);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   }</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>   <span class="comment">// Parse the set of introductions/deprecations/removals.</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> UnavailableLoc;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_availability_expected_change);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     }</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Keyword = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> KeywordLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     <span class="keywordflow">if</span> (Keyword == Ident_unavailable) {</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>       <span class="keywordflow">if</span> (UnavailableLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) {</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KeywordLoc, diag::err_availability_redundant)</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>           << Keyword << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(UnavailableLoc);</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>       }</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>       UnavailableLoc = KeywordLoc;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::equal)) {</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_equal_after)</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>         << Keyword;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     <span class="keywordflow">if</span> (Keyword == Ident_message) {</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::string_literal)) { <span class="comment">// Also reject wide string literals.</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_string_literal)</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>           << <span class="comment">/*Source='availability attribute'*/</span>2;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>       }</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>       MessageExpr = ParseStringLiteralExpression();</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     }</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> VersionRange;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     <a class="code" href="classclang_1_1VersionTuple.html" title="Represents a version number in the form major[.minor[.subminor]].">VersionTuple</a> Version = ParseVersionTuple(VersionRange);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordflow">if</span> (Version.<a class="code" href="classclang_1_1VersionTuple.html#aa7a2358d7b875464f151055a384d098b" title="Determine whether this version information is empty (e.g., all version components are zero)...">empty</a>()) {</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     }</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     <span class="keywordtype">unsigned</span> Index;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     <span class="keywordflow">if</span> (Keyword == Ident_introduced)</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>       Index = Introduced;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Keyword == Ident_deprecated)</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>       Index = Deprecated;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Keyword == Ident_obsoleted)</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>       Index = Obsoleted;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>       Index = <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880a4e81c184ac3ad48a389cd4454c4a05bb">Unknown</a>;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>     <span class="keywordflow">if</span> (Index < <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880a4e81c184ac3ad48a389cd4454c4a05bb">Unknown</a>) {</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>       <span class="keywordflow">if</span> (!Changes[Index].KeywordLoc.<a class="code" href="classclang_1_1SourceLocation.html#a1936fc09837ff8a195fa63e29f05796f">isInvalid</a>()) {</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KeywordLoc, diag::err_availability_redundant)</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>           << Keyword</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>           << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(Changes[Index].KeywordLoc,</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                          Changes[Index].VersionRange.<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>());</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>       }</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>       Changes[Index].<a class="code" href="structclang_1_1AvailabilityChange.html#a6e4f67663d3e5e2963eac048d7023100" title="The location of the keyword indicating the kind of change.">KeywordLoc</a> = KeywordLoc;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>       Changes[Index].<a class="code" href="structclang_1_1AvailabilityChange.html#a08876af43059ef0b231423e9a304d23d" title="The version number at which the change occurred.">Version</a> = Version;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>       Changes[Index].<a class="code" href="structclang_1_1AvailabilityChange.html#acf3abfcb38da7431f3bff4849ea6ff67" title="The source range covering the version number.">VersionRange</a> = VersionRange;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(KeywordLoc, diag::err_availability_unknown_change)</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>         << Keyword << VersionRange;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>     }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>   } <span class="keywordflow">while</span> (<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>   <span class="comment">// Closing ')'.</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>   <span class="keywordflow">if</span> (T.consumeClose())</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   <span class="keywordflow">if</span> (endLoc)</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     *endLoc = T.getCloseLocation();</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>   <span class="comment">// The 'unavailable' availability cannot be combined with any other</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   <span class="comment">// availability changes. Make sure that hasn't happened.</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>   <span class="keywordflow">if</span> (UnavailableLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) {</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     <span class="keywordtype">bool</span> Complained = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Index = Introduced; Index != <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880a4e81c184ac3ad48a389cd4454c4a05bb">Unknown</a>; ++Index) {</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>       <span class="keywordflow">if</span> (Changes[Index].KeywordLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) {</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>         <span class="keywordflow">if</span> (!Complained) {</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(UnavailableLoc, diag::warn_availability_and_unavailable)</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>             << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(Changes[Index].KeywordLoc,</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                            Changes[Index].VersionRange.<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>());</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>           Complained = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>         }</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>         <span class="comment">// Clear out the availability.</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>         Changes[Index] = <a class="code" href="structclang_1_1AvailabilityChange.html" title="Represents information about a change in availability for an entity, which is part of the encoding of...">AvailabilityChange</a>();</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>       }</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     }</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   }</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>   <span class="comment">// Record this attribute</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>   attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(&Availability,</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>                <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(AvailabilityLoc, T.getCloseLocation()),</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>                0, AvailabilityLoc,</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>                Platform,</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>                Changes[Introduced],</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                Changes[Deprecated],</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                Changes[Obsoleted],</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>                UnavailableLoc, MessageExpr.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>(),</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>                <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="comment">// Late Parsed Attributes:</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> <span class="comment">// See other examples of late parsing in lib/Parse/ParseCXXInlineMethods</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="keywordtype">void</span> Parser::LateParsedDeclaration::ParseLexedAttributes() {}</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> </div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> <span class="keywordtype">void</span> Parser::LateParsedClass::ParseLexedAttributes() {</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   Self->ParseLexedAttributes(*Class);</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> }</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="keywordtype">void</span> Parser::LateParsedAttribute::ParseLexedAttributes() {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>   Self->ParseLexedAttribute(*<span class="keyword">this</span>, <span class="keyword">true</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="comment"></span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="comment">/// Wrapper class which calls ParseLexedAttribute, after setting up the</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="comment">/// scope appropriately.</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseLexedAttributes(ParsingClass &Class) {</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>   <span class="comment">// Deal with templates</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>   <span class="comment">// FIXME: Test cases to make sure this does the right thing for templates.</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>   <span class="keywordtype">bool</span> HasTemplateScope = !Class.TopLevelClass && Class.TemplateScope;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>   ParseScope ClassTemplateScope(<span class="keyword">this</span>, <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a40ab45d2b9c9fca9a32b710f457d449a" title="This is a scope that corresponds to the template parameters of a C++ template. Template parameter sco...">Scope::TemplateParamScope</a>,</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>                                 HasTemplateScope);</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>   <span class="keywordflow">if</span> (HasTemplateScope)</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     Actions.<a class="code" href="classclang_1_1Sema.html#a253ab69b7d64567065d754abe72dae9a">ActOnReenterTemplateScope</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), Class.TagOrTemplate);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>   <span class="comment">// Set or update the scope flags.</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>   <span class="keywordtype">bool</span> AlreadyHasClassScope = Class.TopLevelClass;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>   <span class="keywordtype">unsigned</span> ScopeFlags = <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a9c46440a665ea4d88f8811bb705cbd4e" title="The scope of a struct/union/class definition.">Scope::ClassScope</a>|<a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7af9dd922f0e23495a79fc93698d6775ff" title="This is a scope that can contain a declaration. Some scopes just contain loop constructs but don't co...">Scope::DeclScope</a>;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>   ParseScope ClassScope(<span class="keyword">this</span>, ScopeFlags, !AlreadyHasClassScope);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   ParseScopeFlags ClassScopeFlags(<span class="keyword">this</span>, ScopeFlags, AlreadyHasClassScope);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>   <span class="comment">// Enter the scope of nested classes</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>   <span class="keywordflow">if</span> (!AlreadyHasClassScope)</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     Actions.<a class="code" href="classclang_1_1Sema.html#af77e76dbbbb636dcc625a5b845f8d13d">ActOnStartDelayedMemberDeclarations</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(),</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>                                                 Class.TagOrTemplate);</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>   <span class="keywordflow">if</span> (!Class.LateParsedDeclarations.empty()) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, ni = Class.LateParsedDeclarations.size(); i < ni; ++i){</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>       Class.LateParsedDeclarations[i]->ParseLexedAttributes();</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>   }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>   <span class="keywordflow">if</span> (!AlreadyHasClassScope)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     Actions.<a class="code" href="classclang_1_1Sema.html#a56cf979135d205e14fc4d781cc2ab567">ActOnFinishDelayedMemberDeclarations</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(),</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>                                                  Class.TagOrTemplate);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> }</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment"></span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">/// \brief Parse all attributes in LAs, and attach them to Decl D.</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseLexedAttributeList(LateParsedAttrList &LAs, <a class="code" href="classclang_1_1Decl.html">Decl</a> *D,</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>                                      <span class="keywordtype">bool</span> EnterScope, <span class="keywordtype">bool</span> OnDefinition) {</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>   assert(LAs.parseSoon() &&</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>          <span class="stringliteral">"Attribute list should be marked for immediate parsing."</span>);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, ni = LAs.size(); i < ni; ++i) {</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="keywordflow">if</span> (D)</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>       LAs[i]->addDecl(D);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     ParseLexedAttribute(*LAs[i], EnterScope, OnDefinition);</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     <span class="keyword">delete</span> LAs[i];</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>   }</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>   LAs.clear();</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment"></span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment">/// \brief Finish parsing an attribute for which parsing was delayed.</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment">/// This will be called at the end of parsing a class declaration</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment">/// for each LateParsedAttribute. We consume the saved tokens and</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">/// create an attribute with the arguments filled in. We add this</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="comment">/// to the Attribute list for the decl.</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseLexedAttribute(LateParsedAttribute &LA,</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>                                  <span class="keywordtype">bool</span> EnterScope, <span class="keywordtype">bool</span> OnDefinition) {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>   <span class="comment">// Save the current token position.</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> OrigLoc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>   <span class="comment">// Append the current token at the end of the new token stream so that it</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>   <span class="comment">// doesn't get lost.</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>   LA.Toks.push_back(Tok);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>   PP.<a class="code" href="classclang_1_1Preprocessor.html#a4869ffa7c1268e6e7cbd8fd5b7b0364d">EnterTokenStream</a>(LA.Toks.data(), LA.Toks.size(), <span class="keyword">true</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   <span class="comment">// Consume the previously pushed token.</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   ConsumeAnyToken(<span class="comment">/*ConsumeCodeCompletionTok=*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   <span class="keywordflow">if</span> (OnDefinition && !IsThreadSafetyAttribute(LA.AttrName.getName())) {</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     <span class="comment">// FIXME: Do not warn on C++11 attributes, once we start supporting</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     <span class="comment">// them here.</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::warn_attribute_on_function_definition)</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>       << LA.AttrName.getName();</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>   <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> Attrs(AttrFactory);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> endLoc;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>   <span class="keywordflow">if</span> (LA.Decls.size() > 0) {</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     <a class="code" href="classclang_1_1Decl.html">Decl</a> *D = LA.Decls[0];</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     <a class="code" href="classclang_1_1NamedDecl.html">NamedDecl</a> *ND  = dyn_cast<<a class="code" href="classclang_1_1NamedDecl.html">NamedDecl</a>>(D);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a> *RD = dyn_cast_or_null<RecordDecl>(D-><a class="code" href="classclang_1_1Decl.html#af67e1a1d24dcc51093b95dbcf68d4288">getDeclContext</a>());</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="comment">// Allow 'this' within late-parsed attributes.</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     <a class="code" href="classclang_1_1Sema_1_1CXXThisScopeRAII.html" title="RAII object used to temporarily allow the C++ 'this' expression to be used, with the given qualifiers...">Sema::CXXThisScopeRAII</a> ThisScope(Actions, RD, <span class="comment">/*TypeQuals=*/</span>0,</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                                      ND && ND-><a class="code" href="classclang_1_1NamedDecl.html#a614520a704fb5219e51ec678fa66103d" title="Determine whether the given declaration is an instance member of a C++ class.">isCXXInstanceMember</a>());</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="keywordflow">if</span> (LA.Decls.size() == 1) {</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>       <span class="comment">// If the Decl is templatized, add template parameters to scope.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>       <span class="keywordtype">bool</span> HasTemplateScope = EnterScope && D-><a class="code" href="classclang_1_1Decl.html#ad79b82c9cb0156de52c7f390e22f062f" title="returns true if this declaration is a template">isTemplateDecl</a>();</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>       ParseScope TempScope(<span class="keyword">this</span>, <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a40ab45d2b9c9fca9a32b710f457d449a" title="This is a scope that corresponds to the template parameters of a C++ template. Template parameter sco...">Scope::TemplateParamScope</a>, HasTemplateScope);</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>       <span class="keywordflow">if</span> (HasTemplateScope)</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a253ab69b7d64567065d754abe72dae9a">ActOnReenterTemplateScope</a>(Actions.CurScope, D);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>       <span class="comment">// If the Decl is on a function, add function parameters to the scope.</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>       <span class="keywordtype">bool</span> HasFunScope = EnterScope && D-><a class="code" href="classclang_1_1Decl.html#acfded90869b5610b7eb1958e843e74d2" title="Whether this declaration is a function or function template.">isFunctionOrFunctionTemplate</a>();</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>       ParseScope FnScope(<span class="keyword">this</span>, <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7aec9cad8f5dd22da19c76343a52dd6a2d" title="This indicates that the scope corresponds to a function, which means that labels are set here...">Scope::FnScope</a>|<a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7af9dd922f0e23495a79fc93698d6775ff" title="This is a scope that can contain a declaration. Some scopes just contain loop constructs but don't co...">Scope::DeclScope</a>, HasFunScope);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>       <span class="keywordflow">if</span> (HasFunScope)</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a34ed2976d0f04d1d0cc4537d709c67bf" title="Push the parameters of D, which must be a function, into scope.">ActOnReenterFunctionContext</a>(Actions.CurScope, D);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>       ParseGNUAttributeArgs(&LA.AttrName, LA.AttrNameLoc, Attrs, &endLoc,</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                             0, <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(), <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>       <span class="keywordflow">if</span> (HasFunScope) {</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a251380104b4dcc8aeadc7f4b7b0c3073">ActOnExitFunctionContext</a>();</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>         FnScope.Exit();  <span class="comment">// Pop scope, and remove Decls from IdResolver</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>       }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>       <span class="keywordflow">if</span> (HasTemplateScope) {</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>         TempScope.Exit();</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>       }</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>       <span class="comment">// If there are multiple decls, then the decl cannot be within the</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>       <span class="comment">// function scope.</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>       ParseGNUAttributeArgs(&LA.AttrName, LA.AttrNameLoc, Attrs, &endLoc,</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>                             0, <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(), <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName();</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>   }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, ni = LA.Decls.size(); i < ni; ++i) {</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     Actions.<a class="code" href="classclang_1_1Sema.html#ad411eb711112baaa4ea3d416f9d7793f">ActOnFinishDelayedAttribute</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), LA.Decls[i], Attrs);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>   }</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>() != OrigLoc) {</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     <span class="comment">// Due to a parsing error, we either went over the cached tokens or</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     <span class="comment">// there are still cached tokens left, so we skip the leftover tokens.</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     <span class="comment">// Since this is an uncommon situation that should be avoided, use the</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     <span class="comment">// expensive isBeforeInTranslationUnit call.</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="keywordflow">if</span> (PP.<a class="code" href="classclang_1_1Preprocessor.html#afca276c0a87d413e51e8848edf8f911b">getSourceManager</a>().<a class="code" href="classclang_1_1SourceManager.html#a80e6af876450686c7811c34fc72fcbdc" title="Determines the order of 2 source locations in the translation unit.">isBeforeInTranslationUnit</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(),</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>                                                         OrigLoc))</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>() != OrigLoc && Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(<a class="code" href="namespaceclang_1_1comments_1_1tok.html#af269e1299a7e813dd4471ab24630e01aac4904dc9309fe9cf0fe76ff45d54f265">tok::eof</a>))</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>       ConsumeAnyToken();</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>   }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> }</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment"></span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment">/// \brief Wrapper around a case statement checking if AttrName is</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment">/// one of the thread safety attributes</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::IsThreadSafetyAttribute(StringRef AttrName) {</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>   <span class="keywordflow">return</span> llvm::StringSwitch<bool>(AttrName)</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>       .Case(<span class="stringliteral">"guarded_by"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>       .Case(<span class="stringliteral">"guarded_var"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>       .Case(<span class="stringliteral">"pt_guarded_by"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>       .Case(<span class="stringliteral">"pt_guarded_var"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>       .Case(<span class="stringliteral">"lockable"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>       .Case(<span class="stringliteral">"scoped_lockable"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>       .Case(<span class="stringliteral">"no_thread_safety_analysis"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>       .Case(<span class="stringliteral">"acquired_after"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>       .Case(<span class="stringliteral">"acquired_before"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>       .Case(<span class="stringliteral">"exclusive_lock_function"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>       .Case(<span class="stringliteral">"shared_lock_function"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>       .Case(<span class="stringliteral">"exclusive_trylock_function"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>       .Case(<span class="stringliteral">"shared_trylock_function"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>       .Case(<span class="stringliteral">"unlock_function"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>       .Case(<span class="stringliteral">"lock_returned"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>       .Case(<span class="stringliteral">"locks_excluded"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>       .Case(<span class="stringliteral">"exclusive_locks_required"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>       .Case(<span class="stringliteral">"shared_locks_required"</span>, <span class="keyword">true</span>)</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>       .Default(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> }</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment"></span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">/// \brief Parse the contents of thread safety attributes. These</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment">/// should always be parsed as an expression list.</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="comment">/// We need to special case the parsing due to the fact that if the first token</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="comment">/// of the first argument is an identifier, the main parse loop will store</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="comment">/// that token as a "parameter" and the rest of</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="comment">/// the arguments will be added to a list of "arguments". However,</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment">/// subsequent tokens in the first argument are lost. We instead parse each</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="comment">/// argument as an expression and add all arguments to the list of "arguments".</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment">/// In future, we will take advantage of this special case to also</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="comment">/// deal with some argument scoping issues here (for example, referring to a</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="comment">/// function parameter in the attribute on that function).</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseThreadSafetyAttribute(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &AttrName,</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>                                         <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc,</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>                                         <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs,</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>                                         <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *EndLoc) {</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren) && <span class="stringliteral">"Attribute arg list not starting with '('"</span>);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> </div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>   T.consumeOpen();</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>   <a class="code" href="classllvm_1_1SmallVector.html">ArgsVector</a> ArgExprs;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>   <span class="keywordtype">bool</span> ArgExprsOk = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>   <span class="comment">// now parse the list of expressions</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::r_paren)) {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>     <a class="code" href="classclang_1_1EnterExpressionEvaluationContext.html" title="RAII object that enters a new expression evaluation context.">EnterExpressionEvaluationContext</a> Unevaluated(Actions, <a class="code" href="classclang_1_1Sema.html#ac105cb9d8d4ad3e532351c498f6082b5ae4e2b142c5314222a59195d1612a1904" title="The current expression and its subexpressions occur within an unevaluated operand (C++11 [expr]p7)...">Sema::Unevaluated</a>);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ArgExpr(<a class="code" href="classclang_1_1Parser.html#aa1ddd7e29d6cee82c3df71c30c194891" title="Parse an expr that doesn't include (top-level) commas.">ParseAssignmentExpression</a>());</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     <span class="keywordflow">if</span> (ArgExpr.isInvalid()) {</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>       ArgExprsOk = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>       T.consumeClose();</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>       ArgExprs.push_back(ArgExpr.release());</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     }</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// Eat the comma, move to the next argument</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>   }</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>   <span class="comment">// Match the ')'.</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>   <span class="keywordflow">if</span> (ArgExprsOk && !T.consumeClose()) {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(&AttrName, AttrNameLoc, 0, AttrNameLoc, ArgExprs.data(),</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>                  ArgExprs.size(), <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>   }</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>   <span class="keywordflow">if</span> (EndLoc)</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     *EndLoc = T.getCloseLocation();</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> }</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> </div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordtype">void</span> Parser::ParseTypeTagForDatatypeAttribute(<a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> &AttrName,</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>                                               <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc,</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>                                               <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs,</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>                                               <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *EndLoc) {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren) && <span class="stringliteral">"Attribute arg list not starting with '('"</span>);</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>   T.consumeOpen();</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident);</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>     T.skipToEnd();</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>   }</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>   <a class="code" href="structclang_1_1IdentifierLoc.html" title="Wraps an identifier and optional source location for the identifier.">IdentifierLoc</a> *ArgumentKind = ParseIdentifierLoc();</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma)) {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_comma);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     T.skipToEnd();</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>   }</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>   <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>   <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> MatchingCTypeRange;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>   <a class="code" href="classclang_1_1ActionResult.html">TypeResult</a> MatchingCType = <a class="code" href="classclang_1_1Parser.html#aa7137dd627971c6ecad56fb67a1c1179">ParseTypeName</a>(&MatchingCTypeRange);</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>   <span class="keywordflow">if</span> (MatchingCType.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>     T.skipToEnd();</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>   }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>   <span class="keywordtype">bool</span> LayoutCompatible = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>   <span class="keywordtype">bool</span> MustBeNull = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma)) {</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>       T.skipToEnd();</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     }</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Flag = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>     <span class="keywordflow">if</span> (Flag-><a class="code" href="classclang_1_1IdentifierInfo.html#a6cc09d0b74aca49bbdb23bcc4c35cf82" title="Return true if this is the identifier for the specified string.">isStr</a>(<span class="stringliteral">"layout_compatible"</span>))</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>       LayoutCompatible = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Flag-><a class="code" href="classclang_1_1IdentifierInfo.html#a6cc09d0b74aca49bbdb23bcc4c35cf82" title="Return true if this is the identifier for the specified string.">isStr</a>(<span class="stringliteral">"must_be_null"</span>))</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>       MustBeNull = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>     <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_type_safety_unknown_flag) << Flag;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>       T.skipToEnd();</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// consume flag</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>   }</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   <span class="keywordflow">if</span> (!T.consumeClose()) {</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#a0b00b6982b70da9e139492092b397625" title="Add type_tag_for_datatype attribute.">addNewTypeTagForDatatype</a>(&AttrName, AttrNameLoc, 0, AttrNameLoc,</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>                                    ArgumentKind, MatchingCType.<a class="code" href="classclang_1_1ActionResult.html#af3c660207dfebb140ea0832cd41dfeb1">release</a>(),</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>                                    LayoutCompatible, MustBeNull,</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>                                    <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>   }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>   <span class="keywordflow">if</span> (EndLoc)</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     *EndLoc = T.getCloseLocation();</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> }</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment"></span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="comment">/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets</span></div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment">/// of a C++11 attribute-specifier in a location where an attribute is not</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment">/// situation.</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">/// \return \c true if we skipped an attribute-like chunk of tokens, \c false if</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">/// this doesn't appear to actually be an attribute-specifier, and the caller</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="comment">/// should try to parse it.</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::DiagnoseProhibitedCXX11Attribute() {</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square) && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square));</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> </div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>   <span class="keywordflow">switch</span> (isCXX11AttributeSpecifier(<span class="comment">/*Disambiguate*/</span><span class="keyword">true</span>)) {</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>   <span class="keywordflow">case</span> CAK_NotAttributeSpecifier:</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     <span class="comment">// No diagnostic: we're in Obj-C++11 and this is not actually an attribute.</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>   <span class="keywordflow">case</span> CAK_InvalidAttributeSpecifier:</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_l_square_l_square_not_attribute);</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>   <span class="keywordflow">case</span> CAK_AttributeSpecifier:</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     <span class="comment">// Parse and discard the attributes.</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> BeginLoc = ConsumeBracket();</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     ConsumeBracket();</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_square);</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_square) && <span class="stringliteral">"isCXX11AttributeSpecifier lied"</span>);</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EndLoc = ConsumeBracket();</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(BeginLoc, diag::err_attributes_not_allowed)</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>       << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(BeginLoc, EndLoc);</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>   }</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>   llvm_unreachable(<span class="stringliteral">"All cases handled above."</span>);</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment"></span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="comment">/// \brief We have found the opening square brackets of a C++11</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="comment">/// attribute-specifier in a location where an attribute is not permitted, but</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">/// we know where the attributes ought to be written. Parse them anyway, and</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment">/// provide a fixit moving them to the right place.</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributesWithRange &Attrs,</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>                                              <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> CorrectLocation) {</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>   assert((Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square) && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square)) ||</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>          Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_alignas));</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>   <span class="comment">// Consume the attributes.</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>   ParseCXX11Attributes(Attrs);</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>   <a class="code" href="classclang_1_1CharSourceRange.html" title="Represents a character-granular source range.">CharSourceRange</a> AttrRange(<a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(Loc, Attrs.Range.getEnd()), <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::err_attributes_not_allowed)</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     << <a class="code" href="classclang_1_1FixItHint.html#a0d8406a70566d4b3937cd5b11a2c520f" title="Create a code modification hint that inserts the given code from FromRange at a specific location...">FixItHint::CreateInsertionFromRange</a>(CorrectLocation, AttrRange)</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(AttrRange);</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> }</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> </div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="keywordtype">void</span> Parser::DiagnoseProhibitedAttributes(ParsedAttributesWithRange &attrs) {</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>   <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(attrs.Range.getBegin(), diag::err_attributes_not_allowed)</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     << attrs.Range;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> }</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordtype">void</span> Parser::ProhibitCXX11Attributes(ParsedAttributesWithRange &attrs) {</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>   <a class="code" href="classclang_1_1AttributeList.html">AttributeList</a> *AttrList = attrs.getList();</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   <span class="keywordflow">while</span> (AttrList) {</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     <span class="keywordflow">if</span> (AttrList-><a class="code" href="classclang_1_1AttributeList.html#a6e7765977c4d8e2f47197ef94f5e0b37">isCXX11Attribute</a>()) {</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(AttrList-><a class="code" href="classclang_1_1AttributeList.html#a764e55754a52aa43b991dbbb24fa1450">getLoc</a>(), diag::err_attribute_not_type_attr) </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>         << AttrList-><a class="code" href="classclang_1_1AttributeList.html#ad33e72a3989e9a61697da22d0211bf15">getName</a>();</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>       AttrList-><a class="code" href="classclang_1_1AttributeList.html#ad2ce5246eed483669e582893448602d8">setInvalid</a>();</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     }</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     AttrList = AttrList-><a class="code" href="classclang_1_1AttributeList.html#a9e8836cfe5794658c6811dc504476f39">getNext</a>();</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>   }</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> }</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment"></span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment">/// ParseDeclaration - Parse a full 'declaration', which consists of</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment">/// declaration-specifiers, some number of declarators, and a semicolon.</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment">/// 'Context' should be a Declarator::TheContext value.  This returns the</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment">/// location of the semicolon in DeclEnd.</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment">///       declaration: [C99 6.7]</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment">///         block-declaration -></span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="comment">///           simple-declaration</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment">///           others                   [FIXME]</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">/// [C++]   template-declaration</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment">/// [C++]   namespace-definition</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment">/// [C++]   using-directive</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment">/// [C++]   using-declaration</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="comment">/// [C++11/C11] static_assert-declaration</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">///         others... [FIXME]</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment"></span><a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">Parser::DeclGroupPtrTy</a> Parser::ParseDeclaration(StmtVector &Stmts,</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>                                                 <span class="keywordtype">unsigned</span> <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>                                                 <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> &DeclEnd,</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>                                           ParsedAttributesWithRange &attrs) {</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>   <a class="code" href="classclang_1_1ParenBraceBracketBalancer.html" title="RAII object that makes sure paren/bracket/brace count is correct after declaration/statement parsing...">ParenBraceBracketBalancer</a> BalancerRAIIObj(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>   <span class="comment">// Must temporarily exit the objective-c container scope for</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>   <span class="comment">// parsing c none objective-c decls.</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>   <a class="code" href="classclang_1_1Parser.html#a925bfddba9b0ac6fb0d3bdc6585ea7c8">ObjCDeclContextSwitch</a> ObjCDC(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> </div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *SingleDecl = 0;</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *OwnedType = 0;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>   <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>   <span class="keywordflow">case</span> tok::kw_template:</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>   <span class="keywordflow">case</span> tok::kw_export:</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     SingleDecl = ParseDeclarationStartingWithTemplate(Context, DeclEnd);</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>   <span class="keywordflow">case</span> tok::kw_inline:</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>     <span class="comment">// Could be the start of an inline namespace. Allowed as an ext in C++03.</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::kw_namespace)) {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>       ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> InlineLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>       SingleDecl = ParseNamespace(Context, DeclEnd, InlineLoc);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>     }</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>     <span class="keywordflow">return</span> ParseSimpleDeclaration(Stmts, Context, DeclEnd, attrs,</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>                                   <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>   <span class="keywordflow">case</span> tok::kw_namespace:</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>     ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>     SingleDecl = ParseNamespace(Context, DeclEnd);</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>   <span class="keywordflow">case</span> tok::kw_using:</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     SingleDecl = ParseUsingDirectiveOrDeclaration(Context, ParsedTemplateInfo(),</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>                                                   DeclEnd, attrs, &OwnedType);</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>   <span class="keywordflow">case</span> tok::kw_static_assert:</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>   <span class="keywordflow">case</span> tok::kw__Static_assert:</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     SingleDecl = ParseStaticAssertDeclaration(DeclEnd);</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     <span class="keywordflow">return</span> ParseSimpleDeclaration(Stmts, Context, DeclEnd, attrs, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>   }</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>   <span class="comment">// This routine returns a DeclGroup, if the thing we parsed only contains a</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>   <span class="comment">// single decl, convert it now. Alias declarations can also declare a type;</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>   <span class="comment">// include that too if it is present.</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>   <span class="keywordflow">return</span> Actions.<a class="code" href="classclang_1_1Sema.html#af97d1afaafdd80de7db9e06cdaebbf52">ConvertDeclToDeclGroup</a>(SingleDecl, OwnedType);</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> }</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment"></span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">///       simple-declaration: [C99 6.7: declaration] [C++ 7p1: dcl.dcl]</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">///         declaration-specifiers init-declarator-list[opt] ';'</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment">/// [C++11] attribute-specifier-seq decl-specifier-seq[opt]</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">///             init-declarator-list ';'</span></div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="comment">///[C90/C++]init-declarator-list ';'                             [TODO]</span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment">/// [OMP]   threadprivate-directive                              [TODO]</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment">///       for-range-declaration: [C++11 6.5p1: stmt.ranged]</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">///         attribute-specifier-seq[opt] type-specifier-seq declarator</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="comment">/// If RequireSemi is false, this does not check for a ';' at the end of the</span></div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment">/// declaration.  If it is true, it checks for and eats it.</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="comment">/// If FRI is non-null, we might be parsing a for-range-declaration instead</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="comment">/// of a simple-declaration. If we find that we are, we also parse the</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment">/// for-range-initializer, and place it here.</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="comment"></span><a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">Parser::DeclGroupPtrTy</a></div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> Parser::ParseSimpleDeclaration(StmtVector &Stmts, <span class="keywordtype">unsigned</span> Context,</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>                                <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> &DeclEnd,</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>                                ParsedAttributesWithRange &Attrs,</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>                                <span class="keywordtype">bool</span> RequireSemi, ForRangeInit *FRI) {</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>   <span class="comment">// Parse the common declaration-specifiers piece.</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>   <a class="code" href="classclang_1_1ParsingDeclSpec.html" title="A class for parsing a DeclSpec.">ParsingDeclSpec</a> DS(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> </div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>   DeclSpecContext DSContext = getDeclSpecContextFromDeclaratorContext(Context);</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>   ParseDeclarationSpecifiers(DS, ParsedTemplateInfo(), <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988fa24d2c10b569678923a7bff78b68cb02b">AS_none</a>, DSContext);</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>   <span class="comment">// If we had a free-standing type definition with a missing semicolon, we</span></div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>   <span class="comment">// may get this far before the problem becomes obvious.</span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>   <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#ae312c0a325b2ca5857b65f9ac8003dfb">hasTagDefinition</a>() &&</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>       DiagnoseMissingSemiAfterTagDefinition(DS, <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988fa24d2c10b569678923a7bff78b68cb02b">AS_none</a>, DSContext))</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a7c862a2fdd5e50bb1878ec7b4b6ac635">DeclGroupPtrTy</a>();</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> </div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>   <span class="comment">// C99 6.7.2.3p6: Handle "struct-or-union identifier;", "enum { X };"</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>   <span class="comment">// declaration-specifiers init-declarator-list[opt] ';'</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) {</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     ProhibitAttributes(Attrs);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     DeclEnd = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     <span class="keywordflow">if</span> (RequireSemi) <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     <a class="code" href="classclang_1_1Decl.html">Decl</a> *TheDecl = Actions.<a class="code" href="classclang_1_1Sema.html#acfe6c814a028e46343b0bc069e88c4cf">ParsedFreeStandingDeclSpec</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988fa24d2c10b569678923a7bff78b68cb02b">AS_none</a>,</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>                                                        DS);</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     DS.complete(TheDecl);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>     <span class="keywordflow">return</span> Actions.<a class="code" href="classclang_1_1Sema.html#af97d1afaafdd80de7db9e06cdaebbf52">ConvertDeclToDeclGroup</a>(TheDecl);</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>   }</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> </div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>   DS.<a class="code" href="classclang_1_1DeclSpec.html#af2c90bf49db094ba955821df324218c9">takeAttributesFrom</a>(Attrs);</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>   <span class="keywordflow">return</span> ParseDeclGroup(DS, Context, <span class="comment">/*FunctionDefs=*/</span> <span class="keyword">false</span>, &DeclEnd, FRI);</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> }</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="comment"></span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <span class="comment">/// Returns true if this might be the start of a declarator, or a common typo</span></div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment">/// for a declarator.</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::MightBeDeclarator(<span class="keywordtype">unsigned</span> Context) {</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>   <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>   <span class="keywordflow">case</span> tok::annot_cxxscope:</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>   <span class="keywordflow">case</span> tok::annot_template_id:</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>   <span class="keywordflow">case</span> tok::caret:</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>   <span class="keywordflow">case</span> tok::code_completion:</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>   <span class="keywordflow">case</span> tok::coloncolon:</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>   <span class="keywordflow">case</span> tok::ellipsis:</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>   <span class="keywordflow">case</span> tok::kw___attribute:</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>   <span class="keywordflow">case</span> tok::kw_operator:</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>   <span class="keywordflow">case</span> tok::l_paren:</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>   <span class="keywordflow">case</span> tok::star:</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> </div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>   <span class="keywordflow">case</span> tok::amp:</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>   <span class="keywordflow">case</span> tok::ampamp:</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> </div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>   <span class="keywordflow">case</span> tok::l_square: <span class="comment">// Might be an attribute on an unnamed bit-field.</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     <span class="keywordflow">return</span> Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a> && <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11 &&</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>            <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square);</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> </div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>   <span class="keywordflow">case</span> tok::colon: <span class="comment">// Might be a typo for '::' or an unnamed bit-field.</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>     <span class="keywordflow">return</span> Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a> || <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus;</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> </div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>   <span class="keywordflow">case</span> tok::identifier:</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>     <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="DeclBase_8cpp.html#a37d13911f1772d0ed90b6b2e89cf3c60">getKind</a>()) {</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>     <span class="keywordflow">case</span> tok::code_completion:</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>     <span class="keywordflow">case</span> tok::coloncolon:</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     <span class="keywordflow">case</span> tok::comma:</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     <span class="keywordflow">case</span> tok::equal:</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     <span class="keywordflow">case</span> tok::equalequal: <span class="comment">// Might be a typo for '='.</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>     <span class="keywordflow">case</span> tok::kw_alignas:</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     <span class="keywordflow">case</span> tok::kw_asm:</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     <span class="keywordflow">case</span> tok::kw___attribute:</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     <span class="keywordflow">case</span> tok::l_brace:</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     <span class="keywordflow">case</span> tok::l_paren:</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordflow">case</span> tok::l_square:</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     <span class="keywordflow">case</span> tok::less:</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     <span class="keywordflow">case</span> tok::r_brace:</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     <span class="keywordflow">case</span> tok::r_paren:</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>     <span class="keywordflow">case</span> tok::r_square:</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>     <span class="keywordflow">case</span> tok::semi:</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> </div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     <span class="keywordflow">case</span> tok::colon:</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>       <span class="comment">// At namespace scope, 'identifier:' is probably a typo for 'identifier::'</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>       <span class="comment">// and in block scope it's probably a label. Inside a class definition,</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>       <span class="comment">// this is a bit-field.</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>       <span class="keywordflow">return</span> Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a> ||</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>              (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus && Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a>);</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> </div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     <span class="keywordflow">case</span> tok::identifier: <span class="comment">// Possible virt-specifier.</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11 && isCXX11VirtSpecifier(<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>());</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> </div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     }</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>   }</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> }</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment"></span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="comment">/// Skip until we reach something which seems like a sensible place to pick</span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment">/// up parsing after a malformed declaration. This will sometimes stop sooner</span></div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment">/// than SkipUntil(tok::r_brace) would, but will never stop later.</span></div>
+<div class="line"><a name="l01499"></a><span class="lineno"><a class="code" href="classclang_1_1Parser.html#a913cb672eb4fc888a372e25da65d4957"> 1499</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1Parser.html#a913cb672eb4fc888a372e25da65d4957">Parser::SkipMalformedDecl</a>() {</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>   <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     <span class="keywordflow">case</span> tok::l_brace:</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>       <span class="comment">// Skip until matching }, then stop. We've probably skipped over</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>       <span class="comment">// a malformed class or function definition or similar.</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>       ConsumeBrace();</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_brace);</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_try)) {</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>         <span class="comment">// This declaration isn't over yet. Keep skipping.</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>       }</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi))</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     <span class="keywordflow">case</span> tok::l_square:</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>       ConsumeBracket();</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_square);</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> </div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     <span class="keywordflow">case</span> tok::l_paren:</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>       ConsumeParen();</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren);</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> </div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     <span class="keywordflow">case</span> tok::r_brace:</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> </div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>     <span class="keywordflow">case</span> tok::semi:</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> </div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>     <span class="keywordflow">case</span> tok::kw_inline:</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>       <span class="comment">// 'inline namespace' at the start of a line is almost certainly</span></div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>       <span class="comment">// a good place to pick back up parsing, except in an Objective-C</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>       <span class="comment">// @interface context.</span></div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a895009ede74790b61cf636fd7e498d44">isAtStartOfLine</a>() && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_namespace) &&</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>           (!ParsingInObjCContainer || CurParsedObjCImpl))</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> </div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>     <span class="keywordflow">case</span> tok::kw_namespace:</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>       <span class="comment">// 'namespace' at the start of a line is almost certainly a good</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>       <span class="comment">// place to pick back up parsing, except in an Objective-C</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>       <span class="comment">// @interface context.</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a895009ede74790b61cf636fd7e498d44">isAtStartOfLine</a>() &&</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>           (!ParsingInObjCContainer || CurParsedObjCImpl))</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> </div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>     <span class="keywordflow">case</span> tok::at:</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>       <span class="comment">// @end is very much like } in Objective-C contexts.</span></div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#a5761d2afabf61a167722a8d2ac7a9f51" title="Return true if we have an ObjC keyword identifier.">isObjCAtKeyword</a>(tok::objc_end) &&</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>           ParsingInObjCContainer)</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> </div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     <span class="keywordflow">case</span> tok::minus:</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>     <span class="keywordflow">case</span> tok::plus:</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>       <span class="comment">// - and + probably start new method declarations in Objective-C contexts.</span></div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a895009ede74790b61cf636fd7e498d44">isAtStartOfLine</a>() && ParsingInObjCContainer)</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>     <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1comments_1_1tok.html#af269e1299a7e813dd4471ab24630e01aac4904dc9309fe9cf0fe76ff45d54f265">tok::eof</a>:</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>     }</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> </div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>     ConsumeAnyToken();</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>   }</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> }</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="comment"></span></div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment">/// ParseDeclGroup - Having concluded that this is either a function</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment">/// definition or a group of object declarations, actually parse the</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment">/// result.</span></div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="comment"></span><a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">Parser::DeclGroupPtrTy</a> Parser::ParseDeclGroup(<a class="code" href="classclang_1_1ParsingDeclSpec.html" title="A class for parsing a DeclSpec.">ParsingDeclSpec</a> &DS,</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>                                               <span class="keywordtype">unsigned</span> Context,</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>                                               <span class="keywordtype">bool</span> AllowFunctionDefinitions,</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>                                               <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *DeclEnd,</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>                                               ForRangeInit *FRI) {</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>   <span class="comment">// Parse the first declarator.</span></div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>   <a class="code" href="classclang_1_1ParsingDeclarator.html" title="A class for parsing a declarator.">ParsingDeclarator</a> D(*<span class="keyword">this</span>, DS, static_cast<Declarator::TheContext>(Context));</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>   ParseDeclarator(D);</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>   <span class="comment">// Bail out if the first declarator didn't seem well-formed.</span></div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>   <span class="keywordflow">if</span> (!D.hasName() && !D.mayOmitIdentifier()) {</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>     <a class="code" href="classclang_1_1Parser.html#a913cb672eb4fc888a372e25da65d4957">SkipMalformedDecl</a>();</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a7c862a2fdd5e50bb1878ec7b4b6ac635">DeclGroupPtrTy</a>();</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>   }</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> </div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>   <span class="comment">// Save late-parsed attributes for now; they need to be parsed in the</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>   <span class="comment">// appropriate function scope after the function Decl has been constructed.</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>   <span class="comment">// These will be parsed in ParseFunctionDefinition or ParseLexedAttrList.</span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>   LateParsedAttrList LateParsedAttrs(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>   <span class="keywordflow">if</span> (D.isFunctionDeclarator())</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>     MaybeParseGNUAttributes(D, &LateParsedAttrs);</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> </div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>   <span class="comment">// Check to see if we have a function *definition* which must have a body.</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>   <span class="keywordflow">if</span> (D.isFunctionDeclarator() &&</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>       <span class="comment">// Look at the next token to make sure that this isn't a function</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>       <span class="comment">// declaration.  We have to check this because __attribute__ might be the</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>       <span class="comment">// start of a function definition in GCC-extended K&R C.</span></div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>       !isDeclarationAfterDeclarator()) {</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> </div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     <span class="keywordflow">if</span> (AllowFunctionDefinitions) {</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>       <span class="keywordflow">if</span> (isStartOfFunctionDefinition(D)) {</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>         <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a21616b8df7b2fd0305197604ab31ca71">getStorageClassSpec</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a011d480a161c7912d7e7bce118fbeda0">DeclSpec::SCS_typedef</a>) {</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_function_declared_typedef);</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>           <span class="comment">// Recover by treating the 'typedef' as spurious.</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#a19f2c782115fef841ead93d82bcfffa3">ClearStorageClassSpecs</a>();</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>         }</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> </div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>         <a class="code" href="classclang_1_1Decl.html">Decl</a> *TheDecl =</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>           ParseFunctionDefinition(D, ParsedTemplateInfo(), &LateParsedAttrs);</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>         <span class="keywordflow">return</span> Actions.<a class="code" href="classclang_1_1Sema.html#af97d1afaafdd80de7db9e06cdaebbf52">ConvertDeclToDeclGroup</a>(TheDecl);</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>       }</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>       <span class="keywordflow">if</span> (isDeclarationSpecifier()) {</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>         <span class="comment">// If there is an invalid declaration specifier right after the function</span></div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>         <span class="comment">// prototype, then we must be in a missing semicolon case where this isn't</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>         <span class="comment">// actually a body.  Just fall through into the code that handles it as a</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>         <span class="comment">// prototype, and let the top-level code handle the erroneous declspec</span></div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>         <span class="comment">// where it would otherwise expect a comma or semicolon.</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_fn_body);</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::semi);</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>         <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a7c862a2fdd5e50bb1878ec7b4b6ac635">DeclGroupPtrTy</a>();</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>       }</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace)) {</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_function_definition_not_allowed);</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_brace, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>       }</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>     }</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>   }</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> </div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>   <span class="keywordflow">if</span> (ParseAsmAttributesAfterDeclarator(D))</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a7c862a2fdd5e50bb1878ec7b4b6ac635">DeclGroupPtrTy</a>();</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> </div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>   <span class="comment">// C++0x [stmt.iter]p1: Check if we have a for-range-declarator. If so, we</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>   <span class="comment">// must parse and analyze the for-range-initializer before the declaration is</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>   <span class="comment">// analyzed.</span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>   <span class="comment">// Handle the Objective-C for-in loop variable similarly, although we</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>   <span class="comment">// don't need to parse the container in advance.</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>   <span class="keywordflow">if</span> (FRI && (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::colon) || isTokIdentifier_in())) {</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>     <span class="keywordtype">bool</span> IsForRangeLoop = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::colon)) {</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>       IsForRangeLoop = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>       FRI->ColonLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace))</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>         FRI->RangeExpr = ParseBraceInitializer();</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>         FRI->RangeExpr = <a class="code" href="classclang_1_1Parser.html#aaf0c118ea2a9c93e210c3bf2b199a8d8" title="Simple precedence-based parser for binary/ternary operators.">ParseExpression</a>();</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     }</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> </div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>     <a class="code" href="classclang_1_1Decl.html">Decl</a> *ThisDecl = Actions.<a class="code" href="classclang_1_1Sema.html#ae508035149055f32412d88f5b7de77f7">ActOnDeclarator</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), D);</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>     <span class="keywordflow">if</span> (IsForRangeLoop)</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>       Actions.<a class="code" href="classclang_1_1Sema.html#ae29e61d9a81b00f4bc89640347a03829">ActOnCXXForRangeDecl</a>(ThisDecl);</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     Actions.<a class="code" href="classclang_1_1Sema.html#a3db45d6f98392781ce2067bb271369cc">FinalizeDeclaration</a>(ThisDecl);</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>     D.complete(ThisDecl);</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>     <span class="keywordflow">return</span> Actions.<a class="code" href="classclang_1_1Sema.html#ab392677b1af4e907e0e18db44a66a54d">FinalizeDeclaratorGroup</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), DS, ThisDecl);</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>   }</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> </div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Decl *, 8></a> DeclsInGroup;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *FirstDecl = ParseDeclarationAfterDeclaratorAndAttributes(D);</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>   <span class="keywordflow">if</span> (LateParsedAttrs.size() > 0)</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>     ParseLexedAttributeList(LateParsedAttrs, FirstDecl, <span class="keyword">true</span>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>   D.complete(FirstDecl);</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>   <span class="keywordflow">if</span> (FirstDecl)</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     DeclsInGroup.push_back(FirstDecl);</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> </div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>   <span class="keywordtype">bool</span> ExpectSemi = Context != <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0285808feb2eb0c628ae622722cfc93">Declarator::ForContext</a>;</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>   </div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>   <span class="comment">// If we don't have a comma, it is either the end of the list (a ';') or an</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>   <span class="comment">// error, bail out.</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma)) {</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> CommaLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> </div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a895009ede74790b61cf636fd7e498d44">isAtStartOfLine</a>() && ExpectSemi && !MightBeDeclarator(Context)) {</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>       <span class="comment">// This comma was followed by a line-break and something which can't be</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>       <span class="comment">// the start of a declarator. The comma was probably a typo for a</span></div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>       <span class="comment">// semicolon.</span></div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(CommaLoc, diag::err_expected_semi_declaration)</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>         << <a class="code" href="classclang_1_1FixItHint.html#a90e122cd34933ba821718385fddfae7a" title="Create a code modification hint that replaces the given source range with the given code string...">FixItHint::CreateReplacement</a>(CommaLoc, <span class="stringliteral">";"</span>);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>       ExpectSemi = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>     }</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> </div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>     <span class="comment">// Parse the next declarator.</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     D.clear();</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     D.setCommaLoc(CommaLoc);</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> </div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>     <span class="comment">// Accept attributes in an init-declarator.  In the first declarator in a</span></div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     <span class="comment">// declaration, these would be part of the declspec.  In subsequent</span></div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>     <span class="comment">// declarators, they become part of the declarator itself, so that they</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>     <span class="comment">// don't apply to declarators after *this* one.  Examples:</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     <span class="comment">//    short __attribute__((common)) var;    -> declspec</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     <span class="comment">//    short var __attribute__((common));    -> declarator</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     <span class="comment">//    short x, __attribute__((common)) var;    -> declarator</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>     MaybeParseGNUAttributes(D);</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> </div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>     ParseDeclarator(D);</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>     <span class="keywordflow">if</span> (!D.isInvalidType()) {</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>       <a class="code" href="classclang_1_1Decl.html">Decl</a> *ThisDecl = ParseDeclarationAfterDeclarator(D);</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>       D.complete(ThisDecl);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>       <span class="keywordflow">if</span> (ThisDecl)</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>         DeclsInGroup.push_back(ThisDecl);</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     }</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>   }</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> </div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>   <span class="keywordflow">if</span> (DeclEnd)</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>     *DeclEnd = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> </div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>   <span class="keywordflow">if</span> (ExpectSemi &&</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>       ExpectAndConsumeSemi(Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>                            ? diag::err_invalid_token_after_toplevel_declarator</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>                            : diag::err_expected_semi_declaration)) {</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>     <span class="comment">// Okay, there was no semicolon and one was expected.  If we see a</span></div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>     <span class="comment">// declaration specifier, just assume it was missing and continue parsing.</span></div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     <span class="comment">// Otherwise things are very confused and we skip to recover.</span></div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>     <span class="keywordflow">if</span> (!isDeclarationSpecifier()) {</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_brace, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi))</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>     }</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>   }</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>   <span class="keywordflow">return</span> Actions.<a class="code" href="classclang_1_1Sema.html#ab392677b1af4e907e0e18db44a66a54d">FinalizeDeclaratorGroup</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), DS, DeclsInGroup);</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> }</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="comment"></span></div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment">/// Parse an optional simple-asm-expr and attributes, and attach them to a</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment">/// declarator. Returns true on an error.</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::ParseAsmAttributesAfterDeclarator(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D) {</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>   <span class="comment">// If a simple-asm-expr is present, parse it.</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_asm)) {</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc;</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> AsmLabel(ParseSimpleAsm(&Loc));</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>     <span class="keywordflow">if</span> (AsmLabel.isInvalid()) {</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::semi, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>     }</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> </div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>     D.<a class="code" href="classclang_1_1Declarator.html#ac41e0c7c1036df9c18192b67610c7a28">setAsmLabel</a>(AsmLabel.release());</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>     D.<a class="code" href="classclang_1_1Declarator.html#ad1251a155b6375921dd4e6cc682eb53a" title="SetRangeEnd - Set the end of the source range to Loc, unless it's invalid.">SetRangeEnd</a>(Loc);</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>   }</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> </div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>   MaybeParseGNUAttributes(D);</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> }</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="comment"></span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> <span class="comment">/// \brief Parse 'declaration' after parsing 'declaration-specifiers</span></div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment">/// declarator'. This method parses the remainder of the declaration</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment">/// (including any attributes or initializer, among other things) and</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="comment">/// finalizes the declaration.</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment">///       init-declarator: [C99 6.7]</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <span class="comment">///         declarator</span></div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">///         declarator '=' initializer</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment">/// [GNU]   declarator simple-asm-expr[opt] attributes[opt]</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="comment">/// [GNU]   declarator simple-asm-expr[opt] attributes[opt] '=' initializer</span></div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment">/// [C++]   declarator initializer[opt]</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> <span class="comment">/// [C++] initializer:</span></div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="comment">/// [C++]   '=' initializer-clause</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment">/// [C++]   '(' expression-list ')'</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="comment">/// [C++0x] '=' 'default'                                                [TODO]</span></div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment">/// [C++0x] '=' 'delete'</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment">/// [C++0x] braced-init-list</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment">/// According to the standard grammar, =default and =delete are function</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="comment">/// definitions, but that definitely doesn't fit with the parser here.</span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment"></span><a class="code" href="classclang_1_1Decl.html">Decl</a> *Parser::ParseDeclarationAfterDeclarator(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>                                      <span class="keyword">const</span> ParsedTemplateInfo &TemplateInfo) {</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>   <span class="keywordflow">if</span> (ParseAsmAttributesAfterDeclarator(D))</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> </div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>   <span class="keywordflow">return</span> ParseDeclarationAfterDeclaratorAndAttributes(D, TemplateInfo);</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> }</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> </div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <a class="code" href="classclang_1_1Decl.html">Decl</a> *Parser::ParseDeclarationAfterDeclaratorAndAttributes(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>                                      <span class="keyword">const</span> ParsedTemplateInfo &TemplateInfo) {</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>   <span class="comment">// Inform the current actions module that we just parsed this declarator.</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *ThisDecl = 0;</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>   <span class="keywordflow">switch</span> (TemplateInfo.Kind) {</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>   <span class="keywordflow">case</span> ParsedTemplateInfo::NonTemplate:</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>     ThisDecl = Actions.<a class="code" href="classclang_1_1Sema.html#ae508035149055f32412d88f5b7de77f7">ActOnDeclarator</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), D);</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> </div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>   <span class="keywordflow">case</span> ParsedTemplateInfo::Template:</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>   <span class="keywordflow">case</span> ParsedTemplateInfo::ExplicitSpecialization: {</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>     ThisDecl = Actions.<a class="code" href="classclang_1_1Sema.html#a3460e5a20e154702a978f04fba7219bb">ActOnTemplateDeclarator</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(),</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>                                                *TemplateInfo.TemplateParams,</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>                                                D);</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1VarTemplateDecl.html" title="Declaration of a variable template.">VarTemplateDecl</a> *VT = dyn_cast_or_null<VarTemplateDecl>(ThisDecl))</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>       <span class="comment">// Re-direct this decl to refer to the templated decl so that we can</span></div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>       <span class="comment">// initialize it.</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>       ThisDecl = VT->getTemplatedDecl();</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>   }</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>   <span class="keywordflow">case</span> ParsedTemplateInfo::ExplicitInstantiation: {</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) {</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>       <a class="code" href="classclang_1_1ActionResult.html">DeclResult</a> ThisRes = Actions.<a class="code" href="classclang_1_1Sema.html#a419d9f253c5e6230a8ac9c331b1ee6fd">ActOnExplicitInstantiation</a>(</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>           <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), TemplateInfo.ExternLoc, TemplateInfo.TemplateLoc, D);</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>       <span class="keywordflow">if</span> (ThisRes.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::semi, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>       }</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>       ThisDecl = ThisRes.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>();</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>       <span class="comment">// FIXME: This check should be for a variable template instantiation only.</span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> </div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>       <span class="comment">// Check that this is a valid instantiation</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>       <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#abf6902e9c1758f5db00d427c768edba3" title="Retrieve the name specified by this declarator.">getName</a>().<a class="code" href="classclang_1_1UnqualifiedId.html#afe84a760cca9962b8873d220aaa0a479" title="Determine what kind of name we have.">getKind</a>() != <a class="code" href="classclang_1_1UnqualifiedId.html#a13c965a3b07b46673fc277c3e0eaa11ba1fa17f9404850cf66dacb34bd91f9be4" title="A template-id, e.g., f<int>.">UnqualifiedId::IK_TemplateId</a>) {</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>         <span class="comment">// If the declarator-id is not a template-id, issue a diagnostic and</span></div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>         <span class="comment">// recover by ignoring the 'template' keyword.</span></div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_template_defn_explicit_instantiation)</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>             << 2 << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(TemplateInfo.TemplateLoc);</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>         ThisDecl = Actions.<a class="code" href="classclang_1_1Sema.html#ae508035149055f32412d88f5b7de77f7">ActOnDeclarator</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), D);</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>         <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> LAngleLoc =</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>             PP.<a class="code" href="classclang_1_1Preprocessor.html#aef7193e9d262ea6852d666beb28dc1a0" title="Computes the source location just past the end of the token at this source location.">getLocForEndOfToken</a>(TemplateInfo.TemplateLoc);</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(D.<a class="code" href="classclang_1_1Declarator.html#a9399027da6026803450f7ffb7957adac">getIdentifierLoc</a>(),</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>              diag::err_explicit_instantiation_with_definition)</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>             << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(TemplateInfo.TemplateLoc)</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>             << <a class="code" href="classclang_1_1FixItHint.html#afd481d826e9ddaa39fc82a698a810246" title="Create a code modification hint that inserts the given code string at a specific location.">FixItHint::CreateInsertion</a>(LAngleLoc, <span class="stringliteral">"<>"</span>);</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> </div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>         <span class="comment">// Recover as if it were an explicit specialization.</span></div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>         <a class="code" href="classclang_1_1Parser.html#af56d5f355fdfa215fcd576434347a29b">TemplateParameterLists</a> FakedParamLists;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>         FakedParamLists.push_back(Actions.<a class="code" href="classclang_1_1Sema.html#a7d116a88ced7d83165bc68cc7fbf9e93">ActOnTemplateParameterList</a>(</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>             0, <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(), TemplateInfo.TemplateLoc, LAngleLoc, 0, 0,</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>             LAngleLoc));</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> </div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>         ThisDecl =</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>             Actions.<a class="code" href="classclang_1_1Sema.html#a3460e5a20e154702a978f04fba7219bb">ActOnTemplateDeclarator</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), FakedParamLists, D);</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>       }</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>     }</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>     }</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>   }</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> </div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>   <span class="keywordtype">bool</span> TypeContainsAuto = D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#aa2996643d905c762a7213b51e959053a">containsPlaceholderType</a>();</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> </div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>   <span class="comment">// Parse declarator '=' initializer.</span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>   <span class="comment">// If a '==' or '+=' is found, suggest a fixit to '='.</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>   <span class="keywordflow">if</span> (isTokenEqualOrEqualTypo()) {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> </div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_delete)) {</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>       <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#ac884bb945b77ea6b605e9c7c5fd66bad">isFunctionDeclarator</a>())</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(<a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(), diag::err_default_delete_in_multiple_declaration)</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>           << 1 <span class="comment">/* delete */</span>;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(<a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(), diag::err_deleted_non_function);</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_default)) {</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>       <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#ac884bb945b77ea6b605e9c7c5fd66bad">isFunctionDeclarator</a>())</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(<a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(), diag::err_default_delete_in_multiple_declaration)</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>           << 0 <span class="comment">/* default */</span>;</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(<a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(), diag::err_default_special_members);</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>         <a class="code" href="classclang_1_1Parser.html#a4e30ebcbb7b386b0e280fd4a736262c0" title="EnterScope - Start a new scope.">EnterScope</a>(0);</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>         Actions.<a class="code" href="classclang_1_1Sema.html#aadbdf1530539ffe228088594b96f8b34">ActOnCXXEnterDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>       }</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> </div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::code_completion)) {</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a1b0a3e01ea5a5d0ea70afd3e0e7a3180">CodeCompleteInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a3db45d6f98392781ce2067bb271369cc">FinalizeDeclaration</a>(ThisDecl);</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>         cutOffParsing();</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>       }</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> </div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Init(ParseInitializer());</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> </div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>         Actions.<a class="code" href="classclang_1_1Sema.html#ad1fe8bf5e3ebbdde0e51d366b14495ac">ActOnCXXExitDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>         <a class="code" href="classclang_1_1Parser.html#a9e72026947093d42147152058cda299a" title="ExitScope - Pop a scope off the scope stack.">ExitScope</a>();</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>       }</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>       <span class="keywordflow">if</span> (Init.isInvalid()) {</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>         Actions.<a class="code" href="classclang_1_1Sema.html#aab9186e06aec3a68aa9dffa93f716df4">ActOnInitializerError</a>(ThisDecl);</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>       } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>         Actions.<a class="code" href="classclang_1_1Sema.html#ac99888690fb1c9ed515c86f4ae7317ef">AddInitializerToDecl</a>(ThisDecl, Init.take(),</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>                                      <span class="comment">/*DirectInit=*/</span><span class="keyword">false</span>, TypeContainsAuto);</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>     }</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren)) {</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>     <span class="comment">// Parse C++ direct initializer: '(' expression-list ')'</span></div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>     <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>     T.consumeOpen();</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> </div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>     ExprVector Exprs;</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>     CommaLocsTy CommaLocs;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> </div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>       <a class="code" href="classclang_1_1Parser.html#a4e30ebcbb7b386b0e280fd4a736262c0" title="EnterScope - Start a new scope.">EnterScope</a>(0);</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>       Actions.<a class="code" href="classclang_1_1Sema.html#aadbdf1530539ffe228088594b96f8b34">ActOnCXXEnterDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>     }</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>     <span class="keywordflow">if</span> (ParseExpressionList(Exprs, CommaLocs)) {</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>       Actions.<a class="code" href="classclang_1_1Sema.html#aab9186e06aec3a68aa9dffa93f716df4">ActOnInitializerError</a>(ThisDecl);</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> </div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>         Actions.<a class="code" href="classclang_1_1Sema.html#ad1fe8bf5e3ebbdde0e51d366b14495ac">ActOnCXXExitDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>         <a class="code" href="classclang_1_1Parser.html#a9e72026947093d42147152058cda299a" title="ExitScope - Pop a scope off the scope stack.">ExitScope</a>();</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>       }</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>       <span class="comment">// Match the ')'.</span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>       T.consumeClose();</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> </div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>       assert(!Exprs.empty() && Exprs.size()-1 == CommaLocs.size() &&</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>              <span class="stringliteral">"Unexpected number of commas!"</span>);</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> </div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus && D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>         Actions.<a class="code" href="classclang_1_1Sema.html#ad1fe8bf5e3ebbdde0e51d366b14495ac">ActOnCXXExitDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>         <a class="code" href="classclang_1_1Parser.html#a9e72026947093d42147152058cda299a" title="ExitScope - Pop a scope off the scope stack.">ExitScope</a>();</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>       }</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> </div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Initializer = Actions.<a class="code" href="classclang_1_1Sema.html#a4f583896545bfb428570a02485f2325a">ActOnParenListExpr</a>(T.getOpenLocation(),</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>                                                           T.getCloseLocation(),</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>                                                           Exprs);</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>       Actions.<a class="code" href="classclang_1_1Sema.html#ac99888690fb1c9ed515c86f4ae7317ef">AddInitializerToDecl</a>(ThisDecl, Initializer.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>(),</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>                                    <span class="comment">/*DirectInit=*/</span><span class="keyword">true</span>, TypeContainsAuto);</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     }</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11 && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace) &&</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>              (!CurParsedObjCImpl || !D.<a class="code" href="classclang_1_1Declarator.html#ac884bb945b77ea6b605e9c7c5fd66bad">isFunctionDeclarator</a>())) {</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="comment">// Parse C++0x braced-init-list.</span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>       <a class="code" href="classclang_1_1Parser.html#a4e30ebcbb7b386b0e280fd4a736262c0" title="EnterScope - Start a new scope.">EnterScope</a>(0);</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>       Actions.<a class="code" href="classclang_1_1Sema.html#aadbdf1530539ffe228088594b96f8b34">ActOnCXXEnterDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>     }</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> </div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Init(ParseBraceInitializer());</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>       Actions.<a class="code" href="classclang_1_1Sema.html#ad1fe8bf5e3ebbdde0e51d366b14495ac">ActOnCXXExitDeclInitializer</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), ThisDecl);</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>       <a class="code" href="classclang_1_1Parser.html#a9e72026947093d42147152058cda299a" title="ExitScope - Pop a scope off the scope stack.">ExitScope</a>();</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>     }</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> </div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     <span class="keywordflow">if</span> (Init.isInvalid()) {</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>       Actions.<a class="code" href="classclang_1_1Sema.html#aab9186e06aec3a68aa9dffa93f716df4">ActOnInitializerError</a>(ThisDecl);</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>     } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>       Actions.<a class="code" href="classclang_1_1Sema.html#ac99888690fb1c9ed515c86f4ae7317ef">AddInitializerToDecl</a>(ThisDecl, Init.take(),</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>                                    <span class="comment">/*DirectInit=*/</span><span class="keyword">true</span>, TypeContainsAuto);</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> </div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>     Actions.<a class="code" href="classclang_1_1Sema.html#add61cfea97e40eaf2605ed6e3caf253b">ActOnUninitializedDecl</a>(ThisDecl, TypeContainsAuto);</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>   }</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> </div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>   Actions.<a class="code" href="classclang_1_1Sema.html#a3db45d6f98392781ce2067bb271369cc">FinalizeDeclaration</a>(ThisDecl);</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> </div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>   <span class="keywordflow">return</span> ThisDecl;</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> }</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="comment"></span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> <span class="comment">/// ParseSpecifierQualifierList</span></div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">///        specifier-qualifier-list:</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="comment">///          type-specifier specifier-qualifier-list[opt]</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="comment">///          type-qualifier specifier-qualifier-list[opt]</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment">/// [GNU]    attributes     specifier-qualifier-list[opt]</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseSpecifierQualifierList(<a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS, <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988f" title="A C++ access specifier (public, private, protected), plus the special value "none" which means differ...">AccessSpecifier</a> AS,</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>                                          DeclSpecContext DSC) {<span class="comment"></span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="comment">  /// specifier-qualifier-list is a subset of declaration-specifiers.  Just</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="comment">  /// parse declaration-specifiers and complain about extra stuff.</span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment">  /// TODO: diagnose attribute-specifiers and alignment-specifiers.</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="comment"></span>  ParseDeclarationSpecifiers(DS, ParsedTemplateInfo(), AS, DSC);</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> </div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>   <span class="comment">// Validate declspec for type-name.</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>   <span class="keywordtype">unsigned</span> Specs = DS.<a class="code" href="classclang_1_1DeclSpec.html#aa26256b603b8ac6151b79c3ff6c6bce4" title="Return a bitmask of which flavors of specifiers this DeclSpec includes.">getParsedSpecifiers</a>();</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>   <span class="keywordflow">if</span> ((DSC == DSC_type_specifier || DSC == DSC_trailing) &&</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>       !DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>()) {</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_type);</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Specs == <a class="code" href="classclang_1_1DeclSpec.html#afb17a8617cf89f436b84f6edeecc6c8aaa769a507d26256929f518dd0f7f5843a">DeclSpec::PQ_None</a> && !DS.<a class="code" href="classclang_1_1DeclSpec.html#a34857e3d60cc5d568bf994272cf70c7e">getNumProtocolQualifiers</a>() &&</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>              !DS.<a class="code" href="classclang_1_1DeclSpec.html#a55864bf75a35f285c88d9bbae1d4c041">hasAttributes</a>()) {</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_typename_requires_specqual);</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>     <span class="keywordflow">if</span> (!DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>())</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>   }</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> </div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>   <span class="comment">// Issue diagnostic and remove storage class if present.</span></div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>   <span class="keywordflow">if</span> (Specs & <a class="code" href="classclang_1_1DeclSpec.html#afb17a8617cf89f436b84f6edeecc6c8aa48ae237da8a243fc783d1dd9bcc53fda">DeclSpec::PQ_StorageClassSpecifier</a>) {</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a05cd671221b98918a44c6e28b6bbedc1">getStorageClassSpecLoc</a>().<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>())</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a05cd671221b98918a44c6e28b6bbedc1">getStorageClassSpecLoc</a>(),diag::err_typename_invalid_storageclass);</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a7d2ff85ac3d0e29082d37ae5f87a57f0">getThreadStorageClassSpecLoc</a>(),</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>            diag::err_typename_invalid_storageclass);</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#a19f2c782115fef841ead93d82bcfffa3">ClearStorageClassSpecs</a>();</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>   }</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> </div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>   <span class="comment">// Issue diagnostic and remove function specfier if present.</span></div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>   <span class="keywordflow">if</span> (Specs & <a class="code" href="classclang_1_1DeclSpec.html#afb17a8617cf89f436b84f6edeecc6c8aa3e0862564e6d08e90e20c49e336f389c">DeclSpec::PQ_FunctionSpecifier</a>) {</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a45343ccb71784dd91a386b75bc07751e">isInlineSpecified</a>())</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#ad99c9c8b49484bedd89ba675f7bb3eb9">getInlineSpecLoc</a>(), diag::err_typename_invalid_functionspec);</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a9234ae9cdf23cfdfd2c4c8fc66ff6ff8">isVirtualSpecified</a>())</div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a07633ea6f6943cdddba6a86f49c7eda8">getVirtualSpecLoc</a>(), diag::err_typename_invalid_functionspec);</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a53afb794ebfeac1db853830c96a38288">isExplicitSpecified</a>())</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a41e6bc6bd66c2d447a19111172a2ffd9">getExplicitSpecLoc</a>(), diag::err_typename_invalid_functionspec);</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#aa3cb95264e3bf69e7b52ce980a469649">ClearFunctionSpecs</a>();</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>   }</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> </div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>   <span class="comment">// Issue diagnostic and remove constexpr specfier if present.</span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>   <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#af31541afc7e8463cae0a1afe9946f1cf">isConstexprSpecified</a>()) {</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a1a32fa6b3f88bb530da0755343396a58">getConstexprSpecLoc</a>(), diag::err_typename_invalid_constexpr);</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#ab7ad94ecf6cafda81d34bf2fa1c349c8">ClearConstexprSpec</a>();</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>   }</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> }</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> <span class="comment"></span></div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> <span class="comment">/// isValidAfterIdentifierInDeclaratorAfterDeclSpec - Return true if the</span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> <span class="comment">/// specified token is valid after the identifier in a declarator which</span></div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="comment">/// immediately follows the declspec.  For example, these things are valid:</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="comment">///      int x   [             4];         // direct-declarator</span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="comment">///      int x   (             int y);     // direct-declarator</span></div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> <span class="comment">///  int(int x   )                         // direct-declarator</span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="comment">///      int x   ;                         // simple-declaration</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment">///      int x   =             17;         // init-declarator-list</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> <span class="comment">///      int x   ,             y;          // init-declarator-list</span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="comment">///      int x   __asm__       ("foo");    // init-declarator-list</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="comment">///      int x   :             4;          // struct-declarator</span></div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="comment">///      int x   {             5};         // C++'0x unified initializers</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment">/// This is not, because 'x' does not immediately follow the declspec (though</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment">/// ')' happens to be valid anyway).</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment">///    int (x)</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02035"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#a8dd8b7c8bf91e8d6fdcce9eb54687fad"> 2035</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ParseDecl_8cpp.html#a8dd8b7c8bf91e8d6fdcce9eb54687fad">isValidAfterIdentifierInDeclarator</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Token.html">Token</a> &T) {</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>   <span class="keywordflow">return</span> T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square) || T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren) || T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren) ||</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>          T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi) || T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma) || T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::equal) ||</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>          T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_asm) || T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace) || T.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::colon);</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> }</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="comment"></span></div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="comment">/// ParseImplicitInt - This method is called when we have an non-typename</span></div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="comment">/// identifier in a declspec (which normally terminates the decl spec) when</span></div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="comment">/// the declspec has no type specifier.  In this case, the declspec is either</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="comment">/// malformed or is "implicit int" (in K&R and C89).</span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="comment">/// This method handles diagnosing this prettily and returns false if the</span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment">/// declspec is done being processed.  If it recovers and thinks there may be</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="comment">/// other pieces of declspec after it, it returns true.</span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::ParseImplicitInt(<a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS, <a class="code" href="classclang_1_1CXXScopeSpec.html" title="Represents a C++ nested-name-specifier or a global scope specifier.">CXXScopeSpec</a> *SS,</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>                               <span class="keyword">const</span> ParsedTemplateInfo &TemplateInfo,</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>                               <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988f" title="A C++ access specifier (public, private, protected), plus the special value "none" which means differ...">AccessSpecifier</a> AS, DeclSpecContext DSC, </div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>                               ParsedAttributesWithRange &Attrs) {</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>   assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) && <span class="stringliteral">"should have identifier"</span>);</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> </div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>   <span class="comment">// If we see an identifier that is not a type name, we normally would</span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>   <span class="comment">// parse it as the identifer being declared.  However, when a typename</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>   <span class="comment">// is typo'd or the definition is not included, this will incorrectly</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>   <span class="comment">// parse the typename as the identifier name and fall over misparsing</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>   <span class="comment">// later parts of the diagnostic.</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>   <span class="comment">// As such, we try to do some look-ahead in cases where this would</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>   <span class="comment">// otherwise be an "implicit-int" case to see if this is invalid.  For</span></div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>   <span class="comment">// example: "static foo_t x = 4;"  In this case, if we parsed foo_t as</span></div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>   <span class="comment">// an identifier with implicit int, we'd get a parse error because the</span></div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>   <span class="comment">// next token is obviously invalid for a type.  Parse these as a case</span></div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>   <span class="comment">// with an invalid type specifier.</span></div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>   assert(!DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>() && <span class="stringliteral">"Type specifier checked above"</span>);</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> </div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>   <span class="comment">// Since we know that this either implicit int (which is rare) or an</span></div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>   <span class="comment">// error, do lookahead to try to do better recovery. This never applies</span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>   <span class="comment">// within a type specifier. Outside of C++, we allow this even if the</span></div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>   <span class="comment">// language doesn't "officially" support implicit int -- we support</span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>   <span class="comment">// implicit int as an extension in C99 and C11.</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>   <span class="keywordflow">if</span> (DSC != DSC_type_specifier && DSC != DSC_trailing &&</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>       !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus &&</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>       <a class="code" href="ParseDecl_8cpp.html#a8dd8b7c8bf91e8d6fdcce9eb54687fad">isValidAfterIdentifierInDeclarator</a>(<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>())) {</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>     <span class="comment">// If this token is valid for implicit int, e.g. "static x = 4", then</span></div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>     <span class="comment">// we just avoid eating the identifier, so it will be parsed as the</span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>     <span class="comment">// identifier in the declarator.</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>   }</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> </div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus &&</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a21616b8df7b2fd0305197604ab31ca71">getStorageClassSpec</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4ad59ca598f4220d106b131cf0072bf796">DeclSpec::SCS_auto</a>) {</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>     <span class="comment">// Don't require a type specifier if we have the 'auto' storage class</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>     <span class="comment">// specifier in C++98 -- we'll promote it to a type specifier.</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>     <span class="keywordflow">if</span> (SS)</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>       AnnotateScopeToken(*SS, <span class="comment">/*IsNewAnnotation*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>   }</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> </div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>   <span class="comment">// Otherwise, if we don't consume this token, we are going to emit an</span></div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>   <span class="comment">// error anyway.  Try to recover from various common problems.  Check</span></div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>   <span class="comment">// to see if this was a reference to a tag name without a tag specified.</span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>   <span class="comment">// This is a common problem in C (saying 'foo' instead of 'struct foo').</span></div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>   <span class="comment">// C++ doesn't need this, and isTagName doesn't take SS.</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>   <span class="keywordflow">if</span> (SS == 0) {</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *TagName = 0, *FixitTagName = 0;</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>     <a class="code" href="namespaceclang_1_1tok.html#aca39774690bea476816dc56565cb7cd5" title="Provides a simple uniform namespace for tokens from all C languages.">tok::TokenKind</a> TagKind = tok::unknown;</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> </div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>     <span class="keywordflow">switch</span> (Actions.<a class="code" href="classclang_1_1Sema.html#a389203db5b04963ddd6f2ed965eb9e36">isTagName</a>(*Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(), <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>())) {</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>       <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1DeclSpec.html#a80d7c87d1074c9340978900d04df58f3">DeclSpec::TST_enum</a>:</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>         TagName=<span class="stringliteral">"enum"</span>  ; FixitTagName = <span class="stringliteral">"enum "</span>  ; TagKind=tok::kw_enum ;<span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1DeclSpec.html#a42d34eb086f3d38dd0c0229bee195f69">DeclSpec::TST_union</a>:</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>         TagName=<span class="stringliteral">"union"</span> ; FixitTagName = <span class="stringliteral">"union "</span> ;TagKind=tok::kw_union ;<span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1DeclSpec.html#aff3e0027194ff7af24e01d0afc7799e9">DeclSpec::TST_struct</a>:</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>         TagName=<span class="stringliteral">"struct"</span>; FixitTagName = <span class="stringliteral">"struct "</span>;TagKind=tok::kw_struct;<span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1DeclSpec.html#a339c8cd10bf61c221305337b77e26ba0">DeclSpec::TST_interface</a>:</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>         TagName=<span class="stringliteral">"__interface"</span>; FixitTagName = <span class="stringliteral">"__interface "</span>;</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>         TagKind=tok::kw___interface;<span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1DeclSpec.html#a9d7b4da81280d6f33a81c41e6acd35c7">DeclSpec::TST_class</a>:</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>         TagName=<span class="stringliteral">"class"</span> ; FixitTagName = <span class="stringliteral">"class "</span> ;TagKind=tok::kw_class ;<span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>     }</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> </div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>     <span class="keywordflow">if</span> (TagName) {</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>       <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *TokenName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>       <a class="code" href="classclang_1_1LookupResult.html" title="Represents the results of name lookup.">LookupResult</a> R(Actions, TokenName, <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(),</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>                      <a class="code" href="classclang_1_1Sema.html#a0c6e994c44767e74e2892aa0235efb1aa0f401cd356feef42a5d4f95df7a6bf66">Sema::LookupOrdinaryName</a>);</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> </div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::err_use_of_tag_name_without_tag)</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>         << TokenName << TagName << <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>         << <a class="code" href="classclang_1_1FixItHint.html#afd481d826e9ddaa39fc82a698a810246" title="Create a code modification hint that inserts the given code string at a specific location.">FixItHint::CreateInsertion</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), FixitTagName);</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> </div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>       <span class="keywordflow">if</span> (Actions.<a class="code" href="classclang_1_1Sema.html#a805a91ca2bb0cccaa46c9cf35b36a4bb" title="Performs name lookup for a name that was parsed in the source code, and may contain a C++ scope speci...">LookupParsedName</a>(R, <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), SS)) {</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>         <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1UnresolvedSetIterator.html">LookupResult::iterator</a> I = R.begin(), IEnd = R.end();</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>              I != IEnd; ++I)</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>((*I)->getLocation(), diag::note_decl_hiding_tag_type)</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>             << TokenName << TagName;</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>       }</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> </div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>       <span class="comment">// Parse this as a tag as if the missing tag were present.</span></div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>       <span class="keywordflow">if</span> (TagKind == tok::kw_enum)</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>         ParseEnumSpecifier(Loc, DS, TemplateInfo, AS, DSC_normal);</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>         ParseClassSpecifier(TagKind, Loc, DS, TemplateInfo, AS,</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>                             <span class="comment">/*EnteringContext*/</span> <span class="keyword">false</span>, DSC_normal, Attrs);</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>     }</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>   }</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> </div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>   <span class="comment">// Determine whether this identifier could plausibly be the name of something</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>   <span class="comment">// being declared (with a missing type).</span></div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>   <span class="keywordflow">if</span> (DSC != DSC_type_specifier && DSC != DSC_trailing &&</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>       (!SS || DSC == DSC_top_level || DSC == DSC_class)) {</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>     <span class="comment">// Look ahead to the next token to try to figure out what this declaration</span></div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>     <span class="comment">// was supposed to be.</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>     <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="DeclBase_8cpp.html#a37d13911f1772d0ed90b6b2e89cf3c60">getKind</a>()) {</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>     <span class="keywordflow">case</span> tok::l_paren: {</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>       <span class="comment">// static x(4); // 'x' is not a type</span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>       <span class="comment">// x(int n);    // 'x' is not a type</span></div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>       <span class="comment">// x (*p)[];    // 'x' is a type</span></div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>       <span class="comment">//</span></div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>       <span class="comment">// Since we're in an error case (or the rare 'implicit int in C++' MS</span></div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>       <span class="comment">// extension), we can afford to perform a tentative parse to determine</span></div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>       <span class="comment">// which case we're in.</span></div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>       TentativeParsingAction PA(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>       TPResult TPR = TryParseDeclarator(<span class="comment">/*mayBeAbstract*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>       PA.Revert();</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> </div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>       <span class="keywordflow">if</span> (TPR != TPResult::False()) {</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>         <span class="comment">// The identifier is followed by a parenthesized declarator.</span></div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>         <span class="comment">// It's supposed to be a type.</span></div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>       }</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> </div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>       <span class="comment">// If we're in a context where we could be declaring a constructor,</span></div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>       <span class="comment">// check whether this is a constructor declaration with a bogus name.</span></div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>       <span class="keywordflow">if</span> (DSC == DSC_class || (DSC == DSC_top_level && SS)) {</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>         <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *II = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>         <span class="keywordflow">if</span> (Actions.<a class="code" href="classclang_1_1Sema.html#afaf0ea28546323b0f461d0e4ed7cd106" title="Determine whether the identifier II is a typo for the name of the class type currently being defined...">isCurrentClassNameTypo</a>(II, SS)) {</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::err_constructor_bad_name)</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>             << Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>() << II</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>             << <a class="code" href="classclang_1_1FixItHint.html#a90e122cd34933ba821718385fddfae7a" title="Create a code modification hint that replaces the given source range with the given code string...">FixItHint::CreateReplacement</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), II-><a class="code" href="classclang_1_1IdentifierInfo.html#a94caec6a16e508e8ca39eacd278bd2c5" title="Return the actual identifier string.">getName</a>());</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>           Tok.<a class="code" href="classclang_1_1Token.html#ae603a1243f89a7aeeabcb4d467c474ff">setIdentifierInfo</a>(II);</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>         }</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>       }</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>       <span class="comment">// Fall through.</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>     }</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>     <span class="keywordflow">case</span> tok::comma:</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>     <span class="keywordflow">case</span> tok::equal:</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>     <span class="keywordflow">case</span> tok::kw_asm:</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>     <span class="keywordflow">case</span> tok::l_brace:</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>     <span class="keywordflow">case</span> tok::l_square:</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     <span class="keywordflow">case</span> tok::semi:</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>       <span class="comment">// This looks like a variable or function declaration. The type is</span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>       <span class="comment">// probably missing. We're done parsing decl-specifiers.</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>       <span class="keywordflow">if</span> (SS)</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>         AnnotateScopeToken(*SS, <span class="comment">/*IsNewAnnotation*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> </div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>       <span class="comment">// This is probably supposed to be a type. This includes cases like:</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>       <span class="comment">//   int f(itn);</span></div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>       <span class="comment">//   struct S { unsinged : 4; };</span></div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>     }</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>   }</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> </div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>   <span class="comment">// This is almost certainly an invalid type name. Let the action emit a</span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>   <span class="comment">// diagnostic and attempt to recover.</span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>   <a class="code" href="classclang_1_1OpaquePtr.html">ParsedType</a> T;</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>   <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *II = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>   <span class="keywordflow">if</span> (Actions.<a class="code" href="classclang_1_1Sema.html#a61be7de7253c6f5c38028ea34be5c3cb">DiagnoseUnknownTypeName</a>(II, Loc, <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), SS, T)) {</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>     <span class="comment">// The action emitted a diagnostic, so we don't have to.</span></div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>     <span class="keywordflow">if</span> (T) {</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>       <span class="comment">// The action has suggested that the type T could be used. Set that as</span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>       <span class="comment">// the type in the declaration specifiers, consume the would-be type</span></div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>       <span class="comment">// name token, and we're done.</span></div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>       <span class="keyword">const</span> <span class="keywordtype">char</span> *PrevSpec;</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>       <span class="keywordtype">unsigned</span> DiagID;</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0ed31e8e239ed3e00e5181ca7bacf5aa">DeclSpec::TST_typename</a>, Loc, PrevSpec, DiagID, T);</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>       <span class="comment">// There may be other declaration specifiers after this.</span></div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (II != Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>()) {</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>       <span class="comment">// If no type was suggested, the correction is to a keyword</span></div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>       Tok.<a class="code" href="classclang_1_1Token.html#a44b757baba649ad00b79f78671a8a2aa">setKind</a>(II-><a class="code" href="classclang_1_1IdentifierInfo.html#a66ddbfe9f85f24f25fa29d49d773af86">getTokenID</a>());</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>       <span class="comment">// There may be other declaration specifiers after this.</span></div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>     }</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> </div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>     <span class="comment">// Fall through; the action had no suggestion for us.</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>     <span class="comment">// The action did not emit a diagnostic, so emit one now.</span></div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>     <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> R;</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>     <span class="keywordflow">if</span> (SS) R = SS-><a class="code" href="classclang_1_1CXXScopeSpec.html#a4cd627def4f36f863b61b77477d137eb">getRange</a>();</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::err_unknown_typename) << Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>() << R;</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>   }</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> </div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>   <span class="comment">// Mark this as an error.</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>   DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>   DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>   <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> </div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>   <span class="comment">// TODO: Could inject an invalid typedef decl in an enclosing scope to</span></div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>   <span class="comment">// avoid rippling error messages on subsequent uses of the same type,</span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>   <span class="comment">// could be useful if #include was forgotten.</span></div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> }</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="comment"></span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="comment">/// \brief Determine the declaration specifier context from the declarator</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="comment">/// context.</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="comment">/// \param Context the declarator context, which is one of the</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="comment">/// Declarator::TheContext enumerator values.</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="comment"></span>Parser::DeclSpecContext</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> Parser::getDeclSpecContextFromDeclaratorContext(<span class="keywordtype">unsigned</span> Context) {</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>   <span class="keywordflow">if</span> (Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a>)</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>     <span class="keywordflow">return</span> DSC_class;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>   <span class="keywordflow">if</span> (Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a>)</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>     <span class="keywordflow">return</span> DSC_top_level;</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>   <span class="keywordflow">if</span> (Context == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a59979e5a4b957844d544c3b617178f42">Declarator::TrailingReturnContext</a>)</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>     <span class="keywordflow">return</span> DSC_trailing;</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>   <span class="keywordflow">return</span> DSC_normal;</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> }</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> <span class="comment"></span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="comment">/// ParseAlignArgument - Parse the argument to an alignment-specifier.</span></div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <span class="comment">/// FIXME: Simply returns an alignof() expression if the argument is a</span></div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="comment">/// type. Ideally, the type should be propagated directly into Sema.</span></div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="comment">/// [C11]   type-id</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="comment">/// [C11]   constant-expression</span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="comment">/// [C++0x] type-id ...[opt]</span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="comment">/// [C++0x] assignment-expression ...[opt]</span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Parser::ParseAlignArgument(<a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Start,</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>                                       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> &EllipsisLoc) {</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ER;</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>   <span class="keywordflow">if</span> (isTypeIdInParens()) {</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> <a class="code" href="classclang_1_1TypeLoc.html" title="Base wrapper for a particular "section" of type source info.">TypeLoc</a> = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>     <a class="code" href="classclang_1_1OpaquePtr.html">ParsedType</a> Ty = <a class="code" href="classclang_1_1Parser.html#aa7137dd627971c6ecad56fb67a1c1179">ParseTypeName</a>().<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>();</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>     <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> TypeRange(Start, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>     ER = Actions.<a class="code" href="classclang_1_1Sema.html#a2bb3bf1357dd17d41db11040d3a70e22">ActOnUnaryExprOrTypeTraitExpr</a>(TypeLoc, <a class="code" href="namespaceclang.html#a5d73f06594a5ccb763a726bed94a541fa189e6535fba9f32eb0fb9c7cc01b79ca">UETT_AlignOf</a>, <span class="keyword">true</span>,</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>                                                Ty.<a class="code" href="classclang_1_1OpaquePtr.html#ae548a0e7a6660c4b1c65355944d221e0">getAsOpaquePtr</a>(), TypeRange);</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>   } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>     ER = <a class="code" href="classclang_1_1Parser.html#a6a9c7be0b89ac30ec2420874d4ff6e3f">ParseConstantExpression</a>();</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> </div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ellipsis))</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>     EllipsisLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> </div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>   <span class="keywordflow">return</span> ER;</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> }</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="comment"></span></div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <span class="comment">/// ParseAlignmentSpecifier - Parse an alignment-specifier, and add the</span></div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="comment">/// attribute to Attrs.</span></div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="comment">/// alignment-specifier:</span></div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="comment">/// [C11]   '_Alignas' '(' type-id ')'</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> <span class="comment">/// [C11]   '_Alignas' '(' constant-expression ')'</span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="comment">/// [C++11] 'alignas' '(' type-id ...[opt] ')'</span></div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="comment">/// [C++11] 'alignas' '(' assignment-expression ...[opt] ')'</span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseAlignmentSpecifier(<a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &Attrs,</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>                                      <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> *EndLoc) {</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>   assert((Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_alignas) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw__Alignas)) &&</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>          <span class="stringliteral">"Not an alignment-specifier!"</span>);</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> </div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>   <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *KWName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> KWLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> </div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>   <span class="keywordflow">if</span> (T.expectAndConsume(diag::err_expected_lparen))</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> </div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EllipsisLoc;</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ArgExpr = ParseAlignArgument(T.getOpenLocation(), EllipsisLoc);</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>   <span class="keywordflow">if</span> (ArgExpr.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>     T.skipToEnd();</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>   }</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> </div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>   T.consumeClose();</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>   <span class="keywordflow">if</span> (EndLoc)</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>     *EndLoc = T.getCloseLocation();</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> </div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>   <a class="code" href="classllvm_1_1SmallVector.html">ArgsVector</a> ArgExprs;</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>   ArgExprs.push_back(ArgExpr.<a class="code" href="classclang_1_1ActionResult.html#af3c660207dfebb140ea0832cd41dfeb1">release</a>());</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>   Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(KWName, KWLoc, 0, KWLoc, ArgExprs.data(), 1,</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>                <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374ae031ff8f56d481dfd27e5b656fa543d0" title="__ptr16, alignas(...), etc.">AttributeList::AS_Keyword</a>, EllipsisLoc);</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> }</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="comment"></span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <span class="comment">/// Determine whether we're looking at something that might be a declarator</span></div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> <span class="comment">/// in a simple-declaration. If it can't possibly be a declarator, maybe</span></div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> <span class="comment">/// diagnose a missing semicolon after a prior tag definition in the decl</span></div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="comment">/// specifier.</span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="comment">/// \return \c true if an error occurred and this can't be any kind of</span></div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <span class="comment">/// declaration.</span></div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> <span class="comment"></span><span class="keywordtype">bool</span></div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> Parser::DiagnoseMissingSemiAfterTagDefinition(<a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS, <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988f" title="A C++ access specifier (public, private, protected), plus the special value "none" which means differ...">AccessSpecifier</a> AS,</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>                                               DeclSpecContext DSContext,</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>                                               LateParsedAttrList *LateAttrs) {</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>   assert(DS.<a class="code" href="classclang_1_1DeclSpec.html#ae312c0a325b2ca5857b65f9ac8003dfb">hasTagDefinition</a>() && <span class="stringliteral">"shouldn't call this"</span>);</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>   <span class="keywordtype">bool</span> EnteringContext = (DSContext == DSC_class || DSContext == DSC_top_level);</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>   <span class="keywordtype">bool</span> HasMissingSemi = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> </div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus &&</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>       (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::coloncolon) ||</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>        Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_decltype) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_template_id)) &&</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>       <a class="code" href="classclang_1_1Parser.html#af6d88d3c2f1c4b03b72d93bde3f719b0">TryAnnotateCXXScopeToken</a>(EnteringContext)) {</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>     <a class="code" href="classclang_1_1Parser.html#a913cb672eb4fc888a372e25da65d4957">SkipMalformedDecl</a>();</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>   }</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> </div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>   <span class="comment">// Determine whether the following tokens could possibly be a</span></div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>   <span class="comment">// declarator.</span></div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_template_id)) {</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Token.html">Token</a> &Next = <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>();</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>     <span class="comment">// These tokens cannot come after the declarator-id in a</span></div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>     <span class="comment">// simple-declaration, and are likely to come after a type-specifier.</span></div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>     HasMissingSemi = Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::star) || Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::amp) ||</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>                      Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ampamp) || Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) ||</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>                      Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_cxxscope) ||</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>                      Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::coloncolon);</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_cxxscope) &&</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>              <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) &&</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>              DS.<a class="code" href="classclang_1_1DeclSpec.html#a21616b8df7b2fd0305197604ab31ca71">getStorageClassSpec</a>() != <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a011d480a161c7912d7e7bce118fbeda0">DeclSpec::SCS_typedef</a>) {</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>     <span class="comment">// We almost certainly have a missing semicolon. Look up the name and</span></div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>     <span class="comment">// check; if it names a type, we're missing a semicolon.</span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>     <a class="code" href="classclang_1_1CXXScopeSpec.html" title="Represents a C++ nested-name-specifier or a global scope specifier.">CXXScopeSpec</a> SS;</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>     Actions.<a class="code" href="classclang_1_1Sema.html#a9b1bd9aec09848db4124f9048fb72a98" title="Given an annotation pointer for a nested-name-specifier, restore the nested-name-specifier structure...">RestoreNestedNameSpecifierAnnotation</a>(Tok.<a class="code" href="classclang_1_1Token.html#a428dc637d123fb0d48a626eb77c4de25">getAnnotationValue</a>(),</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>                                                  Tok.<a class="code" href="classclang_1_1Token.html#a4912ff2ace18d707656b6d5e1605512a" title="SourceRange of the group of tokens that this annotation token represents.">getAnnotationRange</a>(), SS);</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Token.html">Token</a> &Next = <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>();</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Name = Next.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>     <a class="code" href="classclang_1_1Sema_1_1NameClassification.html">Sema::NameClassification</a> Classification =</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a08e7b8581021d89b3cde3aeb4fc49bfc" title="Perform name lookup on the given name, classifying it based on the results of name lookup and the fol...">ClassifyName</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), SS, Name, Next.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(),</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>                              <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>(), <span class="comment">/*IsAddressOfOperand*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>     <span class="keywordflow">switch</span> (Classification.<a class="code" href="classclang_1_1Sema_1_1NameClassification.html#a4b828a1a6efe2b680d2e6498d99e95a6">getKind</a>()) {</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a5ec83b49f90554897f5b7185f581de74">Sema::NC_Error</a>:</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>       <a class="code" href="classclang_1_1Parser.html#a913cb672eb4fc888a372e25da65d4957">SkipMalformedDecl</a>();</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> </div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a861d2505b887164a1e9874c2c1b6e56d">Sema::NC_Keyword</a>:</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a073673b0fd1a50c7e0d88bf31ccbb7e4">Sema::NC_NestedNameSpecifier</a>:</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>       llvm_unreachable(<span class="stringliteral">"typo correction and nested name specifiers not "</span></div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>                        <span class="stringliteral">"possible here"</span>);</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> </div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a8f2d9367681d37ff4c800a0004f263e9">Sema::NC_Type</a>:</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a5c9aad16c4120a2e4a1833c029eeb937">Sema::NC_TypeTemplate</a>:</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>       <span class="comment">// Not a previously-declared non-type entity.</span></div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>       HasMissingSemi = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> </div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a1bac84bafcbc006bbb92abf44fb8ccc3">Sema::NC_Unknown</a>:</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a25fea8a20b56b0b87a042ef1191ca5df">Sema::NC_Expression</a>:</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a3c69433beb63a7e54e6f6b6eb16b9b41">Sema::NC_VarTemplate</a>:</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Sema.html#a4abffb069315b100ef46d9822d7672f3a6467b974bf46626dc89ce3e8e0dfd669">Sema::NC_FunctionTemplate</a>:</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>       <span class="comment">// Might be a redeclaration of a prior entity.</span></div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>       HasMissingSemi = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>     }</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_typename) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_typename)) {</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>     HasMissingSemi = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>   }</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> </div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>   <span class="keywordflow">if</span> (!HasMissingSemi)</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> </div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>   <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(PP.<a class="code" href="classclang_1_1Preprocessor.html#aef7193e9d262ea6852d666beb28dc1a0" title="Computes the source location just past the end of the token at this source location.">getLocForEndOfToken</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#ae37ea2d7ac65d48bd083cac962000d82">getRepAsDecl</a>()-><a class="code" href="classclang_1_1Decl.html#a6eb7b247deafb504e09a9d225bbea0c4">getLocEnd</a>()),</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>        diag::err_expected_semi_after_tagdecl)</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>     << <a class="code" href="classclang_1_1DeclSpec.html#aab0f17bd394c2bd409a510ef6c57b965" title="Turn a type-specifier-type into a string like "_Bool" or "union".">DeclSpec::getSpecifierName</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a8e80657590008634115a6fe1d31f7600">getTypeSpecType</a>());</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>   <span class="comment">// Try to recover from the typo, by dropping the tag definition and parsing</span></div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>   <span class="comment">// the problematic tokens as a type.</span></div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>   <span class="comment">// FIXME: Split the DeclSpec into pieces for the standalone</span></div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>   <span class="comment">// declaration and pieces for the following declaration, instead</span></div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>   <span class="comment">// of assuming that all the other pieces attach to new declaration,</span></div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>   <span class="comment">// and call ParsedFreeStandingDeclSpec as appropriate.</span></div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>   DS.<a class="code" href="classclang_1_1DeclSpec.html#a04e62b12c94f0946a36adc75b6a8678d">ClearTypeSpecType</a>();</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>   ParsedTemplateInfo NotATemplate;</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>   ParseDeclarationSpecifiers(DS, NotATemplate, AS, DSContext, LateAttrs);</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> }</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> <span class="comment"></span></div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="comment">/// ParseDeclarationSpecifiers</span></div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="comment">///       declaration-specifiers: [C99 6.7]</span></div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> <span class="comment">///         storage-class-specifier declaration-specifiers[opt]</span></div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> <span class="comment">///         type-specifier declaration-specifiers[opt]</span></div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="comment">/// [C99]   function-specifier declaration-specifiers[opt]</span></div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="comment">/// [C11]   alignment-specifier declaration-specifiers[opt]</span></div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> <span class="comment">/// [GNU]   attributes declaration-specifiers[opt]</span></div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> <span class="comment">/// [Clang] '__module_private__' declaration-specifiers[opt]</span></div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="comment">///       storage-class-specifier: [C99 6.7.1]</span></div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="comment">///         'typedef'</span></div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> <span class="comment">///         'extern'</span></div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> <span class="comment">///         'static'</span></div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> <span class="comment">///         'auto'</span></div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="comment">///         'register'</span></div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> <span class="comment">/// [C++]   'mutable'</span></div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> <span class="comment">/// [C++11] 'thread_local'</span></div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="comment">/// [C11]   '_Thread_local'</span></div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="comment">/// [GNU]   '__thread'</span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="comment">///       function-specifier: [C99 6.7.4]</span></div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> <span class="comment">/// [C99]   'inline'</span></div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="comment">/// [C++]   'virtual'</span></div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> <span class="comment">/// [C++]   'explicit'</span></div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> <span class="comment">/// [OpenCL] '__kernel'</span></div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> <span class="comment">///       'friend': [C++ dcl.friend]</span></div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> <span class="comment">///       'constexpr': [C++0x dcl.constexpr]</span></div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseDeclarationSpecifiers(<a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS,</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>                                         <span class="keyword">const</span> ParsedTemplateInfo &TemplateInfo,</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>                                         <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988f" title="A C++ access specifier (public, private, protected), plus the special value "none" which means differ...">AccessSpecifier</a> AS,</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>                                         DeclSpecContext DSContext,</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>                                         LateParsedAttrList *LateAttrs) {</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>   <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a7b8a30b08c1fa1aac47e417167a8631f">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#ad4b210c1ce478d3e76c9e8e27bad7745">isInvalid</a>()) {</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#a38776fd8ea211cdd4b5bd48660659f4c">SetRangeStart</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>   }</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> </div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>   <span class="keywordtype">bool</span> EnteringContext = (DSContext == DSC_class || DSContext == DSC_top_level);</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>   <span class="keywordtype">bool</span> AttrsLastTime = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>   ParsedAttributesWithRange attrs(AttrFactory);</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>   <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>     <span class="keywordtype">bool</span> <a class="code" href="SourceManager_8cpp.html#a6e59ede49e08cae14bbbfa239c1f9b92">isInvalid</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *PrevSpec = 0;</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>     <span class="keywordtype">unsigned</span> DiagID = 0;</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> </div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> </div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>     <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>     DoneWithDeclSpec:</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>       <span class="keywordflow">if</span> (!AttrsLastTime)</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>         ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>         <span class="comment">// Reject C++11 attributes that appertain to decl specifiers as</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>         <span class="comment">// we don't support any C++11 attributes that appertain to decl</span></div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>         <span class="comment">// specifiers. This also conforms to what g++ 4.8 is doing.</span></div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>         ProhibitCXX11Attributes(attrs);</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> </div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#af2c90bf49db094ba955821df324218c9">takeAttributesFrom</a>(attrs);</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>       }</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> </div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>       <span class="comment">// If this is not a declaration specifier token, we're done reading decl</span></div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>       <span class="comment">// specifiers.  First verify that DeclSpec's are consistent.</span></div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a0fa092492d6de7c1bafe7aa65284364b">Finish</a>(Diags, PP);</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> </div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>     <span class="keywordflow">case</span> tok::l_square:</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>     <span class="keywordflow">case</span> tok::kw_alignas:</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>       <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> || !isCXX11AttributeSpecifier())</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> </div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>       ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>       <span class="comment">// FIXME: It would be good to recover by accepting the attributes,</span></div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>       <span class="comment">//        but attempting to do that now would cause serious</span></div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>       <span class="comment">//        madness in terms of diagnostics.</span></div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>       attrs.clear();</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>       attrs.Range = <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>();</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> </div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>       ParseCXX11Attributes(attrs);</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>       AttrsLastTime = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> </div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>     <span class="keywordflow">case</span> tok::code_completion: {</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>       <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4" title="Describes the context in which code completion occurs.">Sema::ParserCompletionContext</a> CCC = <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4aa37194067b3d4f6ec922e0a2939851f8" title="Code completion occurs at top-level or namespace context.">Sema::PCC_Namespace</a>;</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>()) {</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>         <span class="keywordtype">bool</span> AllowNonIdentifiers</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>           = (<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()-><a class="code" href="classclang_1_1Scope.html#a7316fa5306941f8557cc76a5c3997a45">getFlags</a>() & (<a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a3a2291c883095d9a70518437a087f9eb" title="The controlling scope in a if/switch/while/for statement.">Scope::ControlScope</a> |</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>                                           <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a1ef277d8f5494b76bb8d76acb5f772b7" title="This is a scope that corresponds to a block/closure object. Blocks serve as top-level scopes for some...">Scope::BlockScope</a> |</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>                                           <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a40ab45d2b9c9fca9a32b710f457d449a" title="This is a scope that corresponds to the template parameters of a C++ template. Template parameter sco...">Scope::TemplateParamScope</a> |</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>                                           <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a03e444466b6d5f544bd8fedbe94a7cdb" title="This is a scope that corresponds to the parameters within a function prototype.">Scope::FunctionPrototypeScope</a> |</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>                                           <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a3fdbf015095b45ffefe9938b526e5c35" title="This is a scope that corresponds to the Objective-C @catch statement.">Scope::AtCatchScope</a>)) == 0;</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>         <span class="keywordtype">bool</span> AllowNestedNameSpecifiers</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>           = DSContext == DSC_top_level ||</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>             (DSContext == DSC_class && DS.<a class="code" href="classclang_1_1DeclSpec.html#a102837205c9d404fc55dec8bcf7435e3">isFriendSpecified</a>());</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> </div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>         Actions.<a class="code" href="classclang_1_1Sema.html#aceaf04be30965417658ddfb379938445">CodeCompleteDeclSpec</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), DS,</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>                                      AllowNonIdentifiers,</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>                                      AllowNestedNameSpecifiers);</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>         <span class="keywordflow">return</span> cutOffParsing();</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>       }</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> </div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()->getFnParent() || <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()->getBlockParent())</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>         CCC = <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4a1502114d921726f9e8ddee4f91c5dcdb" title="Code completion occurs within a sequence of declaration specifiers within a function, method, or block.">Sema::PCC_LocalDeclarationSpecifiers</a>;</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate)</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>         CCC = DSContext == DSC_class? <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4a2b574353e9bb0206461284f36e7f0083" title="Code completion occurs following one or more template headers within a class.">Sema::PCC_MemberTemplate</a></div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>                                     : <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4a21de1168f8feb7dc43c7eb344d071c6a" title="Code completion occurs following one or more template headers.">Sema::PCC_Template</a>;</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (DSContext == DSC_class)</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>         CCC = <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4a61fefe0023931de1f9bc2c80b2fa4f50" title="Code completion occurs within a class, struct, or union.">Sema::PCC_Class</a>;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (CurParsedObjCImpl)</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>         CCC = <a class="code" href="classclang_1_1Sema.html#a9920bd1044f1c4fa6eaaf4097e5263e4a6792fd07b4fece70d2d505fb353a44e9" title="Code completion occurs within an Objective-C implementation or category implementation.">Sema::PCC_ObjCImplementation</a>;</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> </div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>       Actions.<a class="code" href="classclang_1_1Sema.html#ac525aae0ab06911b93313e480d3bc9c4">CodeCompleteOrdinaryName</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), CCC);</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>       <span class="keywordflow">return</span> cutOffParsing();</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>     }</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> </div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>     <span class="keywordflow">case</span> tok::coloncolon: <span class="comment">// ::foo::bar</span></div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>       <span class="comment">// C++ scope specifier.  Annotate and loop, or bail out on error.</span></div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#af6d88d3c2f1c4b03b72d93bde3f719b0">TryAnnotateCXXScopeToken</a>(EnteringContext)) {</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>         <span class="keywordflow">if</span> (!DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>())</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>       }</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::coloncolon)) <span class="comment">// ::new or ::delete</span></div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> </div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>     <span class="keywordflow">case</span> tok::annot_cxxscope: {</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>() || DS.<a class="code" href="classclang_1_1DeclSpec.html#a48d6499b55e34fce8a7555f3886c1238">isTypeAltiVecVector</a>())</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> </div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>       <a class="code" href="classclang_1_1CXXScopeSpec.html" title="Represents a C++ nested-name-specifier or a global scope specifier.">CXXScopeSpec</a> SS;</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>       Actions.<a class="code" href="classclang_1_1Sema.html#a9b1bd9aec09848db4124f9048fb72a98" title="Given an annotation pointer for a nested-name-specifier, restore the nested-name-specifier structure...">RestoreNestedNameSpecifierAnnotation</a>(Tok.<a class="code" href="classclang_1_1Token.html#a428dc637d123fb0d48a626eb77c4de25">getAnnotationValue</a>(),</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>                                                    Tok.<a class="code" href="classclang_1_1Token.html#a4912ff2ace18d707656b6d5e1605512a" title="SourceRange of the group of tokens that this annotation token represents.">getAnnotationRange</a>(),</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>                                                    SS);</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> </div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>       <span class="comment">// We are looking for a qualified typename.</span></div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>       <a class="code" href="classclang_1_1Token.html">Token</a> Next = <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>();</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>       <span class="keywordflow">if</span> (Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_template_id) &&</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>           <span class="keyword">static_cast<</span><a class="code" href="structclang_1_1TemplateIdAnnotation.html" title="Information about a template-id annotation token.">TemplateIdAnnotation</a> *<span class="keyword">></span>(Next.<a class="code" href="classclang_1_1Token.html#a428dc637d123fb0d48a626eb77c4de25">getAnnotationValue</a>())</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>             ->Kind == <a class="code" href="namespaceclang.html#aba1f53f66be2f1991ebd6cda5d781ae8a0f3e8265c71aa000cff6863ee506b898">TNK_Type_template</a>) {</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>         <span class="comment">// We have a qualified template-id, e.g., N::A<int></span></div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> </div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>         <span class="comment">// C++ [class.qual]p2:</span></div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>         <span class="comment">//   In a lookup in which the constructor is an acceptable lookup</span></div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>         <span class="comment">//   result and the nested-name-specifier nominates a class C:</span></div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>         <span class="comment">//</span></div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>         <span class="comment">//     - if the name specified after the</span></div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>         <span class="comment">//       nested-name-specifier, when looked up in C, is the</span></div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>         <span class="comment">//       injected-class-name of C (Clause 9), or</span></div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>         <span class="comment">//</span></div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>         <span class="comment">//     - if the name specified after the nested-name-specifier</span></div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>         <span class="comment">//       is the same as the identifier or the</span></div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>         <span class="comment">//       simple-template-id's template-name in the last</span></div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>         <span class="comment">//       component of the nested-name-specifier,</span></div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>         <span class="comment">//</span></div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>         <span class="comment">//   the name is instead considered to name the constructor of</span></div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>         <span class="comment">//   class C.</span></div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>         <span class="comment">//</span></div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>         <span class="comment">// Thus, if the template-name is actually the constructor</span></div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>         <span class="comment">// name, then the code is ill-formed; this interpretation is</span></div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>         <span class="comment">// reinforced by the NAD status of core issue 635.</span></div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>         <a class="code" href="structclang_1_1TemplateIdAnnotation.html" title="Information about a template-id annotation token.">TemplateIdAnnotation</a> *TemplateId = takeTemplateIdAnnotation(Next);</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>         <span class="keywordflow">if</span> ((DSContext == DSC_top_level || DSContext == DSC_class) &&</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>             TemplateId-><a class="code" href="structclang_1_1TemplateIdAnnotation.html#af1ea275591138b179ed87a01207967fb" title="FIXME: Temporarily stores the name of a specialization.">Name</a> &&</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>             Actions.<a class="code" href="classclang_1_1Sema.html#a36f3d122d2590b502f14ddcfdea9503b">isCurrentClassName</a>(*TemplateId-><a class="code" href="structclang_1_1TemplateIdAnnotation.html#af1ea275591138b179ed87a01207967fb" title="FIXME: Temporarily stores the name of a specialization.">Name</a>, <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), &SS)) {</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>           <span class="keywordflow">if</span> (isConstructorDeclarator()) {</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>             <span class="comment">// The user meant this to be an out-of-line constructor</span></div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>             <span class="comment">// definition, but template arguments are not allowed</span></div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>             <span class="comment">// there.  Just allow this as a constructor; we'll</span></div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>             <span class="comment">// complain about it later.</span></div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>             <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>           }</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> </div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>           <span class="comment">// The user meant this to name a type, but it actually names</span></div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>           <span class="comment">// a constructor with some extraneous template</span></div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>           <span class="comment">// arguments. Complain, then parse it as a type as the user</span></div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>           <span class="comment">// intended.</span></div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(TemplateId-><a class="code" href="structclang_1_1TemplateIdAnnotation.html#a6e495b35c0172af7838719f98b6296d9">TemplateNameLoc</a>,</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>                diag::err_out_of_line_template_id_names_constructor)</div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>             << TemplateId-><a class="code" href="structclang_1_1TemplateIdAnnotation.html#af1ea275591138b179ed87a01207967fb" title="FIXME: Temporarily stores the name of a specialization.">Name</a>;</div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>         }</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> </div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#aac9396ae32bf1c5824bcd55335f70e32">getTypeSpecScope</a>() = SS;</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The C++ scope.</span></div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>         assert(Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_template_id) &&</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>                <span class="stringliteral">"ParseOptionalCXXScopeSpecifier not working"</span>);</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>         AnnotateTemplateIdTokenAsType();</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>       }</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> </div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>       <span class="keywordflow">if</span> (Next.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_typename)) {</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#aac9396ae32bf1c5824bcd55335f70e32">getTypeSpecScope</a>() = SS;</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The C++ scope.</span></div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>         <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a428dc637d123fb0d48a626eb77c4de25">getAnnotationValue</a>()) {</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>           <a class="code" href="classclang_1_1OpaquePtr.html">ParsedType</a> T = <a class="code" href="classclang_1_1Parser.html#a6d0d9801cc98eea348a34eca70c45b69" title="getTypeAnnotation - Read a parsed type out of an annotation token.">getTypeAnnotation</a>(Tok);</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>           isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0ed31e8e239ed3e00e5181ca7bacf5aa">DeclSpec::TST_typename</a>,</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>                                          Tok.<a class="code" href="classclang_1_1Token.html#a924ea06e0e4510bc5f612d05ad53ffe3">getAnnotationEndLoc</a>(),</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>                                          PrevSpec, DiagID, T);</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>           <span class="keywordflow">if</span> (isInvalid)</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>         }</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a924ea06e0e4510bc5f612d05ad53ffe3">getAnnotationEndLoc</a>());</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The typename</span></div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>       }</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> </div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>       <span class="keywordflow">if</span> (Next.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier))</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span> </div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>       <span class="comment">// If we're in a context where the identifier could be a class name,</span></div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>       <span class="comment">// check whether this is a constructor declaration.</span></div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>       <span class="keywordflow">if</span> ((DSContext == DSC_top_level || DSContext == DSC_class) &&</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a36f3d122d2590b502f14ddcfdea9503b">isCurrentClassName</a>(*Next.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(), <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(),</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>                                      &SS)) {</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>         <span class="keywordflow">if</span> (isConstructorDeclarator())</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>           <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span> </div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>         <span class="comment">// As noted in C++ [class.qual]p2 (cited above), when the name</span></div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>         <span class="comment">// of the class is qualified in a context where it could name</span></div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>         <span class="comment">// a constructor, its a constructor name. However, we've</span></div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>         <span class="comment">// looked at the declarator, and the user probably meant this</span></div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>         <span class="comment">// to be a type. Complain that it isn't supposed to be treated</span></div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>         <span class="comment">// as a type, then proceed to parse it as a type.</span></div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Next.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_out_of_line_type_names_constructor)</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>           << Next.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>       }</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span> </div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>       <a class="code" href="classclang_1_1OpaquePtr.html">ParsedType</a> TypeRep = Actions.<a class="code" href="classclang_1_1Sema.html#a3bdae6d7d92cb79777f2bcaea9b1c4b0" title="If the identifier refers to a type name within this scope, return the declaration of that type...">getTypeName</a>(*Next.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(),</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>                                                Next.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(),</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>                                                <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), &SS,</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>                                                <span class="keyword">false</span>, <span class="keyword">false</span>, <a class="code" href="namespaceclang.html#aeb304ed08ffec14495690938d6bd95e2">ParsedType</a>(),</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>                                                <span class="comment">/*IsCtorOrDtorName=*/</span><span class="keyword">false</span>,</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>                                                <span class="comment">/*NonTrivialSourceInfo=*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span> </div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>       <span class="comment">// If the referenced identifier is not a type, then this declspec is</span></div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>       <span class="comment">// erroneous: We already checked about that it has no type specifier, and</span></div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>       <span class="comment">// C++ doesn't have implicit int.  Diagnose it as a typo w.r.t. to the</span></div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>       <span class="comment">// typename.</span></div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>       <span class="keywordflow">if</span> (!TypeRep) {</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();   <span class="comment">// Eat the scope spec so the identifier is current.</span></div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>         ParsedAttributesWithRange Attrs(AttrFactory);</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>         <span class="keywordflow">if</span> (ParseImplicitInt(DS, &SS, TemplateInfo, AS, DSContext, Attrs)) {</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>           <span class="keywordflow">if</span> (!Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#a30d43a6e61891eba38d140071abb24a8">empty</a>()) {</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>             AttrsLastTime = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>             attrs.takeAllFrom(Attrs);</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>           }</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>         }</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>       }</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span> </div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#aac9396ae32bf1c5824bcd55335f70e32">getTypeSpecScope</a>() = SS;</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The C++ scope.</span></div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span> </div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0ed31e8e239ed3e00e5181ca7bacf5aa">DeclSpec::TST_typename</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>                                      DiagID, TypeRep);</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>       <span class="keywordflow">if</span> (isInvalid)</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> </div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The typename.</span></div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> </div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>     }</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span> </div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>     <span class="keywordflow">case</span> tok::annot_typename: {</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>       <span class="comment">// If we've previously seen a tag definition, we were almost surely</span></div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>       <span class="comment">// missing a semicolon after it.</span></div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>() && DS.<a class="code" href="classclang_1_1DeclSpec.html#ae312c0a325b2ca5857b65f9ac8003dfb">hasTagDefinition</a>())</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span> </div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a428dc637d123fb0d48a626eb77c4de25">getAnnotationValue</a>()) {</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>         <a class="code" href="classclang_1_1OpaquePtr.html">ParsedType</a> T = <a class="code" href="classclang_1_1Parser.html#a6d0d9801cc98eea348a34eca70c45b69" title="getTypeAnnotation - Read a parsed type out of an annotation token.">getTypeAnnotation</a>(Tok);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0ed31e8e239ed3e00e5181ca7bacf5aa">DeclSpec::TST_typename</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>                                        DiagID, T);</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>       } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> </div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>       <span class="keywordflow">if</span> (isInvalid)</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span> </div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a924ea06e0e4510bc5f612d05ad53ffe3">getAnnotationEndLoc</a>());</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The typename</span></div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> </div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>       <span class="comment">// Objective-C supports syntax of the form 'id<proto1,proto2>' where 'id'</span></div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>       <span class="comment">// is a specific typedef and 'itf<proto1,proto2>' where 'itf' is an</span></div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>       <span class="comment">// Objective-C interface.</span></div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::less) && <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC1)</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>         ParseObjCProtocolQualifiers(DS);</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> </div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>     }</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span> </div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>     <span class="keywordflow">case</span> tok::kw___is_signed:</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>       <span class="comment">// GNU libstdc++ 4.4 uses __is_signed as an identifier, but Clang</span></div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>       <span class="comment">// typically treats it as a trait. If we see __is_signed as it appears</span></div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>       <span class="comment">// in libstdc++, e.g.,</span></div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>       <span class="comment">//</span></div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>       <span class="comment">//   static const bool __is_signed;</span></div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>       <span class="comment">//</span></div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>       <span class="comment">// then treat __is_signed as an identifier rather than as a keyword.</span></div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a8e80657590008634115a6fe1d31f7600">getTypeSpecType</a>() == <a class="code" href="namespaceclang.html#a033691a5f00979c1a22d8aa114d07e13adc9629dec86856c53e4fd2ba4d2a0ed9">TST_bool</a> &&</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a37e97f6b9e2b185e8d3673c6805852a2">DeclSpec::TQ_const</a> &&</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#a21616b8df7b2fd0305197604ab31ca71">getStorageClassSpec</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4afb75696c1be275c78b89e544a0596a0d">DeclSpec::SCS_static</a>)</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>         TryKeywordIdentFallback(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span> </div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>       <span class="comment">// We're done with the declaration-specifiers.</span></div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>       <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span> </div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>       <span class="comment">// typedef-name</span></div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>     <span class="keywordflow">case</span> tok::kw_decltype:</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>     <span class="keywordflow">case</span> tok::identifier: {</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>       <span class="comment">// In C++, check to see if this is a scope specifier like foo::bar::, if</span></div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>       <span class="comment">// so handle it as such.  This is important for ctor parsing.</span></div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus) {</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>         <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#af6d88d3c2f1c4b03b72d93bde3f719b0">TryAnnotateCXXScopeToken</a>(EnteringContext)) {</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>           <span class="keywordflow">if</span> (!DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>())</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>             DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>           <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>         }</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>         <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier))</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>       }</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> </div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>       <span class="comment">// This identifier can only be a typedef name if we haven't already seen</span></div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>       <span class="comment">// a type-specifier.  Without this check we misparse:</span></div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>       <span class="comment">//  typedef int X; struct Y { short X; };  as 'short int'.</span></div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>())</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span> </div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>       <span class="comment">// Check for need to substitute AltiVec keyword tokens.</span></div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>       <span class="keywordflow">if</span> (TryAltiVecToken(DS, Loc, PrevSpec, DiagID, isInvalid))</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span> </div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>       <span class="comment">// [AltiVec] 2.2: [If the 'vector' specifier is used] The syntax does not</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>       <span class="comment">//                allow the use of a typedef name as a type specifier.</span></div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a48d6499b55e34fce8a7555f3886c1238">isTypeAltiVecVector</a>())</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span> </div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>       <a class="code" href="classclang_1_1OpaquePtr.html">ParsedType</a> TypeRep =</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>         Actions.<a class="code" href="classclang_1_1Sema.html#a3bdae6d7d92cb79777f2bcaea9b1c4b0" title="If the identifier refers to a type name within this scope, return the declaration of that type...">getTypeName</a>(*Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(),</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>                             Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>());</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> </div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>       <span class="comment">// If this is not a typedef name, don't parse it as part of the declspec,</span></div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>       <span class="comment">// it must be an implicit int or an error.</span></div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>       <span class="keywordflow">if</span> (!TypeRep) {</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>         ParsedAttributesWithRange Attrs(AttrFactory);</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>         <span class="keywordflow">if</span> (ParseImplicitInt(DS, 0, TemplateInfo, AS, DSContext, Attrs)) {</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>           <span class="keywordflow">if</span> (!Attrs.<a class="code" href="classclang_1_1ParsedAttributes.html#a30d43a6e61891eba38d140071abb24a8">empty</a>()) {</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>             AttrsLastTime = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>             attrs.takeAllFrom(Attrs);</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>           }</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>         }</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>       }</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span> </div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>       <span class="comment">// If we're in a context where the identifier could be a class name,</span></div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>       <span class="comment">// check whether this is a constructor declaration.</span></div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && DSContext == DSC_class &&</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a36f3d122d2590b502f14ddcfdea9503b">isCurrentClassName</a>(*Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(), <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()) &&</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>           isConstructorDeclarator())</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span> </div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0ed31e8e239ed3e00e5181ca7bacf5aa">DeclSpec::TST_typename</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>                                      DiagID, TypeRep);</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>       <span class="keywordflow">if</span> (isInvalid)</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span> </div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>(); <span class="comment">// The identifier</span></div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span> </div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>       <span class="comment">// Objective-C supports syntax of the form 'id<proto1,proto2>' where 'id'</span></div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>       <span class="comment">// is a specific typedef and 'itf<proto1,proto2>' where 'itf' is an</span></div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>       <span class="comment">// Objective-C interface.</span></div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::less) && <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC1)</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>         ParseObjCProtocolQualifiers(DS);</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span> </div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>       <span class="comment">// Need to support trailing type qualifiers (e.g. "id<p> const").</span></div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>       <span class="comment">// If a type specifier follows, it will be diagnosed elsewhere.</span></div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>     }</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> </div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>       <span class="comment">// type-name</span></div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>     <span class="keywordflow">case</span> tok::annot_template_id: {</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>       <a class="code" href="structclang_1_1TemplateIdAnnotation.html" title="Information about a template-id annotation token.">TemplateIdAnnotation</a> *TemplateId = takeTemplateIdAnnotation(Tok);</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>       <span class="keywordflow">if</span> (TemplateId-><a class="code" href="structclang_1_1TemplateIdAnnotation.html#a3cc5d86a615ad829824dd35d8f3d7ee6" title="The kind of template that Template refers to.">Kind</a> != <a class="code" href="namespaceclang.html#aba1f53f66be2f1991ebd6cda5d781ae8a0f3e8265c71aa000cff6863ee506b898">TNK_Type_template</a>) {</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>         <span class="comment">// This template-id does not refer to a type name, so we're</span></div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>         <span class="comment">// done with the type-specifiers.</span></div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>       }</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span> </div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>       <span class="comment">// If we're in a context where the template-id could be a</span></div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>       <span class="comment">// constructor name or specialization, check whether this is a</span></div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>       <span class="comment">// constructor declaration.</span></div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && DSContext == DSC_class &&</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a36f3d122d2590b502f14ddcfdea9503b">isCurrentClassName</a>(*TemplateId-><a class="code" href="structclang_1_1TemplateIdAnnotation.html#af1ea275591138b179ed87a01207967fb" title="FIXME: Temporarily stores the name of a specialization.">Name</a>, <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()) &&</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>           isConstructorDeclarator())</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span> </div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>       <span class="comment">// Turn the template-id annotation token into a type annotation</span></div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>       <span class="comment">// token, then try again to parse it as a type-specifier.</span></div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>       AnnotateTemplateIdTokenAsType();</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>     }</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> </div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>     <span class="comment">// GNU attributes support.</span></div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>     <span class="keywordflow">case</span> tok::kw___attribute:</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>       ParseGNUAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>(), 0, LateAttrs);</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span> </div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>     <span class="comment">// Microsoft declspec support.</span></div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>     <span class="keywordflow">case</span> tok::kw___declspec:</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>       ParseMicrosoftDeclSpec(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span> </div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>     <span class="comment">// Microsoft single token adornments.</span></div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>     <span class="keywordflow">case</span> tok::kw___forceinline: {</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af17c55d33d3b4142f3e0938585352807">setFunctionSpecForceInline</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>       <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *AttrName = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> AttrNameLoc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>       <span class="comment">// FIXME: This does not work correctly if it is set to be a declspec</span></div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>       <span class="comment">//        attribute, and a GNU attribute is simply incorrect.</span></div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>().<a class="code" href="classclang_1_1ParsedAttributes.html#aa46509e0ecf15308c427adf0c2814c23" title="Add attribute with expression arguments.">addNew</a>(AttrName, AttrNameLoc, 0, AttrNameLoc, 0, 0,</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>                                 <a class="code" href="classclang_1_1AttributeList.html#a7e6e722d96e46b102c1de17fea3a6374a0bf6a4c4b559fe779e07ad7dfe51621b" title="attribute((...))">AttributeList::AS_GNU</a>);</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>     }</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span> </div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>     <span class="keywordflow">case</span> tok::kw___sptr:</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>     <span class="keywordflow">case</span> tok::kw___uptr:</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>     <span class="keywordflow">case</span> tok::kw___ptr64:</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>     <span class="keywordflow">case</span> tok::kw___ptr32:</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>     <span class="keywordflow">case</span> tok::kw___w64:</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>     <span class="keywordflow">case</span> tok::kw___cdecl:</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>     <span class="keywordflow">case</span> tok::kw___stdcall:</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>     <span class="keywordflow">case</span> tok::kw___fastcall:</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>     <span class="keywordflow">case</span> tok::kw___thiscall:</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>     <span class="keywordflow">case</span> tok::kw___unaligned:</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>       ParseMicrosoftTypeAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span> </div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>     <span class="comment">// Borland single token adornments.</span></div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>     <span class="keywordflow">case</span> tok::kw___pascal:</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>       ParseBorlandTypeAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> </div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>     <span class="comment">// OpenCL single token adornments.</span></div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>     <span class="keywordflow">case</span> tok::kw___kernel:</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>       ParseOpenCLAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span> </div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>     <span class="comment">// storage-class-specifier</span></div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>     <span class="keywordflow">case</span> tok::kw_typedef:</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a011d480a161c7912d7e7bce118fbeda0">DeclSpec::SCS_typedef</a>, Loc,</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>                                          PrevSpec, DiagID);</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>     <span class="keywordflow">case</span> tok::kw_extern:</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a3005a209c14bc4666de4294439ca3e33">getThreadStorageClassSpec</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a05b57cc8e8fbb0df263942351c135ad9">DeclSpec::TSCS___thread</a>)</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::ext_thread_before) << <span class="stringliteral">"extern"</span>;</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a32641ae86aa6300eab150d423d1122f5">DeclSpec::SCS_extern</a>, Loc,</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>                                          PrevSpec, DiagID);</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>     <span class="keywordflow">case</span> tok::kw___private_extern__:</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4aaca9afca91d6f11a05432592cb9b0bb1">DeclSpec::SCS_private_extern</a>,</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>                                          Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>     <span class="keywordflow">case</span> tok::kw_static:</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a3005a209c14bc4666de4294439ca3e33">getThreadStorageClassSpec</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a05b57cc8e8fbb0df263942351c135ad9">DeclSpec::TSCS___thread</a>)</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::ext_thread_before) << <span class="stringliteral">"static"</span>;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4afb75696c1be275c78b89e544a0596a0d">DeclSpec::SCS_static</a>, Loc,</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>                                          PrevSpec, DiagID);</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>     <span class="keywordflow">case</span> tok::kw_auto:</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a>) {</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>         <span class="keywordflow">if</span> (isKnownToBeTypeSpecifier(GetLookAheadToken(1))) {</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>           isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4ad59ca598f4220d106b131cf0072bf796">DeclSpec::SCS_auto</a>, Loc,</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>                                              PrevSpec, DiagID);</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>           <span class="keywordflow">if</span> (!isInvalid)</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>             <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::ext_auto_storage_class)</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>               << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a05cd671221b98918a44c6e28b6bbedc1">getStorageClassSpecLoc</a>());</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>         } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>           isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#afa5232481ceb61f6efe4773005977d08">DeclSpec::TST_auto</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>                                          DiagID);</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>       } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4ad59ca598f4220d106b131cf0072bf796">DeclSpec::SCS_auto</a>, Loc,</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>                                            PrevSpec, DiagID);</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>     <span class="keywordflow">case</span> tok::kw_register:</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a9306080f4a4052c6bc3bf6d57a256405">DeclSpec::SCS_register</a>, Loc,</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>                                          PrevSpec, DiagID);</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>     <span class="keywordflow">case</span> tok::kw_mutable:</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab0b2f83fe53e8c73e521d4421cf81539">SetStorageClassSpec</a>(Actions, <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a56cc0939d05f5fcb4dec2de7954260eb">DeclSpec::SCS_mutable</a>, Loc,</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>                                          PrevSpec, DiagID);</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>     <span class="keywordflow">case</span> tok::kw___thread:</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a2f4cb6b362bf943fe77582223fcceff0">SetStorageClassSpecThread</a>(<a class="code" href="classclang_1_1DeclSpec.html#a05b57cc8e8fbb0df263942351c135ad9">DeclSpec::TSCS___thread</a>, Loc,</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>                                                PrevSpec, DiagID);</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>     <span class="keywordflow">case</span> tok::kw_thread_local:</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a2f4cb6b362bf943fe77582223fcceff0">SetStorageClassSpecThread</a>(<a class="code" href="classclang_1_1DeclSpec.html#ad7901bde7cec9b8028646e3881ec09d8">DeclSpec::TSCS_thread_local</a>, Loc,</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>                                                PrevSpec, DiagID);</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>     <span class="keywordflow">case</span> tok::kw__Thread_local:</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a2f4cb6b362bf943fe77582223fcceff0">SetStorageClassSpecThread</a>(<a class="code" href="classclang_1_1DeclSpec.html#a1dbd1f0bb1f67734cd6d23cf08641cb4">DeclSpec::TSCS__Thread_local</a>,</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>                                                Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span> </div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>     <span class="comment">// function-specifier</span></div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>     <span class="keywordflow">case</span> tok::kw_inline:</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ae0af5d764273181e11fd6ad08b009957">setFunctionSpecInline</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>     <span class="keywordflow">case</span> tok::kw_virtual:</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ada1410ed445689c387ee4e226e0ed414">setFunctionSpecVirtual</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>     <span class="keywordflow">case</span> tok::kw_explicit:</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a44993153964c366bfeb9c02f066437c2">setFunctionSpecExplicit</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>     <span class="keywordflow">case</span> tok::kw__Noreturn:</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>       <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaa2cbf73fee2e4461c74eaf3e8aed60b2">C11</a>)</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::ext_c11_noreturn);</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a626ddcc8171fed085f763f7e22497d85">setFunctionSpecNoreturn</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>     <span class="comment">// alignment-specifier</span></div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>     <span class="keywordflow">case</span> tok::kw__Alignas:</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>       <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaa2cbf73fee2e4461c74eaf3e8aed60b2">C11</a>)</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::ext_c11_alignment) << Tok.<a class="code" href="classclang_1_1Token.html#acfb661bd927fbdfd10b1adfe48f0285d">getName</a>();</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>       ParseAlignmentSpecifier(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span> </div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>     <span class="comment">// friend</span></div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>     <span class="keywordflow">case</span> tok::kw_friend:</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>       <span class="keywordflow">if</span> (DSContext == DSC_class)</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a3c151c78355c69552c11edb9d4bb2d83">SetFriendSpec</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>         PrevSpec = <span class="stringliteral">""</span>; <span class="comment">// not actually used by the diagnostic</span></div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>         DiagID = diag::err_friend_invalid_in_context;</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>         isInvalid = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>       }</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> </div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>     <span class="comment">// Modules</span></div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>     <span class="keywordflow">case</span> tok::kw___module_private__:</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a27436319b7e88584fd99cdf20c5a7aa3">setModulePrivateSpec</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> </div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>     <span class="comment">// constexpr</span></div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>     <span class="keywordflow">case</span> tok::kw_constexpr:</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#ab890c49b1cbb1bc156baee09047d2cb1">SetConstexprSpec</a>(Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> </div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>     <span class="comment">// type-specifier</span></div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>     <span class="keywordflow">case</span> tok::kw_short:</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af672dad7c89050c0caaed5d805657c02">SetTypeSpecWidth</a>(<a class="code" href="classclang_1_1DeclSpec.html#a49c27369566f6460bd474f12f51847fd">DeclSpec::TSW_short</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>                                       DiagID);</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>     <span class="keywordflow">case</span> tok::kw_long:</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a891381e70b33f3e8e459a294ac08d98f">getTypeSpecWidth</a>() != <a class="code" href="classclang_1_1DeclSpec.html#aa1644e681fa00b55273c482ff459da9f">DeclSpec::TSW_long</a>)</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af672dad7c89050c0caaed5d805657c02">SetTypeSpecWidth</a>(<a class="code" href="classclang_1_1DeclSpec.html#aa1644e681fa00b55273c482ff459da9f">DeclSpec::TSW_long</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>                                         DiagID);</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af672dad7c89050c0caaed5d805657c02">SetTypeSpecWidth</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0b8e126dc575e03af850eb70d629be39">DeclSpec::TSW_longlong</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>                                         DiagID);</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>     <span class="keywordflow">case</span> tok::kw___int64:</div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af672dad7c89050c0caaed5d805657c02">SetTypeSpecWidth</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0b8e126dc575e03af850eb70d629be39">DeclSpec::TSW_longlong</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>                                         DiagID);</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>     <span class="keywordflow">case</span> tok::kw_signed:</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a7143bbfe9fc9b8e3a92949fe664ac0db">SetTypeSpecSign</a>(<a class="code" href="classclang_1_1DeclSpec.html#a61e0d03f6c73b59bec622bcdad231372">DeclSpec::TSS_signed</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>                                      DiagID);</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>     <span class="keywordflow">case</span> tok::kw_unsigned:</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a7143bbfe9fc9b8e3a92949fe664ac0db">SetTypeSpecSign</a>(<a class="code" href="classclang_1_1DeclSpec.html#abf09946e64ea716302e6c587d00fde12">DeclSpec::TSS_unsigned</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>                                      DiagID);</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>     <span class="keywordflow">case</span> tok::kw__Complex:</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a538cd1d09d08b6eb786c121da4a704c9">SetTypeSpecComplex</a>(<a class="code" href="classclang_1_1DeclSpec.html#a1bf13f41f67bbe98b35ce04d19b09b42ab1d67ec76fc0ee8729d1c3c7b1fdd1fc">DeclSpec::TSC_complex</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>                                         DiagID);</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>     <span class="keywordflow">case</span> tok::kw__Imaginary:</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a538cd1d09d08b6eb786c121da4a704c9">SetTypeSpecComplex</a>(<a class="code" href="classclang_1_1DeclSpec.html#a1bf13f41f67bbe98b35ce04d19b09b42a284c7bce6be95d78b2ba4538661dc751">DeclSpec::TSC_imaginary</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>                                         DiagID);</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>     <span class="keywordflow">case</span> tok::kw_void:</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#ab106e879cd36e7ee14ad49949fd06ce8">DeclSpec::TST_void</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>                                      DiagID);</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>     <span class="keywordflow">case</span> tok::kw_char:</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a46691b2cf6fb5eec0bb79829c40c7a95">DeclSpec::TST_char</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>                                      DiagID);</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>     <span class="keywordflow">case</span> tok::kw_int:</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a4fb6177b24f3515ac5dd81175be31208">DeclSpec::TST_int</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>                                      DiagID);</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>     <span class="keywordflow">case</span> tok::kw___int128:</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#ae9ee0d497225cab4bca7cea38e33aa38">DeclSpec::TST_int128</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>                                      DiagID);</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>     <span class="keywordflow">case</span> tok::kw_half:</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a68bbc30358914070df0253f289648fbc">DeclSpec::TST_half</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>                                      DiagID);</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>     <span class="keywordflow">case</span> tok::kw_float:</div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#abccc2c8debbb8138c0a6a18ce36334e7">DeclSpec::TST_float</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>                                      DiagID);</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>     <span class="keywordflow">case</span> tok::kw_double:</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a33c619731019f94dab4d566d9ea24807">DeclSpec::TST_double</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>                                      DiagID);</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>     <span class="keywordflow">case</span> tok::kw_wchar_t:</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#aaecf66d5df3c6f1d1d2d6a7e3432f819">DeclSpec::TST_wchar</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>                                      DiagID);</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>     <span class="keywordflow">case</span> tok::kw_char16_t:</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a481e440fe8040af7c804e4acd03a6d34">DeclSpec::TST_char16</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>                                      DiagID);</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>     <span class="keywordflow">case</span> tok::kw_char32_t:</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#ae03004b8210ac3f5d270a1ff2bd1dca7">DeclSpec::TST_char32</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>                                      DiagID);</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>     <span class="keywordflow">case</span> tok::kw_bool:</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>     <span class="keywordflow">case</span> tok::kw__Bool:</div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_bool) &&</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#a8e80657590008634115a6fe1d31f7600">getTypeSpecType</a>() != <a class="code" href="classclang_1_1DeclSpec.html#ac7b75c8498ffe58ffc79763e1548d549">DeclSpec::TST_unspecified</a> &&</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>           DS.<a class="code" href="classclang_1_1DeclSpec.html#a21616b8df7b2fd0305197604ab31ca71">getStorageClassSpec</a>() == <a class="code" href="classclang_1_1DeclSpec.html#a4b96d236218cac3d52edb71876f64da4a011d480a161c7912d7e7bce118fbeda0">DeclSpec::SCS_typedef</a>) {</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>         PrevSpec = <span class="stringliteral">""</span>; <span class="comment">// Not used by the diagnostic.</span></div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>         DiagID = diag::err_bool_redeclaration;</div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>         <span class="comment">// For better error recovery.</span></div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>         Tok.<a class="code" href="classclang_1_1Token.html#a44b757baba649ad00b79f78671a8a2aa">setKind</a>(tok::identifier);</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>         isInvalid = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>         isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a47d318501c7842b2b22e85a9cbb50d88">DeclSpec::TST_bool</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>                                        DiagID);</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>       }</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>     <span class="keywordflow">case</span> tok::kw__Decimal32:</div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#adb827794a8c7d01d67fb83339a026a84">DeclSpec::TST_decimal32</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>                                      DiagID);</div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>     <span class="keywordflow">case</span> tok::kw__Decimal64:</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#aa22cc79ba3bbebd7362f70889210b893">DeclSpec::TST_decimal64</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>                                      DiagID);</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>     <span class="keywordflow">case</span> tok::kw__Decimal128:</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#ae0ed1c1c991f16a0d49028be90a0644b">DeclSpec::TST_decimal128</a>, Loc, PrevSpec,</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>                                      DiagID);</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>     <span class="keywordflow">case</span> tok::kw___vector:</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a830cc30cd6f68487437f0bb9d1708d59">SetTypeAltiVecVector</a>(<span class="keyword">true</span>, Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>     <span class="keywordflow">case</span> tok::kw___pixel:</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#a9cc2685edf221d9c282bc9d0913fbc43">SetTypeAltiVecPixel</a>(<span class="keyword">true</span>, Loc, PrevSpec, DiagID);</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>     <span class="keywordflow">case</span> tok::kw_image1d_t:</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>        isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a08159797d099d185a3f1ba5077acd6e1">DeclSpec::TST_image1d_t</a>, Loc,</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>                                       PrevSpec, DiagID);</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>     <span class="keywordflow">case</span> tok::kw_image1d_array_t:</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>        isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a31f5fa2ca1cca6b25f09da3a726c3c96">DeclSpec::TST_image1d_array_t</a>, Loc,</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>                                       PrevSpec, DiagID);</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>     <span class="keywordflow">case</span> tok::kw_image1d_buffer_t:</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>        isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#af9953fee4fa250983b21e18baebb14d0">DeclSpec::TST_image1d_buffer_t</a>, Loc,</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>                                       PrevSpec, DiagID);</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>     <span class="keywordflow">case</span> tok::kw_image2d_t:</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>        isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a6fef07d6993b4450995548872be0b340">DeclSpec::TST_image2d_t</a>, Loc,</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>                                       PrevSpec, DiagID);</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>     <span class="keywordflow">case</span> tok::kw_image2d_array_t:</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>        isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a01e0aa5115b36e0ac47bcd7551343ca9">DeclSpec::TST_image2d_array_t</a>, Loc,</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>                                       PrevSpec, DiagID);</div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>     <span class="keywordflow">case</span> tok::kw_image3d_t:</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#ac013d7c33ba58f454e861cc8e466dfcd">DeclSpec::TST_image3d_t</a>, Loc,</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>                                      PrevSpec, DiagID);</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>     <span class="keywordflow">case</span> tok::kw_sampler_t:</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#ac1db9ad1334b0c6753a9280fcb61d314">DeclSpec::TST_sampler_t</a>, Loc,</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>                                      PrevSpec, DiagID);</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>     <span class="keywordflow">case</span> tok::kw_event_t:</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a52f6e0e0425e60b801b4122bafc31728">DeclSpec::TST_event_t</a>, Loc,</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>                                      PrevSpec, DiagID);</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>     <span class="keywordflow">case</span> tok::kw___unknown_anytype:</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="namespaceclang.html#a033691a5f00979c1a22d8aa114d07e13ae467ddf4b0f97d58b0ae024362d55e1e">TST_unknown_anytype</a>, Loc,</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>                                      PrevSpec, DiagID);</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span> </div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>     <span class="comment">// class-specifier:</span></div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>     <span class="keywordflow">case</span> tok::kw_class:</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>     <span class="keywordflow">case</span> tok::kw_struct:</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>     <span class="keywordflow">case</span> tok::kw___interface:</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>     <span class="keywordflow">case</span> tok::kw_union: {</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>       <a class="code" href="namespaceclang_1_1tok.html#aca39774690bea476816dc56565cb7cd5" title="Provides a simple uniform namespace for tokens from all C languages.">tok::TokenKind</a> Kind = Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>();</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span> </div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>       <span class="comment">// These are attributes following class specifiers.</span></div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>       <span class="comment">// To produce better diagnostic, we parse them when</span></div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>       <span class="comment">// parsing class specifier.</span></div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>       ParsedAttributesWithRange <a class="code" href="structclang_1_1Attributes.html" title="The set of attributes that can be attached to a module.">Attributes</a>(AttrFactory);</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>       ParseClassSpecifier(Kind, Loc, DS, TemplateInfo, AS,</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>                           EnteringContext, DSContext, <a class="code" href="structclang_1_1Attributes.html" title="The set of attributes that can be attached to a module.">Attributes</a>);</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span> </div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>       <span class="comment">// If there are attributes following class specifier,</span></div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>       <span class="comment">// take them over and handle them here.</span></div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>       <span class="keywordflow">if</span> (!<a class="code" href="structclang_1_1Attributes.html" title="The set of attributes that can be attached to a module.">Attributes</a>.empty()) {</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>         AttrsLastTime = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>         attrs.takeAllFrom(<a class="code" href="structclang_1_1Attributes.html" title="The set of attributes that can be attached to a module.">Attributes</a>);</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>       }</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>     }</div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span> </div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>     <span class="comment">// enum-specifier:</span></div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>     <span class="keywordflow">case</span> tok::kw_enum:</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>       ParseEnumSpecifier(Loc, DS, TemplateInfo, AS, DSContext);</div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span> </div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>     <span class="comment">// cv-qualifier:</span></div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>     <span class="keywordflow">case</span> tok::kw_const:</div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a37e97f6b9e2b185e8d3673c6805852a2">DeclSpec::TQ_const</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>     <span class="keywordflow">case</span> tok::kw_volatile:</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858acc41f6b86fe9124e33ea9ae583c34d04">DeclSpec::TQ_volatile</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>     <span class="keywordflow">case</span> tok::kw_restrict:</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a940c72c42a27037fd0c002e17406c7da">DeclSpec::TQ_restrict</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span> </div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>     <span class="comment">// C++ typename-specifier:</span></div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>     <span class="keywordflow">case</span> tok::kw_typename:</div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a6a05dc9fb5788cbe37c727e89324c04d">TryAnnotateTypeOrScopeToken</a>()) {</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>       }</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>       <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_typename))</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span> </div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>     <span class="comment">// GNU typeof support.</span></div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>     <span class="keywordflow">case</span> tok::kw_typeof:</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>       ParseTypeofSpecifier(DS);</div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span> </div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>     <span class="keywordflow">case</span> tok::annot_decltype:</div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>       ParseDecltypeSpecifier(DS);</div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span> </div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>     <span class="keywordflow">case</span> tok::kw___underlying_type:</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>       ParseUnderlyingTypeSpecifier(DS);</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> </div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>     <span class="keywordflow">case</span> tok::kw__Atomic:</div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>       <span class="comment">// C11 6.7.2.4/4:</span></div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>       <span class="comment">//   If the _Atomic keyword is immediately followed by a left parenthesis,</span></div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>       <span class="comment">//   it is interpreted as a type specifier (with a type name), not as a</span></div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>       <span class="comment">//   type qualifier.</span></div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::l_paren)) {</div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>         ParseAtomicSpecifier(DS);</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>       }</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a72437f2a8423fd3d585cd5e139efa580">DeclSpec::TQ_atomic</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span> </div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>     <span class="comment">// OpenCL qualifiers:</span></div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>     <span class="keywordflow">case</span> tok::kw_private:</div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>       <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().OpenCL)</div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>     <span class="keywordflow">case</span> tok::kw___private:</div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>     <span class="keywordflow">case</span> tok::kw___global:</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>     <span class="keywordflow">case</span> tok::kw___local:</div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>     <span class="keywordflow">case</span> tok::kw___constant:</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>     <span class="keywordflow">case</span> tok::kw___read_only:</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>     <span class="keywordflow">case</span> tok::kw___write_only:</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>     <span class="keywordflow">case</span> tok::kw___read_write:</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>       ParseOpenCLQualifiers(DS);</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span> </div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>     <span class="keywordflow">case</span> tok::less:</div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>       <span class="comment">// GCC ObjC supports types like "<SomeProtocol>" as a synonym for</span></div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>       <span class="comment">// "id<SomeProtocol>".  This is hopelessly old fashioned and dangerous,</span></div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>       <span class="comment">// but we support it.</span></div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>() || !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC1)</div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>         <span class="keywordflow">goto</span> DoneWithDeclSpec;</div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span> </div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>       <span class="keywordflow">if</span> (!ParseObjCProtocolQualifiers(DS))</div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::warn_objc_protocol_qualifier_missing_id)</div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>           << <a class="code" href="classclang_1_1FixItHint.html#afd481d826e9ddaa39fc82a698a810246" title="Create a code modification hint that inserts the given code string at a specific location.">FixItHint::CreateInsertion</a>(Loc, <span class="stringliteral">"id"</span>)</div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>           << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(Loc, DS.<a class="code" href="classclang_1_1DeclSpec.html#a7b8a30b08c1fa1aac47e417167a8631f">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>());</div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span> </div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>       <span class="comment">// Need to support trailing type qualifiers (e.g. "id<p> const").</span></div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>       <span class="comment">// If a type specifier follows, it will be diagnosed elsewhere.</span></div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>     }</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>     <span class="comment">// If the specifier wasn't legal, issue a diagnostic.</span></div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>     <span class="keywordflow">if</span> (isInvalid) {</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>       assert(PrevSpec && <span class="stringliteral">"Method did not return previous specifier!"</span>);</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>       assert(DiagID);</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span> </div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>       <span class="keywordflow">if</span> (DiagID == diag::ext_duplicate_declspec)</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, DiagID)</div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>           << PrevSpec << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, DiagID) << PrevSpec;</div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>     }</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span> </div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>     <span class="keywordflow">if</span> (DiagID != diag::err_bool_redeclaration)</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span> </div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>     AttrsLastTime = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>   }</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> }</div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> <span class="comment"></span></div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span> <span class="comment">/// ParseStructDeclaration - Parse a struct declaration without the terminating</span></div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span> <span class="comment">/// semicolon.</span></div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span> <span class="comment">///       struct-declaration:</span></div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> <span class="comment">///         specifier-qualifier-list struct-declarator-list</span></div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> <span class="comment">/// [GNU]   __extension__ struct-declaration</span></div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span> <span class="comment">/// [GNU]   specifier-qualifier-list</span></div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> <span class="comment">///       struct-declarator-list:</span></div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span> <span class="comment">///         struct-declarator</span></div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span> <span class="comment">///         struct-declarator-list ',' struct-declarator</span></div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span> <span class="comment">/// [GNU]   struct-declarator-list ',' attributes[opt] struct-declarator</span></div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span> <span class="comment">///       struct-declarator:</span></div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> <span class="comment">///         declarator</span></div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> <span class="comment">/// [GNU]   declarator attributes[opt]</span></div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span> <span class="comment">///         declarator[opt] ':' constant-expression</span></div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span> <span class="comment">/// [GNU]   declarator[opt] ':' constant-expression attributes[opt]</span></div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::</div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span> ParseStructDeclaration(<a class="code" href="classclang_1_1ParsingDeclSpec.html" title="A class for parsing a DeclSpec.">ParsingDeclSpec</a> &DS, FieldCallback &Fields) {</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> </div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___extension__)) {</div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>     <span class="comment">// __extension__ silences extension warnings in the subexpression.</span></div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>     <a class="code" href="classclang_1_1ExtensionRAIIObject.html">ExtensionRAIIObject</a> O(Diags);  <span class="comment">// Use RAII to do this.</span></div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>     <span class="keywordflow">return</span> ParseStructDeclaration(DS, Fields);</div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>   }</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span> </div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>   <span class="comment">// Parse the common specifier-qualifiers-list piece.</span></div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>   ParseSpecifierQualifierList(DS);</div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span> </div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>   <span class="comment">// If there are no declarators, this is a free-standing declaration</span></div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>   <span class="comment">// specifier. Let the actions module cope with it.</span></div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) {</div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>     <a class="code" href="classclang_1_1Decl.html">Decl</a> *TheDecl = Actions.<a class="code" href="classclang_1_1Sema.html#acfe6c814a028e46343b0bc069e88c4cf">ParsedFreeStandingDeclSpec</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988fa24d2c10b569678923a7bff78b68cb02b">AS_none</a>,</div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>                                                        DS);</div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>     DS.<a class="code" href="classclang_1_1ParsingDeclSpec.html#acbb3270e8f076c021d07600255c53865">complete</a>(TheDecl);</div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>   }</div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span> </div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>   <span class="comment">// Read struct-declarators until we find the semicolon.</span></div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>   <span class="keywordtype">bool</span> FirstDeclarator = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> CommaLoc;</div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>   <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>     <a class="code" href="classclang_1_1ParsingFieldDeclarator.html" title="A class for parsing a field declarator.">ParsingFieldDeclarator</a> DeclaratorInfo(*<span class="keyword">this</span>, DS);</div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>     DeclaratorInfo.D.setCommaLoc(CommaLoc);</div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span> </div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>     <span class="comment">// Attributes are only allowed here on successive declarators.</span></div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>     <span class="keywordflow">if</span> (!FirstDeclarator)</div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>       MaybeParseGNUAttributes(DeclaratorInfo.D);</div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> <span class="comment"></span></div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span> <span class="comment">    /// struct-declarator: declarator</span></div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span> <span class="comment">    /// struct-declarator: declarator[opt] ':' constant-expression</span></div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> <span class="comment"></span>    <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::colon)) {</div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>       <span class="comment">// Don't parse FOO:BAR as if it were a typo for FOO::BAR.</span></div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>       <a class="code" href="classclang_1_1ColonProtectionRAIIObject.html">ColonProtectionRAIIObject</a> <a class="code" href="namespaceclang_1_1tooling.html#ad61cfdb049c401f2669516dc65c93f91">X</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>       ParseDeclarator(DeclaratorInfo.D);</div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>     }</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span> </div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::colon)) {</div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Res(<a class="code" href="classclang_1_1Parser.html#a6a9c7be0b89ac30ec2420874d4ff6e3f">ParseConstantExpression</a>());</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>       <span class="keywordflow">if</span> (Res.isInvalid())</div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::semi, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>         DeclaratorInfo.BitfieldSize = Res.release();</div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>     }</div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span> </div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>     <span class="comment">// If attributes exist after the declarator, parse them.</span></div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>     MaybeParseGNUAttributes(DeclaratorInfo.D);</div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span> </div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>     <span class="comment">// We're done with this declarator;  invoke the callback.</span></div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>     Fields.invoke(DeclaratorInfo);</div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span> </div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>     <span class="comment">// If we don't have a comma, it is either the end of the list (a ';')</span></div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>     <span class="comment">// or an error, bail out.</span></div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span> </div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>     <span class="comment">// Consume the comma.</span></div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>     CommaLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span> </div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>     FirstDeclarator = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>   }</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span> }</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> <span class="comment"></span></div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span> <span class="comment">/// ParseStructUnionBody</span></div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span> <span class="comment">///       struct-contents:</span></div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span> <span class="comment">///         struct-declaration-list</span></div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> <span class="comment">/// [EXT]   empty</span></div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span> <span class="comment">/// [GNU]   "struct-declaration-list" without terminatoring ';'</span></div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span> <span class="comment">///       struct-declaration-list:</span></div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> <span class="comment">///         struct-declaration</span></div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span> <span class="comment">///         struct-declaration-list struct-declaration</span></div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> <span class="comment">/// [OBC]   '@' 'defs' '(' class-name ')'</span></div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseStructUnionBody(<a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> RecordLoc,</div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>                                   <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1TagType.html">TagType</a>, <a class="code" href="classclang_1_1Decl.html">Decl</a> *<a class="code" href="classclang_1_1TagDecl.html" title="TagDecl - Represents the declaration of a struct/union/class/enum.">TagDecl</a>) {</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>   <a class="code" href="classclang_1_1PrettyDeclStackTraceEntry.html">PrettyDeclStackTraceEntry</a> CrashInfo(Actions, TagDecl, RecordLoc,</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>                                       <span class="stringliteral">"parsing struct/union body"</span>);</div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>   assert(!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && <span class="stringliteral">"C++ declarations not supported"</span>);</div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span> </div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_brace);</div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>   <span class="keywordflow">if</span> (T.consumeOpen())</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span> </div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>   ParseScope StructScope(<span class="keyword">this</span>, <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a9c46440a665ea4d88f8811bb705cbd4e" title="The scope of a struct/union/class definition.">Scope::ClassScope</a>|<a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7af9dd922f0e23495a79fc93698d6775ff" title="This is a scope that can contain a declaration. Some scopes just contain loop constructs but don't co...">Scope::DeclScope</a>);</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>   Actions.<a class="code" href="classclang_1_1Sema.html#aa6de2f7158ef98fd787fc0af283dcb4f">ActOnTagStartDefinition</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), TagDecl);</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Decl *, 32></a> FieldDecls;</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span> </div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>   <span class="comment">// While we still have something to read, read the declarations in the struct.</span></div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::r_brace) && Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(<a class="code" href="namespaceclang_1_1comments_1_1tok.html#af269e1299a7e813dd4471ab24630e01aac4904dc9309fe9cf0fe76ff45d54f265">tok::eof</a>)) {</div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>     <span class="comment">// Each iteration of this loop reads one struct-declaration.</span></div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span> </div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>     <span class="comment">// Check for extraneous top-level semicolon.</span></div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) {</div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>       ConsumeExtraSemi(InsideStruct, TagType);</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>     }</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span> </div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>     <span class="comment">// Parse _Static_assert declaration.</span></div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw__Static_assert)) {</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> DeclEnd;</div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>       ParseStaticAssertDeclaration(DeclEnd);</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>     }</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span> </div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_pragma_pack)) {</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>       HandlePragmaPack();</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>     }</div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span> </div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_pragma_align)) {</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>       HandlePragmaAlign();</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>     }</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span> </div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>     <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::at)) {</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>       <span class="keyword">struct </span>CFieldCallback : FieldCallback {</div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>         <a class="code" href="classclang_1_1Parser.html">Parser</a> &<a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>;</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>         <a class="code" href="classclang_1_1Decl.html">Decl</a> *TagDecl;</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>         <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Decl *></a> &FieldDecls;</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span> </div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>         CFieldCallback(<a class="code" href="classclang_1_1Parser.html">Parser</a> &<a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>, <a class="code" href="classclang_1_1Decl.html">Decl</a> *TagDecl,</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>                        <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Decl *></a> &FieldDecls) :</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>           P(P), TagDecl(TagDecl), FieldDecls(FieldDecls) {}</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span> </div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>         <span class="keywordtype">void</span> invoke(<a class="code" href="classclang_1_1ParsingFieldDeclarator.html" title="A class for parsing a field declarator.">ParsingFieldDeclarator</a> &FD) {</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>           <span class="comment">// Install the declarator into the current TagDecl.</span></div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>           <a class="code" href="classclang_1_1Decl.html">Decl</a> *Field = <a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>.Actions.ActOnField(<a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>.getCurScope(), TagDecl,</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>                               FD.<a class="code" href="structclang_1_1FieldDeclarator.html#a53db54883a89e3dfc2f024ad7c8a836d">D</a>.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#a7b8a30b08c1fa1aac47e417167a8631f">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a890dff14560eb9aceb08be18dfe74208">getBegin</a>(),</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>                                                  FD.<a class="code" href="structclang_1_1FieldDeclarator.html#a53db54883a89e3dfc2f024ad7c8a836d">D</a>, FD.<a class="code" href="structclang_1_1FieldDeclarator.html#a252c31d5ccc8895132e29ecbbea54d00">BitfieldSize</a>);</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>           FieldDecls.push_back(Field);</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>           FD.<a class="code" href="classclang_1_1ParsingFieldDeclarator.html#a1f2c9fa853502334562c2ad9a56af1b1">complete</a>(Field);</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>         }</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>       } <a class="code" href="ASTMatchFinder_8cpp.html#a65f65be04d6e181a522ea0c32416a2b9">Callback</a>(*<span class="keyword">this</span>, TagDecl, FieldDecls);</div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> </div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>       <span class="comment">// Parse all the comma separated declarators.</span></div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>       <a class="code" href="classclang_1_1ParsingDeclSpec.html" title="A class for parsing a DeclSpec.">ParsingDeclSpec</a> DS(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>       ParseStructDeclaration(DS, <a class="code" href="ASTMatchFinder_8cpp.html#a65f65be04d6e181a522ea0c32416a2b9">Callback</a>);</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>     } <span class="keywordflow">else</span> { <span class="comment">// Handle @defs</span></div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>       <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#a5761d2afabf61a167722a8d2ac7a9f51" title="Return true if we have an ObjC keyword identifier.">isObjCAtKeyword</a>(tok::objc_defs)) {</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_unexpected_at);</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::semi);</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>       }</div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>       ExpectAndConsume(tok::l_paren, diag::err_expected_lparen);</div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>       <span class="keywordflow">if</span> (!Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident);</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::semi);</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>       }</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Decl *, 16></a> Fields;</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>       Actions.<a class="code" href="classclang_1_1Sema.html#a70d8ef9b7096939481e6e0b76569f6cb">ActOnDefs</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), TagDecl, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(),</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>                         Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(), Fields);</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>       FieldDecls.insert(FieldDecls.end(), Fields.begin(), Fields.end());</div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>       ExpectAndConsume(tok::r_paren, diag::err_expected_rparen);</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>     }</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span> </div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) {</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_brace)) {</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>       ExpectAndConsume(tok::semi, diag::ext_expected_semi_decl_list);</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>       ExpectAndConsume(tok::semi, diag::err_expected_semi_decl_list);</div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>       <span class="comment">// Skip to end of block or statement to avoid ext-warning on extra ';'.</span></div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_brace, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>       <span class="comment">// If we stopped at a ';', eat it.</span></div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>     }</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>   }</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> </div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>   T.consumeClose();</div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span> </div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>   <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> attrs(AttrFactory);</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>   <span class="comment">// If attributes exist after struct contents, parse them.</span></div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>   MaybeParseGNUAttributes(attrs);</div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> </div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>   Actions.<a class="code" href="classclang_1_1Sema.html#ab668ef604087423340d7bcfcf4f3c2f0">ActOnFields</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(),</div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>                       RecordLoc, TagDecl, FieldDecls,</div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>                       T.getOpenLocation(), T.getCloseLocation(),</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>                       attrs.getList());</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>   StructScope.Exit();</div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>   Actions.<a class="code" href="classclang_1_1Sema.html#a483b391d95ded2ba3af0cd090b2eb39f">ActOnTagFinishDefinition</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), TagDecl,</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>                                    T.getCloseLocation());</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span> }</div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span> <span class="comment"></span></div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span> <span class="comment">/// ParseEnumSpecifier</span></div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span> <span class="comment">///       enum-specifier: [C99 6.7.2.2]</span></div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span> <span class="comment">///         'enum' identifier[opt] '{' enumerator-list '}'</span></div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span> <span class="comment">///[C99/C++]'enum' identifier[opt] '{' enumerator-list ',' '}'</span></div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span> <span class="comment">/// [GNU]   'enum' attributes[opt] identifier[opt] '{' enumerator-list ',' [opt]</span></div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span> <span class="comment">///                                                 '}' attributes[opt]</span></div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span> <span class="comment">/// [MS]    'enum' __declspec[opt] identifier[opt] '{' enumerator-list ',' [opt]</span></div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> <span class="comment">///                                                 '}'</span></div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span> <span class="comment">///         'enum' identifier</span></div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span> <span class="comment">/// [GNU]   'enum' attributes[opt] identifier</span></div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span> <span class="comment">/// [C++11] enum-head '{' enumerator-list[opt] '}'</span></div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span> <span class="comment">/// [C++11] enum-head '{' enumerator-list ','  '}'</span></div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span> <span class="comment">///       enum-head: [C++11]</span></div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span> <span class="comment">///         enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]</span></div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span> <span class="comment">///         enum-key attribute-specifier-seq[opt] nested-name-specifier</span></div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span> <span class="comment">///             identifier enum-base[opt]</span></div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span> <span class="comment">///       enum-key: [C++11]</span></div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span> <span class="comment">///         'enum'</span></div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span> <span class="comment">///         'enum' 'class'</span></div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span> <span class="comment">///         'enum' 'struct'</span></div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span> <span class="comment">///       enum-base: [C++11]</span></div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span> <span class="comment">///         ':' type-specifier-seq</span></div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span> <span class="comment">/// [C++] elaborated-type-specifier:</span></div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span> <span class="comment">/// [C++]   'enum' '::'[opt] nested-name-specifier[opt] identifier</span></div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseEnumSpecifier(<a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> StartLoc, <a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS,</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>                                 <span class="keyword">const</span> ParsedTemplateInfo &TemplateInfo,</div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>                                 <a class="code" href="namespaceclang.html#afc8aabd1f46cf32e805cd0d970ef988f" title="A C++ access specifier (public, private, protected), plus the special value "none" which means differ...">AccessSpecifier</a> AS, DeclSpecContext DSC) {</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>   <span class="comment">// Parse the tag portion of this.</span></div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::code_completion)) {</div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>     <span class="comment">// Code completion for an enum name.</span></div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>     Actions.<a class="code" href="classclang_1_1Sema.html#a06d42683de13b2b23cb4dba54e2cf83b">CodeCompleteTag</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), <a class="code" href="classclang_1_1DeclSpec.html#a80d7c87d1074c9340978900d04df58f3">DeclSpec::TST_enum</a>);</div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>     <span class="keywordflow">return</span> cutOffParsing();</div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>   }</div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span> </div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>   <span class="comment">// If attributes exist after tag, parse them.</span></div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>   ParsedAttributesWithRange attrs(AttrFactory);</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>   MaybeParseGNUAttributes(attrs);</div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>   MaybeParseCXX11Attributes(attrs);</div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span> </div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>   <span class="comment">// If declspecs exist after tag, parse them.</span></div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___declspec))</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>     ParseMicrosoftDeclSpec(attrs);</div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span> </div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> ScopedEnumKWLoc;</div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>   <span class="keywordtype">bool</span> IsScopedUsingClassTag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span> </div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>   <span class="comment">// In C++11, recognize 'enum class' and 'enum struct'.</span></div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_class) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_struct)) {</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> ? diag::warn_cxx98_compat_scoped_enum</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>                                         : diag::ext_scoped_enum);</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>     IsScopedUsingClassTag = Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_class);</div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>     ScopedEnumKWLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span> </div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>     <span class="comment">// Attributes are not allowed between these keywords.  Diagnose,</span></div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>     <span class="comment">// but then just treat them like they appeared in the right place.</span></div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>     ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span> </div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>     <span class="comment">// They are allowed afterwards, though.</span></div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>     MaybeParseGNUAttributes(attrs);</div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>     MaybeParseCXX11Attributes(attrs);</div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>     <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___declspec))</div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>       ParseMicrosoftDeclSpec(attrs);</div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>   }</div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span> </div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>   <span class="comment">// C++11 [temp.explicit]p12:</span></div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>   <span class="comment">//   The usual access controls do not apply to names used to specify</span></div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>   <span class="comment">//   explicit instantiations.</span></div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>   <span class="comment">// We extend this to also cover explicit specializations.  Note that</span></div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>   <span class="comment">// we don't suppress if this turns out to be an elaborated type</span></div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>   <span class="comment">// specifier.</span></div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>   <span class="keywordtype">bool</span> shouldDelayDiagsInTag =</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>     (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation ||</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>      TemplateInfo.Kind == ParsedTemplateInfo::ExplicitSpecialization);</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>   <a class="code" href="classclang_1_1SuppressAccessChecks.html" title="A RAII object used to temporarily suppress access-like checking. Access-like checks are those associa...">SuppressAccessChecks</a> diagsFromTag(*<span class="keyword">this</span>, shouldDelayDiagsInTag);</div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span> </div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>   <span class="comment">// Enum definitions should not be parsed in a trailing-return-type.</span></div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>   <span class="keywordtype">bool</span> AllowDeclaration = DSC != DSC_trailing;</div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span> </div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>   <span class="keywordtype">bool</span> AllowFixedUnderlyingType = AllowDeclaration &&</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>     (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11 || <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().MicrosoftExt ||</div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>      <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC2);</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span> </div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>   <a class="code" href="classclang_1_1CXXScopeSpec.html" title="Represents a C++ nested-name-specifier or a global scope specifier.">CXXScopeSpec</a> &SS = DS.<a class="code" href="classclang_1_1DeclSpec.html#aac9396ae32bf1c5824bcd55335f70e32">getTypeSpecScope</a>();</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>) {</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>     <span class="comment">// "enum foo : bar;" is not a potential typo for "enum foo::bar;"</span></div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>     <span class="comment">// if a fixed underlying type is allowed.</span></div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>     <a class="code" href="classclang_1_1ColonProtectionRAIIObject.html">ColonProtectionRAIIObject</a> <a class="code" href="namespaceclang_1_1tooling.html#ad61cfdb049c401f2669516dc65c93f91">X</a>(*<span class="keyword">this</span>, AllowFixedUnderlyingType);</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> </div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>     <span class="keywordflow">if</span> (ParseOptionalCXXScopeSpecifier(SS, <a class="code" href="namespaceclang.html#aeb304ed08ffec14495690938d6bd95e2">ParsedType</a>(),</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>                                        <span class="comment">/*EnteringContext=*/</span><span class="keyword">true</span>))</div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span> </div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>     <span class="keywordflow">if</span> (SS.isSet() && Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident);</div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::l_brace)) {</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>         <span class="comment">// Has no name and is not a definition.</span></div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>         <span class="comment">// Skip the rest of this declarator, up until the comma or semicolon.</span></div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>       }</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>     }</div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>   }</div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span> </div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>   <span class="comment">// Must have either 'enum name' or 'enum {...}'.</span></div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier) && Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::l_brace) &&</div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>       !(AllowFixedUnderlyingType && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::colon))) {</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident_lbrace);</div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span> </div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>     <span class="comment">// Skip the rest of this declarator, up until the comma or semicolon.</span></div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>   }</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span> </div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>   <span class="comment">// If an identifier is present, consume and remember it.</span></div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>   <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Name = 0;</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> NameLoc;</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>     Name = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>     NameLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>   }</div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span> </div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>   <span class="keywordflow">if</span> (!Name && ScopedEnumKWLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) {</div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>     <span class="comment">// C++0x 7.2p2: The optional identifier shall not be omitted in the</span></div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>     <span class="comment">// declaration of a scoped enumeration.</span></div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_scoped_enum_missing_identifier);</div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>     ScopedEnumKWLoc = <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>();</div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>     IsScopedUsingClassTag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>   }</div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span> </div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>   <span class="comment">// Okay, end the suppression area.  We'll decide whether to emit the</span></div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>   <span class="comment">// diagnostics in a second.</span></div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>   <span class="keywordflow">if</span> (shouldDelayDiagsInTag)</div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>     diagsFromTag.done();</div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span> </div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>   <a class="code" href="classclang_1_1ActionResult.html">TypeResult</a> BaseType;</div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span> </div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>   <span class="comment">// Parse the fixed underlying type.</span></div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>   <span class="keywordtype">bool</span> CanBeBitfield = <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()-><a class="code" href="classclang_1_1Scope.html#a7316fa5306941f8557cc76a5c3997a45">getFlags</a>() & <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a9c46440a665ea4d88f8811bb705cbd4e" title="The scope of a struct/union/class definition.">Scope::ClassScope</a>;</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>   <span class="keywordflow">if</span> (AllowFixedUnderlyingType && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::colon)) {</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>     <span class="keywordtype">bool</span> PossibleBitfield = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>     <span class="keywordflow">if</span> (CanBeBitfield) {</div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>       <span class="comment">// If we're in class scope, this can either be an enum declaration with</span></div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>       <span class="comment">// an underlying type, or a declaration of a bitfield member. We try to</span></div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>       <span class="comment">// use a simple disambiguation scheme first to catch the common cases</span></div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>       <span class="comment">// (integer literal, sizeof); if it's still ambiguous, we then consider</span></div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>       <span class="comment">// anything that's a simple-type-specifier followed by '(' as an</span></div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>       <span class="comment">// expression. This suffices because function types are not valid</span></div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>       <span class="comment">// underlying types anyway.</span></div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>       <a class="code" href="classclang_1_1EnterExpressionEvaluationContext.html" title="RAII object that enters a new expression evaluation context.">EnterExpressionEvaluationContext</a> Unevaluated(Actions,</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>                                                    <a class="code" href="classclang_1_1Sema.html#ac105cb9d8d4ad3e532351c498f6082b5a1c462d0aa3eb9afe577f944b62b22c94" title="The current context is "potentially evaluated" in C++11 terms, but the expression is evaluated at com...">Sema::ConstantEvaluated</a>);</div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>       TPResult TPR = isExpressionOrTypeSpecifierSimple(<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="DeclBase_8cpp.html#a37d13911f1772d0ed90b6b2e89cf3c60">getKind</a>());</div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>       <span class="comment">// If the next token starts an expression, we know we're parsing a</span></div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>       <span class="comment">// bit-field. This is the common case.</span></div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>       <span class="keywordflow">if</span> (TPR == TPResult::True())</div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>         PossibleBitfield = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>       <span class="comment">// If the next token starts a type-specifier-seq, it may be either a</span></div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>       <span class="comment">// a fixed underlying type or the start of a function-style cast in C++;</span></div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>       <span class="comment">// lookahead one more token to see if it's obvious that we have a</span></div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>       <span class="comment">// fixed underlying type.</span></div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TPR == TPResult::False() &&</div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>                GetLookAheadToken(2).<a class="code" href="DeclBase_8cpp.html#a37d13911f1772d0ed90b6b2e89cf3c60">getKind</a>() == tok::semi) {</div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>         <span class="comment">// Consume the ':'.</span></div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>         <span class="comment">// We have the start of a type-specifier-seq, so we have to perform</span></div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>         <span class="comment">// tentative parsing to determine whether we have an expression or a</span></div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>         <span class="comment">// type.</span></div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>         TentativeParsingAction TPA(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span> </div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>         <span class="comment">// Consume the ':'.</span></div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>         <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span> </div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>         <span class="comment">// If we see a type specifier followed by an open-brace, we have an</span></div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>         <span class="comment">// ambiguity between an underlying type and a C++11 braced</span></div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>         <span class="comment">// function-style cast. Resolve this by always treating it as an</span></div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>         <span class="comment">// underlying type.</span></div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>         <span class="comment">// FIXME: The standard is not entirely clear on how to disambiguate in</span></div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>         <span class="comment">// this case.</span></div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>         <span class="keywordflow">if</span> ((<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> &&</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>              isCXXDeclarationSpecifier(TPResult::True()) != TPResult::True()) ||</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>             (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && !isDeclarationSpecifier(<span class="keyword">true</span>))) {</div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>           <span class="comment">// We'll parse this as a bitfield later.</span></div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>           PossibleBitfield = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>           TPA.Revert();</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>           <span class="comment">// We have a type-specifier-seq.</span></div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>           TPA.Commit();</div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>         }</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>       }</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>       <span class="comment">// Consume the ':'.</span></div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>     }</div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span> </div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>     <span class="keywordflow">if</span> (!PossibleBitfield) {</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>       <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> Range;</div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>       BaseType = <a class="code" href="classclang_1_1Parser.html#aa7137dd627971c6ecad56fb67a1c1179">ParseTypeName</a>(&Range);</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span> </div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a>) {</div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(StartLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type);</div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC2) {</div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>         <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>)</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(StartLoc, diag::ext_cxx11_enum_fixed_underlying_type) << Range;</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(StartLoc, diag::ext_c_enum_fixed_underlying_type) << Range;</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>       }</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>     }</div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>   }</div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span> </div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>   <span class="comment">// There are four options here.  If we have 'friend enum foo;' then this is a</span></div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>   <span class="comment">// friend declaration, and cannot have an accompanying definition. If we have</span></div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>   <span class="comment">// 'enum foo;', then this is a forward declaration.  If we have</span></div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>   <span class="comment">// 'enum foo {...' then this is a definition. Otherwise we have something</span></div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>   <span class="comment">// like 'enum foo xyz', a reference.</span></div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>   <span class="comment">// This is needed to handle stuff like this right (C99 6.7.2.3p11):</span></div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>   <span class="comment">// enum foo {..};  void bar() { enum foo; }    <- new foo in bar.</span></div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>   <span class="comment">// enum foo {..};  void bar() { enum foo x; }  <- use of old foo.</span></div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>   <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ce">Sema::TagUseKind</a> TUK;</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>   <span class="keywordflow">if</span> (!AllowDeclaration) {</div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>     TUK = <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a>;</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace)) {</div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a102837205c9d404fc55dec8bcf7435e3">isFriendSpecified</a>()) {</div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_friend_decl_defines_type)</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>         << <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a214bf5e44370942a2640bf4a45c972cd">getFriendSpecLoc</a>());</div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>       ConsumeBrace();</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_brace, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>       TUK = <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceae1c31c45e0b72b882d1c8931ed3c4063">Sema::TUK_Friend</a>;</div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>       TUK = <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaae212d7e64dd7747a69487e73d7eb004">Sema::TUK_Definition</a>;</div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>     }</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (DSC != DSC_type_specifier &&</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>              (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi) ||</div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>               (Tok.<a class="code" href="classclang_1_1Token.html#a895009ede74790b61cf636fd7e498d44">isAtStartOfLine</a>() &&</div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>                !isValidAfterTypeSpecifier(CanBeBitfield)))) {</div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>     TUK = DS.<a class="code" href="classclang_1_1DeclSpec.html#a102837205c9d404fc55dec8bcf7435e3">isFriendSpecified</a>() ? <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceae1c31c45e0b72b882d1c8931ed3c4063">Sema::TUK_Friend</a> : <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceadb20f669c5ae1c5150a7a0fcb3f97614">Sema::TUK_Declaration</a>;</div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::semi)) {</div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>       <span class="comment">// A semicolon was missing after this declaration. Diagnose and recover.</span></div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>       ExpectAndConsume(tok::semi, diag::err_expected_semi_after_tagdecl,</div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>                        <span class="stringliteral">"enum"</span>);</div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>       PP.<a class="code" href="classclang_1_1Preprocessor.html#a281f16dcb4fca3c52652dbc11ed53c1a">EnterToken</a>(Tok);</div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>       Tok.<a class="code" href="classclang_1_1Token.html#a44b757baba649ad00b79f78671a8a2aa">setKind</a>(tok::semi);</div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>     }</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>     TUK = <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a>;</div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>   }</div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span> </div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>   <span class="comment">// If this is an elaborated type specifier, and we delayed</span></div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>   <span class="comment">// diagnostics before, just merge them into the current pool.</span></div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>   <span class="keywordflow">if</span> (TUK == <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a> && shouldDelayDiagsInTag) {</div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>     diagsFromTag.redelay();</div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>   }</div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span> </div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>   <a class="code" href="namespaceclang.html#a390b7b33929bebeea635fd6654cc4760">MultiTemplateParamsArg</a> TParams;</div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>   <span class="keywordflow">if</span> (TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate &&</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>       TUK != <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a>) {</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>     <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> || !SS.isSet()) {</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>       <span class="comment">// Skip the rest of this declarator, up until the comma or semicolon.</span></div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_enum_template);</div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>     }</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span> </div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>     <span class="keywordflow">if</span> (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {</div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>       <span class="comment">// Enumerations can't be explicitly instantiated.</span></div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(StartLoc, diag::err_explicit_instantiation_enum);</div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>     }</div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span> </div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>     assert(TemplateInfo.TemplateParams && <span class="stringliteral">"no template parameters"</span>);</div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>     TParams = <a class="code" href="namespaceclang.html#a390b7b33929bebeea635fd6654cc4760">MultiTemplateParamsArg</a>(TemplateInfo.TemplateParams->data(),</div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>                                      TemplateInfo.TemplateParams->size());</div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>   }</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span> </div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>   <span class="keywordflow">if</span> (TUK == <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a>)</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>     ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span> </div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>   <span class="keywordflow">if</span> (!Name && TUK != <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaae212d7e64dd7747a69487e73d7eb004">Sema::TUK_Definition</a>) {</div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_enumerator_unnamed_no_def);</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span> </div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>     <span class="comment">// Skip the rest of this declarator, up until the comma or semicolon.</span></div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>     <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>   }</div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span> </div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>   <span class="keywordtype">bool</span> Owned = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>   <span class="keywordtype">bool</span> IsDependent = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *PrevSpec = 0;</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>   <span class="keywordtype">unsigned</span> DiagID;</div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *TagDecl = Actions.<a class="code" href="classclang_1_1Sema.html#a76cd1219b205d486ed76b0cefe0d87af">ActOnTag</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), <a class="code" href="classclang_1_1DeclSpec.html#a80d7c87d1074c9340978900d04df58f3">DeclSpec::TST_enum</a>, TUK,</div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>                                    StartLoc, SS, Name, NameLoc, attrs.getList(),</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>                                    AS, DS.<a class="code" href="classclang_1_1DeclSpec.html#ac6b5b7285dfb47318fb071351e8b910e">getModulePrivateSpecLoc</a>(), TParams,</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>                                    Owned, IsDependent, ScopedEnumKWLoc,</div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>                                    IsScopedUsingClassTag, BaseType);</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span> </div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>   <span class="keywordflow">if</span> (IsDependent) {</div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>     <span class="comment">// This enum has a dependent nested-name-specifier. Handle it as a</span></div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>     <span class="comment">// dependent tag.</span></div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>     <span class="keywordflow">if</span> (!Name) {</div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_type_name_after_typename);</div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>     }</div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span> </div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>     <a class="code" href="classclang_1_1ActionResult.html">TypeResult</a> <a class="code" href="classclang_1_1Type.html">Type</a> = Actions.<a class="code" href="classclang_1_1Sema.html#a46ddbe7c6e743b818863648a5bafe427">ActOnDependentTag</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), <a class="code" href="classclang_1_1DeclSpec.html#a80d7c87d1074c9340978900d04df58f3">DeclSpec::TST_enum</a>,</div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>                                                 TUK, SS, Name, StartLoc,</div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>                                                 NameLoc);</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>     <span class="keywordflow">if</span> (Type.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>     }</div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span> </div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a0ed31e8e239ed3e00e5181ca7bacf5aa">DeclSpec::TST_typename</a>, StartLoc,</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>                            NameLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>() ? NameLoc : StartLoc,</div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>                            PrevSpec, DiagID, Type.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>()))</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(StartLoc, DiagID) << PrevSpec;</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span> </div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>   }</div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span> </div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>   <span class="keywordflow">if</span> (!TagDecl) {</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>     <span class="comment">// The action failed to produce an enumeration tag. If this is a</span></div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>     <span class="comment">// definition, consume the entire definition.</span></div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace) && TUK != <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a>) {</div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>       ConsumeBrace();</div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_brace, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a>);</div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>     }</div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span> </div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#ac13a78f5d707018b2d5ef035c782dbaa">SetTypeSpecError</a>();</div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>   }</div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span> </div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_brace) && TUK != <a class="code" href="classclang_1_1Sema.html#ad366dd74e09ab3fe2eaf83e2d3cda7ceaeef3ad804d0e0e4db2096e5ab49f8006">Sema::TUK_Reference</a>)</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>     ParseEnumBody(StartLoc, TagDecl);</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span> </div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>   <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#af184ab7eeb4737c8f52ebdd72e49c70c">SetTypeSpecType</a>(<a class="code" href="classclang_1_1DeclSpec.html#a80d7c87d1074c9340978900d04df58f3">DeclSpec::TST_enum</a>, StartLoc,</div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>                          NameLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>() ? NameLoc : StartLoc,</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>                          PrevSpec, DiagID, TagDecl, Owned))</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(StartLoc, DiagID) << PrevSpec;</div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span> }</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span> <span class="comment"></span></div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span> <span class="comment">/// ParseEnumBody - Parse a {} enclosed enumerator-list.</span></div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span> <span class="comment">///       enumerator-list:</span></div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span> <span class="comment">///         enumerator</span></div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span> <span class="comment">///         enumerator-list ',' enumerator</span></div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span> <span class="comment">///       enumerator:</span></div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span> <span class="comment">///         enumeration-constant</span></div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span> <span class="comment">///         enumeration-constant '=' constant-expression</span></div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span> <span class="comment">///       enumeration-constant:</span></div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span> <span class="comment">///         identifier</span></div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span> <span class="comment">///</span></div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseEnumBody(<a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> StartLoc, <a class="code" href="classclang_1_1Decl.html">Decl</a> *<a class="code" href="classclang_1_1EnumDecl.html">EnumDecl</a>) {</div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>   <span class="comment">// Enter the scope of the enum body and start the definition.</span></div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>   ParseScope EnumScope(<span class="keyword">this</span>, <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7af9dd922f0e23495a79fc93698d6775ff" title="This is a scope that can contain a declaration. Some scopes just contain loop constructs but don't co...">Scope::DeclScope</a>);</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>   Actions.<a class="code" href="classclang_1_1Sema.html#aa6de2f7158ef98fd787fc0af283dcb4f">ActOnTagStartDefinition</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), EnumDecl);</div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span> </div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_brace);</div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>   T.consumeOpen();</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span> </div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>   <span class="comment">// C does not allow an empty enumerator-list, C++ does [dcl.enum].</span></div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_brace) && !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus)</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::error_empty_enum);</div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span> </div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Decl *, 32></a> EnumConstantDecls;</div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span> </div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *LastEnumConstDecl = 0;</div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span> </div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>   <span class="comment">// Parse the enumerator-list.</span></div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>   <span class="keywordflow">while</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *Ident = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> IdentLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span> </div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>     <span class="comment">// If attributes exist after the enumerator, parse them.</span></div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>     ParsedAttributesWithRange attrs(AttrFactory);</div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>     MaybeParseGNUAttributes(attrs);</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>     MaybeParseCXX11Attributes(attrs);</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>     ProhibitAttributes(attrs);</div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span> </div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EqualLoc;</div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> AssignedVal;</div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>     <a class="code" href="classclang_1_1ParsingDeclRAIIObject.html" title="RAII object used to inform the actions that we're currently parsing a declaration. This is active when parsing a variable's initializer, but not when parsing the body of a class or function definition.">ParsingDeclRAIIObject</a> PD(*<span class="keyword">this</span>, <a class="code" href="classclang_1_1ParsingDeclRAIIObject.html#a42eb5bc846dde71e9926285c43c67a91a4d59e6e8dc5acfe519a8fe19ddec7904">ParsingDeclRAIIObject::NoParent</a>);</div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span> </div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::equal)) {</div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>       EqualLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>       AssignedVal = <a class="code" href="classclang_1_1Parser.html#a6a9c7be0b89ac30ec2420874d4ff6e3f">ParseConstantExpression</a>();</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>       <span class="keywordflow">if</span> (AssignedVal.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>         <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::comma, tok::r_brace, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>     }</div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span> </div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>     <span class="comment">// Install the enumerator constant into EnumDecl.</span></div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>     <a class="code" href="classclang_1_1Decl.html">Decl</a> *EnumConstDecl = Actions.<a class="code" href="classclang_1_1Sema.html#af795ea30e9d8b4d280cc530b6b462b4f">ActOnEnumConstant</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), EnumDecl,</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>                                                     LastEnumConstDecl,</div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>                                                     IdentLoc, Ident,</div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>                                                     attrs.getList(), EqualLoc,</div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>                                                     AssignedVal.<a class="code" href="classclang_1_1ActionResult.html#af3c660207dfebb140ea0832cd41dfeb1">release</a>());</div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>     PD.complete(EnumConstDecl);</div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span> </div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>     EnumConstantDecls.push_back(EnumConstDecl);</div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>     LastEnumConstDecl = EnumConstDecl;</div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span> </div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)) {</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>       <span class="comment">// We're missing a comma between enumerators.</span></div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = PP.<a class="code" href="classclang_1_1Preprocessor.html#aef7193e9d262ea6852d666beb28dc1a0" title="Computes the source location just past the end of the token at this source location.">getLocForEndOfToken</a>(PrevTokLocation);</div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, diag::err_enumerator_list_missing_comma)</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>         << <a class="code" href="classclang_1_1FixItHint.html#afd481d826e9ddaa39fc82a698a810246" title="Create a code modification hint that inserts the given code string at a specific location.">FixItHint::CreateInsertion</a>(Loc, <span class="stringliteral">", "</span>);</div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>     }</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span> </div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> CommaLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span> </div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>       <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().C99 && !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11)</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(CommaLoc, <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus ?</div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>                diag::ext_enumerator_list_comma_cxx :</div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>                diag::ext_enumerator_list_comma_c)</div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>           << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(CommaLoc);</div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11)</div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(CommaLoc, diag::warn_cxx98_compat_enumerator_list_comma)</div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>           << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(CommaLoc);</div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>     }</div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>   }</div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span> </div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span>   <span class="comment">// Eat the }.</span></div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>   T.consumeClose();</div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span> </div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>   <span class="comment">// If attributes exist after the identifier list, parse them.</span></div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>   <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> attrs(AttrFactory);</div>
+<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>   MaybeParseGNUAttributes(attrs);</div>
+<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span> </div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>   Actions.<a class="code" href="classclang_1_1Sema.html#a4e5c9112ebea11f8131df216d1209447">ActOnEnumBody</a>(StartLoc, T.getOpenLocation(), T.getCloseLocation(),</div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>                         EnumDecl, EnumConstantDecls,</div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>                         <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(),</div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>                         attrs.getList());</div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span> </div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>   EnumScope.Exit();</div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>   Actions.<a class="code" href="classclang_1_1Sema.html#a483b391d95ded2ba3af0cd090b2eb39f">ActOnTagFinishDefinition</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), EnumDecl,</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>                                    T.getCloseLocation());</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span> </div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>   <span class="comment">// The next token must be valid after an enum definition. If not, a ';'</span></div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>   <span class="comment">// was probably forgotten.</span></div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>   <span class="keywordtype">bool</span> CanBeBitfield = <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()-><a class="code" href="classclang_1_1Scope.html#a7316fa5306941f8557cc76a5c3997a45">getFlags</a>() & <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a9c46440a665ea4d88f8811bb705cbd4e" title="The scope of a struct/union/class definition.">Scope::ClassScope</a>;</div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>   <span class="keywordflow">if</span> (!isValidAfterTypeSpecifier(CanBeBitfield)) {</div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>     ExpectAndConsume(tok::semi, diag::err_expected_semi_after_tagdecl, <span class="stringliteral">"enum"</span>);</div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>     <span class="comment">// Push this token back into the preprocessor and change our current token</span></div>
+<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>     <span class="comment">// to ';' so that the rest of the code recovers as though there were an</span></div>
+<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>     <span class="comment">// ';' after the definition.</span></div>
+<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>     PP.<a class="code" href="classclang_1_1Preprocessor.html#a281f16dcb4fca3c52652dbc11ed53c1a">EnterToken</a>(Tok);</div>
+<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>     Tok.<a class="code" href="classclang_1_1Token.html#a44b757baba649ad00b79f78671a8a2aa">setKind</a>(tok::semi);</div>
+<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>   }</div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span> }</div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span> <span class="comment"></span></div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span> <span class="comment">/// isTypeSpecifierQualifier - Return true if the current token could be the</span></div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span> <span class="comment">/// start of a type-qualifier-list.</span></div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::isTypeQualifier()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>   <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span> </div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>     <span class="comment">// type-qualifier only in OpenCL</span></div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>   <span class="keywordflow">case</span> tok::kw_private:</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().OpenCL;</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span> </div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>     <span class="comment">// type-qualifier</span></div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>   <span class="keywordflow">case</span> tok::kw_const:</div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>   <span class="keywordflow">case</span> tok::kw_volatile:</div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>   <span class="keywordflow">case</span> tok::kw_restrict:</div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>   <span class="keywordflow">case</span> tok::kw___private:</div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>   <span class="keywordflow">case</span> tok::kw___local:</div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>   <span class="keywordflow">case</span> tok::kw___global:</div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>   <span class="keywordflow">case</span> tok::kw___constant:</div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>   <span class="keywordflow">case</span> tok::kw___read_only:</div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>   <span class="keywordflow">case</span> tok::kw___read_write:</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>   <span class="keywordflow">case</span> tok::kw___write_only:</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>   }</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span> }</div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span> <span class="comment"></span></div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span> <span class="comment">/// isKnownToBeTypeSpecifier - Return true if we know that the specified token</span></div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span> <span class="comment">/// is definitely a type-specifier.  Return false if it isn't part of a type</span></div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span> <span class="comment">/// specifier or if we're not sure.</span></div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::isKnownToBeTypeSpecifier(<span class="keyword">const</span> <a class="code" href="classclang_1_1Token.html">Token</a> &Tok)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>   <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>     <span class="comment">// type-specifiers</span></div>
+<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>   <span class="keywordflow">case</span> tok::kw_short:</div>
+<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>   <span class="keywordflow">case</span> tok::kw_long:</div>
+<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>   <span class="keywordflow">case</span> tok::kw___int64:</div>
+<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>   <span class="keywordflow">case</span> tok::kw___int128:</div>
+<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>   <span class="keywordflow">case</span> tok::kw_signed:</div>
+<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>   <span class="keywordflow">case</span> tok::kw_unsigned:</div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>   <span class="keywordflow">case</span> tok::kw__Complex:</div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>   <span class="keywordflow">case</span> tok::kw__Imaginary:</div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>   <span class="keywordflow">case</span> tok::kw_void:</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>   <span class="keywordflow">case</span> tok::kw_char:</div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>   <span class="keywordflow">case</span> tok::kw_wchar_t:</div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>   <span class="keywordflow">case</span> tok::kw_char16_t:</div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>   <span class="keywordflow">case</span> tok::kw_char32_t:</div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>   <span class="keywordflow">case</span> tok::kw_int:</div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>   <span class="keywordflow">case</span> tok::kw_half:</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>   <span class="keywordflow">case</span> tok::kw_float:</div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>   <span class="keywordflow">case</span> tok::kw_double:</div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>   <span class="keywordflow">case</span> tok::kw_bool:</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>   <span class="keywordflow">case</span> tok::kw__Bool:</div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>   <span class="keywordflow">case</span> tok::kw__Decimal32:</div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>   <span class="keywordflow">case</span> tok::kw__Decimal64:</div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>   <span class="keywordflow">case</span> tok::kw__Decimal128:</div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>   <span class="keywordflow">case</span> tok::kw___vector:</div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span> </div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>     <span class="comment">// OpenCL specific types:</span></div>
+<div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>   <span class="keywordflow">case</span> tok::kw_image1d_t:</div>
+<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>   <span class="keywordflow">case</span> tok::kw_image1d_array_t:</div>
+<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>   <span class="keywordflow">case</span> tok::kw_image1d_buffer_t:</div>
+<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>   <span class="keywordflow">case</span> tok::kw_image2d_t:</div>
+<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>   <span class="keywordflow">case</span> tok::kw_image2d_array_t:</div>
+<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>   <span class="keywordflow">case</span> tok::kw_image3d_t:</div>
+<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>   <span class="keywordflow">case</span> tok::kw_sampler_t:</div>
+<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>   <span class="keywordflow">case</span> tok::kw_event_t:</div>
+<div class="line"><a name="l03987"></a><span class="lineno"> 3987</span> </div>
+<div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>     <span class="comment">// struct-or-union-specifier (C99) or class-specifier (C++)</span></div>
+<div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>   <span class="keywordflow">case</span> tok::kw_class:</div>
+<div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>   <span class="keywordflow">case</span> tok::kw_struct:</div>
+<div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>   <span class="keywordflow">case</span> tok::kw___interface:</div>
+<div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>   <span class="keywordflow">case</span> tok::kw_union:</div>
+<div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>     <span class="comment">// enum-specifier</span></div>
+<div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>   <span class="keywordflow">case</span> tok::kw_enum:</div>
+<div class="line"><a name="l03995"></a><span class="lineno"> 3995</span> </div>
+<div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>     <span class="comment">// typedef-name</span></div>
+<div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>   <span class="keywordflow">case</span> tok::annot_typename:</div>
+<div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>   }</div>
+<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span> }</div>
+<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span> <span class="comment"></span></div>
+<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span> <span class="comment">/// isTypeSpecifierQualifier - Return true if the current token could be the</span></div>
+<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span> <span class="comment">/// start of a specifier-qualifier-list.</span></div>
+<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::isTypeSpecifierQualifier() {</div>
+<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>   <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span> </div>
+<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>   <span class="keywordflow">case</span> tok::identifier:   <span class="comment">// foo::bar</span></div>
+<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>     <span class="keywordflow">if</span> (TryAltiVecVectorToken())</div>
+<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>     <span class="comment">// Fall through.</span></div>
+<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>   <span class="keywordflow">case</span> tok::kw_typename:  <span class="comment">// typename T::type</span></div>
+<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>     <span class="comment">// Annotate typenames and C++ scope specifiers.  If we get one, just</span></div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>     <span class="comment">// recurse to handle whatever we get.</span></div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a6a05dc9fb5788cbe37c727e89324c04d">TryAnnotateTypeOrScopeToken</a>())</div>
+<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier))</div>
+<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>     <span class="keywordflow">return</span> isTypeSpecifierQualifier();</div>
+<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span> </div>
+<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>   <span class="keywordflow">case</span> tok::coloncolon:   <span class="comment">// ::foo::bar</span></div>
+<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::kw_new) ||    <span class="comment">// ::new</span></div>
+<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>         <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::kw_delete))   <span class="comment">// ::delete</span></div>
+<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span> </div>
+<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a6a05dc9fb5788cbe37c727e89324c04d">TryAnnotateTypeOrScopeToken</a>())</div>
+<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>     <span class="keywordflow">return</span> isTypeSpecifierQualifier();</div>
+<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span> </div>
+<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>     <span class="comment">// GNU attributes support.</span></div>
+<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>   <span class="keywordflow">case</span> tok::kw___attribute:</div>
+<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span>     <span class="comment">// GNU typeof support.</span></div>
+<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span>   <span class="keywordflow">case</span> tok::kw_typeof:</div>
+<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span> </div>
+<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>     <span class="comment">// type-specifiers</span></div>
+<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>   <span class="keywordflow">case</span> tok::kw_short:</div>
+<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>   <span class="keywordflow">case</span> tok::kw_long:</div>
+<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>   <span class="keywordflow">case</span> tok::kw___int64:</div>
+<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>   <span class="keywordflow">case</span> tok::kw___int128:</div>
+<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>   <span class="keywordflow">case</span> tok::kw_signed:</div>
+<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>   <span class="keywordflow">case</span> tok::kw_unsigned:</div>
+<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>   <span class="keywordflow">case</span> tok::kw__Complex:</div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>   <span class="keywordflow">case</span> tok::kw__Imaginary:</div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>   <span class="keywordflow">case</span> tok::kw_void:</div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>   <span class="keywordflow">case</span> tok::kw_char:</div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>   <span class="keywordflow">case</span> tok::kw_wchar_t:</div>
+<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>   <span class="keywordflow">case</span> tok::kw_char16_t:</div>
+<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>   <span class="keywordflow">case</span> tok::kw_char32_t:</div>
+<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>   <span class="keywordflow">case</span> tok::kw_int:</div>
+<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>   <span class="keywordflow">case</span> tok::kw_half:</div>
+<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>   <span class="keywordflow">case</span> tok::kw_float:</div>
+<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>   <span class="keywordflow">case</span> tok::kw_double:</div>
+<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>   <span class="keywordflow">case</span> tok::kw_bool:</div>
+<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>   <span class="keywordflow">case</span> tok::kw__Bool:</div>
+<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>   <span class="keywordflow">case</span> tok::kw__Decimal32:</div>
+<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>   <span class="keywordflow">case</span> tok::kw__Decimal64:</div>
+<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>   <span class="keywordflow">case</span> tok::kw__Decimal128:</div>
+<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>   <span class="keywordflow">case</span> tok::kw___vector:</div>
+<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span> </div>
+<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>     <span class="comment">// OpenCL specific types:</span></div>
+<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>   <span class="keywordflow">case</span> tok::kw_image1d_t:</div>
+<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>   <span class="keywordflow">case</span> tok::kw_image1d_array_t:</div>
+<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>   <span class="keywordflow">case</span> tok::kw_image1d_buffer_t:</div>
+<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>   <span class="keywordflow">case</span> tok::kw_image2d_t:</div>
+<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>   <span class="keywordflow">case</span> tok::kw_image2d_array_t:</div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>   <span class="keywordflow">case</span> tok::kw_image3d_t:</div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>   <span class="keywordflow">case</span> tok::kw_sampler_t:</div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>   <span class="keywordflow">case</span> tok::kw_event_t:</div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span> </div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>     <span class="comment">// struct-or-union-specifier (C99) or class-specifier (C++)</span></div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>   <span class="keywordflow">case</span> tok::kw_class:</div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>   <span class="keywordflow">case</span> tok::kw_struct:</div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>   <span class="keywordflow">case</span> tok::kw___interface:</div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>   <span class="keywordflow">case</span> tok::kw_union:</div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>     <span class="comment">// enum-specifier</span></div>
+<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>   <span class="keywordflow">case</span> tok::kw_enum:</div>
+<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span> </div>
+<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>     <span class="comment">// type-qualifier</span></div>
+<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>   <span class="keywordflow">case</span> tok::kw_const:</div>
+<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>   <span class="keywordflow">case</span> tok::kw_volatile:</div>
+<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>   <span class="keywordflow">case</span> tok::kw_restrict:</div>
+<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span> </div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>     <span class="comment">// Debugger support.</span></div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>   <span class="keywordflow">case</span> tok::kw___unknown_anytype:</div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span> </div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>     <span class="comment">// typedef-name</span></div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>   <span class="keywordflow">case</span> tok::annot_typename:</div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span> </div>
+<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>     <span class="comment">// GNU ObjC bizarre protocol extension: <proto1,proto2> with implicit 'id'.</span></div>
+<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>   <span class="keywordflow">case</span> tok::less:</div>
+<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC1;</div>
+<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span> </div>
+<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>   <span class="keywordflow">case</span> tok::kw___cdecl:</div>
+<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>   <span class="keywordflow">case</span> tok::kw___stdcall:</div>
+<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>   <span class="keywordflow">case</span> tok::kw___fastcall:</div>
+<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>   <span class="keywordflow">case</span> tok::kw___thiscall:</div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>   <span class="keywordflow">case</span> tok::kw___w64:</div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>   <span class="keywordflow">case</span> tok::kw___ptr64:</div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>   <span class="keywordflow">case</span> tok::kw___ptr32:</div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>   <span class="keywordflow">case</span> tok::kw___pascal:</div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>   <span class="keywordflow">case</span> tok::kw___unaligned:</div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span> </div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>   <span class="keywordflow">case</span> tok::kw___private:</div>
+<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>   <span class="keywordflow">case</span> tok::kw___local:</div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>   <span class="keywordflow">case</span> tok::kw___global:</div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>   <span class="keywordflow">case</span> tok::kw___constant:</div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>   <span class="keywordflow">case</span> tok::kw___read_only:</div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>   <span class="keywordflow">case</span> tok::kw___read_write:</div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>   <span class="keywordflow">case</span> tok::kw___write_only:</div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span> </div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span> </div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>   <span class="keywordflow">case</span> tok::kw_private:</div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().OpenCL;</div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span> </div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>   <span class="comment">// C11 _Atomic</span></div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>   <span class="keywordflow">case</span> tok::kw__Atomic:</div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>   }</div>
+<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span> }</div>
+<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span> <span class="comment"></span></div>
+<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span> <span class="comment">/// isDeclarationSpecifier() - Return true if the current token is part of a</span></div>
+<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span> <span class="comment">/// declaration specifier.</span></div>
+<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span> <span class="comment">/// \param DisambiguatingWithExpression True to indicate that the purpose of</span></div>
+<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span> <span class="comment">/// this check is to disambiguate between an expression and a declaration.</span></div>
+<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::isDeclarationSpecifier(<span class="keywordtype">bool</span> DisambiguatingWithExpression) {</div>
+<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>   <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span> </div>
+<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>   <span class="keywordflow">case</span> tok::kw_private:</div>
+<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().OpenCL;</div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span> </div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>   <span class="keywordflow">case</span> tok::identifier:   <span class="comment">// foo::bar</span></div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>     <span class="comment">// Unfortunate hack to support "Class.factoryMethod" notation.</span></div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC1 && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::period))</div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>     <span class="keywordflow">if</span> (TryAltiVecVectorToken())</div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>     <span class="comment">// Fall through.</span></div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>   <span class="keywordflow">case</span> tok::kw_decltype: <span class="comment">// decltype(T())::type</span></div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>   <span class="keywordflow">case</span> tok::kw_typename: <span class="comment">// typename T::type</span></div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>     <span class="comment">// Annotate typenames and C++ scope specifiers.  If we get one, just</span></div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>     <span class="comment">// recurse to handle whatever we get.</span></div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a6a05dc9fb5788cbe37c727e89324c04d">TryAnnotateTypeOrScopeToken</a>())</div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier))</div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span> </div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>     <span class="comment">// If we're in Objective-C and we have an Objective-C class type followed</span></div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>     <span class="comment">// by an identifier and then either ':' or ']', in a place where an</span></div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>     <span class="comment">// expression is permitted, then this is probably a class message send</span></div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>     <span class="comment">// missing the initial '['. In this case, we won't consider this to be</span></div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>     <span class="comment">// the start of a declaration.</span></div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>     <span class="keywordflow">if</span> (DisambiguatingWithExpression &&</div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>         isStartOfObjCClassMessageMissingOpenBracket())</div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span> </div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>     <span class="keywordflow">return</span> isDeclarationSpecifier();</div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span> </div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>   <span class="keywordflow">case</span> tok::coloncolon:   <span class="comment">// ::foo::bar</span></div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::kw_new) ||    <span class="comment">// ::new</span></div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>         <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().is(tok::kw_delete))   <span class="comment">// ::delete</span></div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span> </div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>     <span class="comment">// Annotate typenames and C++ scope specifiers.  If we get one, just</span></div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>     <span class="comment">// recurse to handle whatever we get.</span></div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a6a05dc9fb5788cbe37c727e89324c04d">TryAnnotateTypeOrScopeToken</a>())</div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>     <span class="keywordflow">return</span> isDeclarationSpecifier();</div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span> </div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>     <span class="comment">// storage-class-specifier</span></div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>   <span class="keywordflow">case</span> tok::kw_typedef:</div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>   <span class="keywordflow">case</span> tok::kw_extern:</div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>   <span class="keywordflow">case</span> tok::kw___private_extern__:</div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>   <span class="keywordflow">case</span> tok::kw_static:</div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>   <span class="keywordflow">case</span> tok::kw_auto:</div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>   <span class="keywordflow">case</span> tok::kw_register:</div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>   <span class="keywordflow">case</span> tok::kw___thread:</div>
+<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>   <span class="keywordflow">case</span> tok::kw_thread_local:</div>
+<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>   <span class="keywordflow">case</span> tok::kw__Thread_local:</div>
+<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span> </div>
+<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>     <span class="comment">// Modules</span></div>
+<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>   <span class="keywordflow">case</span> tok::kw___module_private__:</div>
+<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span> </div>
+<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>     <span class="comment">// Debugger support</span></div>
+<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>   <span class="keywordflow">case</span> tok::kw___unknown_anytype:</div>
+<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span> </div>
+<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>     <span class="comment">// type-specifiers</span></div>
+<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>   <span class="keywordflow">case</span> tok::kw_short:</div>
+<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>   <span class="keywordflow">case</span> tok::kw_long:</div>
+<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>   <span class="keywordflow">case</span> tok::kw___int64:</div>
+<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>   <span class="keywordflow">case</span> tok::kw___int128:</div>
+<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>   <span class="keywordflow">case</span> tok::kw_signed:</div>
+<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>   <span class="keywordflow">case</span> tok::kw_unsigned:</div>
+<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>   <span class="keywordflow">case</span> tok::kw__Complex:</div>
+<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>   <span class="keywordflow">case</span> tok::kw__Imaginary:</div>
+<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>   <span class="keywordflow">case</span> tok::kw_void:</div>
+<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>   <span class="keywordflow">case</span> tok::kw_char:</div>
+<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>   <span class="keywordflow">case</span> tok::kw_wchar_t:</div>
+<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>   <span class="keywordflow">case</span> tok::kw_char16_t:</div>
+<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>   <span class="keywordflow">case</span> tok::kw_char32_t:</div>
+<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span> </div>
+<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>   <span class="keywordflow">case</span> tok::kw_int:</div>
+<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>   <span class="keywordflow">case</span> tok::kw_half:</div>
+<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>   <span class="keywordflow">case</span> tok::kw_float:</div>
+<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>   <span class="keywordflow">case</span> tok::kw_double:</div>
+<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>   <span class="keywordflow">case</span> tok::kw_bool:</div>
+<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>   <span class="keywordflow">case</span> tok::kw__Bool:</div>
+<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>   <span class="keywordflow">case</span> tok::kw__Decimal32:</div>
+<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>   <span class="keywordflow">case</span> tok::kw__Decimal64:</div>
+<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>   <span class="keywordflow">case</span> tok::kw__Decimal128:</div>
+<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>   <span class="keywordflow">case</span> tok::kw___vector:</div>
+<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span> </div>
+<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>     <span class="comment">// OpenCL specific types:</span></div>
+<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>   <span class="keywordflow">case</span> tok::kw_image1d_t:</div>
+<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>   <span class="keywordflow">case</span> tok::kw_image1d_array_t:</div>
+<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>   <span class="keywordflow">case</span> tok::kw_image1d_buffer_t:</div>
+<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>   <span class="keywordflow">case</span> tok::kw_image2d_t:</div>
+<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>   <span class="keywordflow">case</span> tok::kw_image2d_array_t:</div>
+<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>   <span class="keywordflow">case</span> tok::kw_image3d_t:</div>
+<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>   <span class="keywordflow">case</span> tok::kw_sampler_t:</div>
+<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>   <span class="keywordflow">case</span> tok::kw_event_t:</div>
+<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span> </div>
+<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>     <span class="comment">// struct-or-union-specifier (C99) or class-specifier (C++)</span></div>
+<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>   <span class="keywordflow">case</span> tok::kw_class:</div>
+<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>   <span class="keywordflow">case</span> tok::kw_struct:</div>
+<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>   <span class="keywordflow">case</span> tok::kw_union:</div>
+<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>   <span class="keywordflow">case</span> tok::kw___interface:</div>
+<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>     <span class="comment">// enum-specifier</span></div>
+<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>   <span class="keywordflow">case</span> tok::kw_enum:</div>
+<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span> </div>
+<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>     <span class="comment">// type-qualifier</span></div>
+<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>   <span class="keywordflow">case</span> tok::kw_const:</div>
+<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>   <span class="keywordflow">case</span> tok::kw_volatile:</div>
+<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>   <span class="keywordflow">case</span> tok::kw_restrict:</div>
+<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span> </div>
+<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>     <span class="comment">// function-specifier</span></div>
+<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>   <span class="keywordflow">case</span> tok::kw_inline:</div>
+<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>   <span class="keywordflow">case</span> tok::kw_virtual:</div>
+<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>   <span class="keywordflow">case</span> tok::kw_explicit:</div>
+<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>   <span class="keywordflow">case</span> tok::kw__Noreturn:</div>
+<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span> </div>
+<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>     <span class="comment">// alignment-specifier</span></div>
+<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>   <span class="keywordflow">case</span> tok::kw__Alignas:</div>
+<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span> </div>
+<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>     <span class="comment">// friend keyword.</span></div>
+<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>   <span class="keywordflow">case</span> tok::kw_friend:</div>
+<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span> </div>
+<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>     <span class="comment">// static_assert-declaration</span></div>
+<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>   <span class="keywordflow">case</span> tok::kw__Static_assert:</div>
+<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span> </div>
+<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>     <span class="comment">// GNU typeof support.</span></div>
+<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>   <span class="keywordflow">case</span> tok::kw_typeof:</div>
+<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span> </div>
+<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>     <span class="comment">// GNU attributes.</span></div>
+<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>   <span class="keywordflow">case</span> tok::kw___attribute:</div>
+<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span> </div>
+<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>     <span class="comment">// C++11 decltype and constexpr.</span></div>
+<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>   <span class="keywordflow">case</span> tok::annot_decltype:</div>
+<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>   <span class="keywordflow">case</span> tok::kw_constexpr:</div>
+<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span> </div>
+<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>     <span class="comment">// C11 _Atomic</span></div>
+<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>   <span class="keywordflow">case</span> tok::kw__Atomic:</div>
+<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span> </div>
+<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>     <span class="comment">// GNU ObjC bizarre protocol extension: <proto1,proto2> with implicit 'id'.</span></div>
+<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>   <span class="keywordflow">case</span> tok::less:</div>
+<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().ObjC1;</div>
+<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span> </div>
+<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>     <span class="comment">// typedef-name</span></div>
+<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>   <span class="keywordflow">case</span> tok::annot_typename:</div>
+<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>     <span class="keywordflow">return</span> !DisambiguatingWithExpression ||</div>
+<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>            !isStartOfObjCClassMessageMissingOpenBracket();</div>
+<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span> </div>
+<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>   <span class="keywordflow">case</span> tok::kw___declspec:</div>
+<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>   <span class="keywordflow">case</span> tok::kw___cdecl:</div>
+<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>   <span class="keywordflow">case</span> tok::kw___stdcall:</div>
+<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>   <span class="keywordflow">case</span> tok::kw___fastcall:</div>
+<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>   <span class="keywordflow">case</span> tok::kw___thiscall:</div>
+<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>   <span class="keywordflow">case</span> tok::kw___w64:</div>
+<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>   <span class="keywordflow">case</span> tok::kw___sptr:</div>
+<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>   <span class="keywordflow">case</span> tok::kw___uptr:</div>
+<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>   <span class="keywordflow">case</span> tok::kw___ptr64:</div>
+<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>   <span class="keywordflow">case</span> tok::kw___ptr32:</div>
+<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>   <span class="keywordflow">case</span> tok::kw___forceinline:</div>
+<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>   <span class="keywordflow">case</span> tok::kw___pascal:</div>
+<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span>   <span class="keywordflow">case</span> tok::kw___unaligned:</div>
+<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span> </div>
+<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span>   <span class="keywordflow">case</span> tok::kw___private:</div>
+<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>   <span class="keywordflow">case</span> tok::kw___local:</div>
+<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>   <span class="keywordflow">case</span> tok::kw___global:</div>
+<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span>   <span class="keywordflow">case</span> tok::kw___constant:</div>
+<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>   <span class="keywordflow">case</span> tok::kw___read_only:</div>
+<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>   <span class="keywordflow">case</span> tok::kw___read_write:</div>
+<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>   <span class="keywordflow">case</span> tok::kw___write_only:</div>
+<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span> </div>
+<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>   }</div>
+<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span> }</div>
+<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span> </div>
+<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span> <span class="keywordtype">bool</span> Parser::isConstructorDeclarator() {</div>
+<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>   TentativeParsingAction TPA(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span> </div>
+<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>   <span class="comment">// Parse the C++ scope specifier.</span></div>
+<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>   <a class="code" href="classclang_1_1CXXScopeSpec.html" title="Represents a C++ nested-name-specifier or a global scope specifier.">CXXScopeSpec</a> SS;</div>
+<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>   <span class="keywordflow">if</span> (ParseOptionalCXXScopeSpecifier(SS, <a class="code" href="namespaceclang.html#aeb304ed08ffec14495690938d6bd95e2">ParsedType</a>(),</div>
+<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>                                      <span class="comment">/*EnteringContext=*/</span><span class="keyword">true</span>)) {</div>
+<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>     TPA.Revert();</div>
+<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>   }</div>
+<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span> </div>
+<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>   <span class="comment">// Parse the constructor name.</span></div>
+<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_template_id)) {</div>
+<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>     <span class="comment">// We already know that we have a constructor name; just consume</span></div>
+<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>     <span class="comment">// the token.</span></div>
+<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>     TPA.Revert();</div>
+<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>   }</div>
+<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span> </div>
+<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>   <span class="comment">// Current class name must be followed by a left parenthesis.</span></div>
+<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::l_paren)) {</div>
+<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>     TPA.Revert();</div>
+<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>   }</div>
+<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>   ConsumeParen();</div>
+<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span> </div>
+<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>   <span class="comment">// A right parenthesis, or ellipsis followed by a right parenthesis signals</span></div>
+<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>   <span class="comment">// that we have a constructor.</span></div>
+<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren) ||</div>
+<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>       (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ellipsis) && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren))) {</div>
+<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>     TPA.Revert();</div>
+<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>   }</div>
+<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span> </div>
+<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>   <span class="comment">// A C++11 attribute here signals that we have a constructor, and is an</span></div>
+<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>   <span class="comment">// attribute on the first constructor parameter.</span></div>
+<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> &&</div>
+<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>       isCXX11AttributeSpecifier(<span class="comment">/*Disambiguate*/</span> <span class="keyword">false</span>,</div>
+<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>                                 <span class="comment">/*OuterMightBeMessageSend*/</span> <span class="keyword">true</span>)) {</div>
+<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>     TPA.Revert();</div>
+<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>   }</div>
+<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span> </div>
+<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>   <span class="comment">// If we need to, enter the specified scope.</span></div>
+<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span>   DeclaratorScopeObj DeclScopeObj(*<span class="keyword">this</span>, SS);</div>
+<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>   <span class="keywordflow">if</span> (SS.<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>() && Actions.<a class="code" href="classclang_1_1Sema.html#a70e5b4ceeddc42515f4488ca91a905bb">ShouldEnterDeclaratorScope</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), SS))</div>
+<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>     DeclScopeObj.EnterDeclaratorScope();</div>
+<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span> </div>
+<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>   <span class="comment">// Optionally skip Microsoft attributes.</span></div>
+<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>   <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> Attrs(AttrFactory);</div>
+<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>   MaybeParseMicrosoftAttributes(Attrs);</div>
+<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span> </div>
+<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>   <span class="comment">// Check whether the next token(s) are part of a declaration</span></div>
+<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>   <span class="comment">// specifier, in which case we have the start of a parameter and,</span></div>
+<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>   <span class="comment">// therefore, we know that this is a constructor.</span></div>
+<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>   <span class="keywordtype">bool</span> IsConstructor = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>   <span class="keywordflow">if</span> (isDeclarationSpecifier())</div>
+<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>     IsConstructor = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) ||</div>
+<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>            (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_cxxscope) && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier))) {</div>
+<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>     <span class="comment">// We've seen "C ( X" or "C ( X::Y", but "X" / "X::Y" is not a type.</span></div>
+<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>     <span class="comment">// This might be a parenthesized member name, but is more likely to</span></div>
+<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>     <span class="comment">// be a constructor declaration with an invalid argument type. Keep</span></div>
+<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>     <span class="comment">// looking.</span></div>
+<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_cxxscope))</div>
+<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span> </div>
+<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>     <span class="comment">// If this is not a constructor, we must be parsing a declarator,</span></div>
+<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span>     <span class="comment">// which must have one of the following syntactic forms (see the</span></div>
+<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>     <span class="comment">// grammar extract at the start of ParseDirectDeclarator):</span></div>
+<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>     <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>     <span class="keywordflow">case</span> tok::l_paren:</div>
+<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>       <span class="comment">// C(X   (   int));</span></div>
+<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>     <span class="keywordflow">case</span> tok::l_square:</div>
+<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>       <span class="comment">// C(X   [   5]);</span></div>
+<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>       <span class="comment">// C(X   [   [attribute]]);</span></div>
+<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>     <span class="keywordflow">case</span> tok::coloncolon:</div>
+<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>       <span class="comment">// C(X   ::   Y);</span></div>
+<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>       <span class="comment">// C(X   ::   *p);</span></div>
+<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>     <span class="keywordflow">case</span> tok::r_paren:</div>
+<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>       <span class="comment">// C(X   )</span></div>
+<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>       <span class="comment">// Assume this isn't a constructor, rather than assuming it's a</span></div>
+<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>       <span class="comment">// constructor with an unnamed parameter of an ill-formed type.</span></div>
+<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span> </div>
+<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>       IsConstructor = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>     }</div>
+<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>   }</div>
+<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span> </div>
+<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>   TPA.Revert();</div>
+<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>   <span class="keywordflow">return</span> IsConstructor;</div>
+<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span> }</div>
+<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span> <span class="comment"></span></div>
+<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span> <span class="comment">/// ParseTypeQualifierListOpt</span></div>
+<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span> <span class="comment">///          type-qualifier-list: [C99 6.7.5]</span></div>
+<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span> <span class="comment">///            type-qualifier</span></div>
+<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span> <span class="comment">/// [vendor]   attributes</span></div>
+<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span> <span class="comment">///              [ only if VendorAttributesAllowed=true ]</span></div>
+<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span> <span class="comment">///            type-qualifier-list type-qualifier</span></div>
+<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span> <span class="comment">/// [vendor]   type-qualifier-list attributes</span></div>
+<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span> <span class="comment">///              [ only if VendorAttributesAllowed=true ]</span></div>
+<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span> <span class="comment">/// [C++0x]    attribute-specifier[opt] is allowed before cv-qualifier-seq</span></div>
+<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span> <span class="comment">///              [ only if CXX11AttributesAllowed=true ]</span></div>
+<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span> <span class="comment">/// Note: vendor can be GNU, MS, etc.</span></div>
+<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseTypeQualifierListOpt(<a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> &DS,</div>
+<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>                                        <span class="keywordtype">bool</span> VendorAttributesAllowed,</div>
+<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>                                        <span class="keywordtype">bool</span> CXX11AttributesAllowed,</div>
+<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>                                        <span class="keywordtype">bool</span> AtomicAllowed,</div>
+<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>                                        <span class="keywordtype">bool</span> IdentifierRequired) {</div>
+<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> && CXX11AttributesAllowed &&</div>
+<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>       isCXX11AttributeSpecifier()) {</div>
+<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>     ParsedAttributesWithRange attrs(AttrFactory);</div>
+<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>     ParseCXX11Attributes(attrs);</div>
+<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>     DS.<a class="code" href="classclang_1_1DeclSpec.html#af2c90bf49db094ba955821df324218c9">takeAttributesFrom</a>(attrs);</div>
+<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>   }</div>
+<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span> </div>
+<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EndLoc;</div>
+<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span> </div>
+<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>   <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>     <span class="keywordtype">bool</span> isInvalid = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *PrevSpec = 0;</div>
+<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>     <span class="keywordtype">unsigned</span> DiagID = 0;</div>
+<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l04432"></a><span class="lineno"> 4432</span> </div>
+<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span>     <span class="keywordflow">switch</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>()) {</div>
+<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>     <span class="keywordflow">case</span> tok::code_completion:</div>
+<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>       Actions.<a class="code" href="classclang_1_1Sema.html#a51cd77d556075aecd6255effa031798a">CodeCompleteTypeQualifiers</a>(DS);</div>
+<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>       <span class="keywordflow">return</span> cutOffParsing();</div>
+<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span> </div>
+<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>     <span class="keywordflow">case</span> tok::kw_const:</div>
+<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a37e97f6b9e2b185e8d3673c6805852a2">DeclSpec::TQ_const</a>   , Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>     <span class="keywordflow">case</span> tok::kw_volatile:</div>
+<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858acc41f6b86fe9124e33ea9ae583c34d04">DeclSpec::TQ_volatile</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>     <span class="keywordflow">case</span> tok::kw_restrict:</div>
+<div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a940c72c42a27037fd0c002e17406c7da">DeclSpec::TQ_restrict</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l04448"></a><span class="lineno"> 4448</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l04449"></a><span class="lineno"> 4449</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04450"></a><span class="lineno"> 4450</span>     <span class="keywordflow">case</span> tok::kw__Atomic:</div>
+<div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>       <span class="keywordflow">if</span> (!AtomicAllowed)</div>
+<div class="line"><a name="l04452"></a><span class="lineno"> 4452</span>         <span class="keywordflow">goto</span> DoneWithTypeQuals;</div>
+<div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>       isInvalid = DS.<a class="code" href="classclang_1_1DeclSpec.html#aae1191d64a50506ff86b2259e4fdf8ef">SetTypeQual</a>(<a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a72437f2a8423fd3d585cd5e139efa580">DeclSpec::TQ_atomic</a>, Loc, PrevSpec, DiagID,</div>
+<div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>                                  <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>());</div>
+<div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04456"></a><span class="lineno"> 4456</span> </div>
+<div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>     <span class="comment">// OpenCL qualifiers:</span></div>
+<div class="line"><a name="l04458"></a><span class="lineno"> 4458</span>     <span class="keywordflow">case</span> tok::kw_private:</div>
+<div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>       <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().OpenCL)</div>
+<div class="line"><a name="l04460"></a><span class="lineno"> 4460</span>         <span class="keywordflow">goto</span> DoneWithTypeQuals;</div>
+<div class="line"><a name="l04461"></a><span class="lineno"> 4461</span>     <span class="keywordflow">case</span> tok::kw___private:</div>
+<div class="line"><a name="l04462"></a><span class="lineno"> 4462</span>     <span class="keywordflow">case</span> tok::kw___global:</div>
+<div class="line"><a name="l04463"></a><span class="lineno"> 4463</span>     <span class="keywordflow">case</span> tok::kw___local:</div>
+<div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>     <span class="keywordflow">case</span> tok::kw___constant:</div>
+<div class="line"><a name="l04465"></a><span class="lineno"> 4465</span>     <span class="keywordflow">case</span> tok::kw___read_only:</div>
+<div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>     <span class="keywordflow">case</span> tok::kw___write_only:</div>
+<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span>     <span class="keywordflow">case</span> tok::kw___read_write:</div>
+<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span>       ParseOpenCLQualifiers(DS);</div>
+<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span> </div>
+<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span>     <span class="keywordflow">case</span> tok::kw___uptr:</div>
+<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>       <span class="comment">// GNU libc headers in C mode use '__uptr' as an identifer which conflicts</span></div>
+<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>       <span class="comment">// with the MS modifier keyword.</span></div>
+<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>       <span class="keywordflow">if</span> (VendorAttributesAllowed && !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> &&</div>
+<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span>           IdentifierRequired && DS.<a class="code" href="classclang_1_1DeclSpec.html#ac08f67e48eb6115bb5ac0cc9a357bb50">isEmpty</a>() && <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::semi)) {</div>
+<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>         <span class="keywordflow">if</span> (TryKeywordIdentFallback(<span class="keyword">false</span>))</div>
+<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span>       }</div>
+<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span>     <span class="keywordflow">case</span> tok::kw___sptr:</div>
+<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>     <span class="keywordflow">case</span> tok::kw___w64:</div>
+<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>     <span class="keywordflow">case</span> tok::kw___ptr64:</div>
+<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>     <span class="keywordflow">case</span> tok::kw___ptr32:</div>
+<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>     <span class="keywordflow">case</span> tok::kw___cdecl:</div>
+<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>     <span class="keywordflow">case</span> tok::kw___stdcall:</div>
+<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span>     <span class="keywordflow">case</span> tok::kw___fastcall:</div>
+<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>     <span class="keywordflow">case</span> tok::kw___thiscall:</div>
+<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>     <span class="keywordflow">case</span> tok::kw___unaligned:</div>
+<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>       <span class="keywordflow">if</span> (VendorAttributesAllowed) {</div>
+<div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>         ParseMicrosoftTypeAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>       }</div>
+<div class="line"><a name="l04492"></a><span class="lineno"> 4492</span>       <span class="keywordflow">goto</span> DoneWithTypeQuals;</div>
+<div class="line"><a name="l04493"></a><span class="lineno"> 4493</span>     <span class="keywordflow">case</span> tok::kw___pascal:</div>
+<div class="line"><a name="l04494"></a><span class="lineno"> 4494</span>       <span class="keywordflow">if</span> (VendorAttributesAllowed) {</div>
+<div class="line"><a name="l04495"></a><span class="lineno"> 4495</span>         ParseBorlandTypeAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>       }</div>
+<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>       <span class="keywordflow">goto</span> DoneWithTypeQuals;</div>
+<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span>     <span class="keywordflow">case</span> tok::kw___attribute:</div>
+<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>       <span class="keywordflow">if</span> (VendorAttributesAllowed) {</div>
+<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>         ParseGNUAttributes(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>());</div>
+<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>         <span class="keywordflow">continue</span>; <span class="comment">// do *not* consume the next token!</span></div>
+<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>       }</div>
+<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>       <span class="comment">// otherwise, FALL THROUGH!</span></div>
+<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>       DoneWithTypeQuals:</div>
+<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>       <span class="comment">// If this is not a type-qualifier token, we're done reading type</span></div>
+<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>       <span class="comment">// qualifiers.  First verify that DeclSpec's are consistent.</span></div>
+<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span>       DS.<a class="code" href="classclang_1_1DeclSpec.html#a0fa092492d6de7c1bafe7aa65284364b">Finish</a>(Diags, PP);</div>
+<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>       <span class="keywordflow">if</span> (EndLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>())</div>
+<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>         DS.<a class="code" href="classclang_1_1DeclSpec.html#a3008264a9dc987fa770717c59c4f2e7d">SetRangeEnd</a>(EndLoc);</div>
+<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>     }</div>
+<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span> </div>
+<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>     <span class="comment">// If the specifier combination wasn't legal, issue a diagnostic.</span></div>
+<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>     <span class="keywordflow">if</span> (isInvalid) {</div>
+<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>       assert(PrevSpec && <span class="stringliteral">"Method did not return previous specifier!"</span>);</div>
+<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, DiagID) << PrevSpec;</div>
+<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>     }</div>
+<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>     EndLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>   }</div>
+<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span> }</div>
+<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span> </div>
+<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span> <span class="comment"></span></div>
+<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span> <span class="comment">/// ParseDeclarator - Parse and verify a newly-initialized declarator.</span></div>
+<div class="line"><a name="l04526"></a><span class="lineno"> 4526</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04527"></a><span class="lineno"> 4527</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseDeclarator(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D) {<span class="comment"></span></div>
+<div class="line"><a name="l04528"></a><span class="lineno"> 4528</span> <span class="comment">  /// This implements the 'declarator' production in the C grammar, then checks</span></div>
+<div class="line"><a name="l04529"></a><span class="lineno"> 4529</span> <span class="comment">  /// for well-formedness and issues diagnostics.</span></div>
+<div class="line"><a name="l04530"></a><span class="lineno"> 4530</span> <span class="comment"></span>  ParseDeclaratorInternal(D, &Parser::ParseDirectDeclarator);</div>
+<div class="line"><a name="l04531"></a><span class="lineno"> 4531</span> }</div>
+<div class="line"><a name="l04532"></a><span class="lineno"> 4532</span> </div>
+<div class="line"><a name="l04533"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#ae74c4ce00f2a91f568ad3505346222f7"> 4533</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="ParseDecl_8cpp.html#ae74c4ce00f2a91f568ad3505346222f7">isPtrOperatorToken</a>(<a class="code" href="namespaceclang_1_1tok.html#aca39774690bea476816dc56565cb7cd5" title="Provides a simple uniform namespace for tokens from all C languages.">tok::TokenKind</a> Kind, <span class="keyword">const</span> <a class="code" href="classclang_1_1LangOptions.html" title="Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...">LangOptions</a> &Lang) {</div>
+<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>   <span class="keywordflow">if</span> (Kind == tok::star || Kind == tok::caret)</div>
+<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span> </div>
+<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>   <span class="comment">// We parse rvalue refs in C++03, because otherwise the errors are scary.</span></div>
+<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>   <span class="keywordflow">if</span> (!Lang.CPlusPlus)</div>
+<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span> </div>
+<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>   <span class="keywordflow">return</span> Kind == tok::amp || Kind == tok::ampamp;</div>
+<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span> }</div>
+<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span> <span class="comment"></span></div>
+<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span> <span class="comment">/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator</span></div>
+<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span> <span class="comment">/// is parsed by the function passed to it. Pass null, and the direct-declarator</span></div>
+<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span> <span class="comment">/// isn't parsed at all, making this function effectively parse the C++</span></div>
+<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span> <span class="comment">/// ptr-operator production.</span></div>
+<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span> <span class="comment">/// If the grammar of this construct is extended, matching changes must also be</span></div>
+<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span> <span class="comment">/// made to TryParseDeclarator and MightBeDeclarator, and possibly to</span></div>
+<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span> <span class="comment">/// isConstructorDeclarator.</span></div>
+<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span> <span class="comment">///       declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]</span></div>
+<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span> <span class="comment">/// [C]     pointer[opt] direct-declarator</span></div>
+<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span> <span class="comment">/// [C++]   direct-declarator</span></div>
+<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span> <span class="comment">/// [C++]   ptr-operator declarator</span></div>
+<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span> <span class="comment">///       pointer: [C99 6.7.5]</span></div>
+<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span> <span class="comment">///         '*' type-qualifier-list[opt]</span></div>
+<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span> <span class="comment">///         '*' type-qualifier-list[opt] pointer</span></div>
+<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span> <span class="comment">///       ptr-operator:</span></div>
+<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span> <span class="comment">///         '*' cv-qualifier-seq[opt]</span></div>
+<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span> <span class="comment">///         '&'</span></div>
+<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span> <span class="comment">/// [C++0x] '&&'</span></div>
+<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span> <span class="comment">/// [GNU]   '&' restrict[opt] attributes[opt]</span></div>
+<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span> <span class="comment">/// [GNU?]  '&&' restrict[opt] attributes[opt]</span></div>
+<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span> <span class="comment">///         '::'[opt] nested-name-specifier '*' cv-qualifier-seq[opt]</span></div>
+<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseDeclaratorInternal(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>                                      DirectDeclParseFunction DirectDeclParser) {</div>
+<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>   <span class="keywordflow">if</span> (Diags.<a class="code" href="classclang_1_1DiagnosticsEngine.html#ab08ec67ae775771096008c79891e3506">hasAllExtensionsSilenced</a>())</div>
+<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>     D.<a class="code" href="classclang_1_1Declarator.html#ad641e738bd91014de505d194635fd87e">setExtension</a>();</div>
+<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span> </div>
+<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span>   <span class="comment">// C++ member pointers start with a '::' or a nested-name.</span></div>
+<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>   <span class="comment">// Member pointers get special handling, since there's no place for the</span></div>
+<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>   <span class="comment">// scope spec in the generic path below.</span></div>
+<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> &&</div>
+<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>       (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::coloncolon) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) ||</div>
+<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span>        Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_cxxscope))) {</div>
+<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>     <span class="keywordtype">bool</span> EnteringContext = D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a> ||</div>
+<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span>                            D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a>;</div>
+<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>     <a class="code" href="classclang_1_1CXXScopeSpec.html" title="Represents a C++ nested-name-specifier or a global scope specifier.">CXXScopeSpec</a> SS;</div>
+<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>     ParseOptionalCXXScopeSpecifier(SS, <a class="code" href="namespaceclang.html#aeb304ed08ffec14495690938d6bd95e2">ParsedType</a>(), EnteringContext);</div>
+<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span> </div>
+<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>     <span class="keywordflow">if</span> (SS.<a class="code" href="classclang_1_1CXXScopeSpec.html#a22c85914d194b1a4dd94bd10da20023b" title="A scope specifier is present, but may be valid or invalid.">isNotEmpty</a>()) {</div>
+<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::star)) {</div>
+<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>         <span class="comment">// The scope spec really belongs to the direct-declarator.</span></div>
+<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>         <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#aa9abfecde9d82d440096066028f774f4">mayHaveIdentifier</a>())</div>
+<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>           D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>() = SS;</div>
+<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>           AnnotateScopeToken(SS, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span> </div>
+<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>         <span class="keywordflow">if</span> (DirectDeclParser)</div>
+<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span>           (this->*DirectDeclParser)(D);</div>
+<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span>       }</div>
+<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span> </div>
+<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>       D.<a class="code" href="classclang_1_1Declarator.html#ad1251a155b6375921dd4e6cc682eb53a" title="SetRangeEnd - Set the end of the source range to Loc, unless it's invalid.">SetRangeEnd</a>(Loc);</div>
+<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>       <a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> DS(AttrFactory);</div>
+<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>       ParseTypeQualifierListOpt(DS);</div>
+<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>       D.<a class="code" href="classclang_1_1Declarator.html#acde4a425328b570d00be59da31413b70">ExtendWithDeclSpec</a>(DS);</div>
+<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span> </div>
+<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>       <span class="comment">// Recurse to parse whatever is left.</span></div>
+<div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>       ParseDeclaratorInternal(D, DirectDeclParser);</div>
+<div class="line"><a name="l04606"></a><span class="lineno"> 4606</span> </div>
+<div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>       <span class="comment">// Sema will have to catch (syntactically invalid) pointers into global</span></div>
+<div class="line"><a name="l04608"></a><span class="lineno"> 4608</span>       <span class="comment">// scope. It has to catch pointers into namespace scope anyway.</span></div>
+<div class="line"><a name="l04609"></a><span class="lineno"> 4609</span>       D.<a class="code" href="classclang_1_1Declarator.html#a6584999672d6ede1bc33ca1f85452b90">AddTypeInfo</a>(<a class="code" href="structclang_1_1DeclaratorChunk.html#a737ba183d900846c0530ed65d582e35f">DeclaratorChunk::getMemberPointer</a>(SS,DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>(),</div>
+<div class="line"><a name="l04610"></a><span class="lineno"> 4610</span>                                                       Loc),</div>
+<div class="line"><a name="l04611"></a><span class="lineno"> 4611</span>                     DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>(),</div>
+<div class="line"><a name="l04612"></a><span class="lineno"> 4612</span>                     <span class="comment">/* Don't replace range end. */</span><a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>());</div>
+<div class="line"><a name="l04613"></a><span class="lineno"> 4613</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04614"></a><span class="lineno"> 4614</span>     }</div>
+<div class="line"><a name="l04615"></a><span class="lineno"> 4615</span>   }</div>
+<div class="line"><a name="l04616"></a><span class="lineno"> 4616</span> </div>
+<div class="line"><a name="l04617"></a><span class="lineno"> 4617</span>   <a class="code" href="namespaceclang_1_1tok.html#aca39774690bea476816dc56565cb7cd5" title="Provides a simple uniform namespace for tokens from all C languages.">tok::TokenKind</a> Kind = Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>();</div>
+<div class="line"><a name="l04618"></a><span class="lineno"> 4618</span>   <span class="comment">// Not a pointer, C++ reference, or block.</span></div>
+<div class="line"><a name="l04619"></a><span class="lineno"> 4619</span>   <span class="keywordflow">if</span> (!<a class="code" href="ParseDecl_8cpp.html#ae74c4ce00f2a91f568ad3505346222f7">isPtrOperatorToken</a>(Kind, <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>())) {</div>
+<div class="line"><a name="l04620"></a><span class="lineno"> 4620</span>     <span class="keywordflow">if</span> (DirectDeclParser)</div>
+<div class="line"><a name="l04621"></a><span class="lineno"> 4621</span>       (this->*DirectDeclParser)(D);</div>
+<div class="line"><a name="l04622"></a><span class="lineno"> 4622</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04623"></a><span class="lineno"> 4623</span>   }</div>
+<div class="line"><a name="l04624"></a><span class="lineno"> 4624</span> </div>
+<div class="line"><a name="l04625"></a><span class="lineno"> 4625</span>   <span class="comment">// Otherwise, '*' -> pointer, '^' -> block, '&' -> lvalue reference,</span></div>
+<div class="line"><a name="l04626"></a><span class="lineno"> 4626</span>   <span class="comment">// '&&' -> rvalue reference</span></div>
+<div class="line"><a name="l04627"></a><span class="lineno"> 4627</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();  <span class="comment">// Eat the *, ^, & or &&.</span></div>
+<div class="line"><a name="l04628"></a><span class="lineno"> 4628</span>   D.<a class="code" href="classclang_1_1Declarator.html#ad1251a155b6375921dd4e6cc682eb53a" title="SetRangeEnd - Set the end of the source range to Loc, unless it's invalid.">SetRangeEnd</a>(Loc);</div>
+<div class="line"><a name="l04629"></a><span class="lineno"> 4629</span> </div>
+<div class="line"><a name="l04630"></a><span class="lineno"> 4630</span>   <span class="keywordflow">if</span> (Kind == tok::star || Kind == tok::caret) {</div>
+<div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>     <span class="comment">// Is a pointer.</span></div>
+<div class="line"><a name="l04632"></a><span class="lineno"> 4632</span>     <a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> DS(AttrFactory);</div>
+<div class="line"><a name="l04633"></a><span class="lineno"> 4633</span> </div>
+<div class="line"><a name="l04634"></a><span class="lineno"> 4634</span>     <span class="comment">// FIXME: GNU attributes are not allowed here in a new-type-id.</span></div>
+<div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>     ParseTypeQualifierListOpt(DS, <span class="keyword">true</span>, <span class="keyword">true</span>, <span class="keyword">true</span>, !D.<a class="code" href="classclang_1_1Declarator.html#a065bae4b5e3f42a3c06da7965077f47c">mayOmitIdentifier</a>());</div>
+<div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>     D.<a class="code" href="classclang_1_1Declarator.html#acde4a425328b570d00be59da31413b70">ExtendWithDeclSpec</a>(DS);</div>
+<div class="line"><a name="l04637"></a><span class="lineno"> 4637</span> </div>
+<div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>     <span class="comment">// Recursively parse the declarator.</span></div>
+<div class="line"><a name="l04639"></a><span class="lineno"> 4639</span>     ParseDeclaratorInternal(D, DirectDeclParser);</div>
+<div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>     <span class="keywordflow">if</span> (Kind == tok::star)</div>
+<div class="line"><a name="l04641"></a><span class="lineno"> 4641</span>       <span class="comment">// Remember that we parsed a pointer type, and remember the type-quals.</span></div>
+<div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>       D.<a class="code" href="classclang_1_1Declarator.html#a6584999672d6ede1bc33ca1f85452b90">AddTypeInfo</a>(<a class="code" href="structclang_1_1DeclaratorChunk.html#aa7f33ad0feb2794f2c8717bc6b2179a5" title="Return a DeclaratorChunk for a pointer.">DeclaratorChunk::getPointer</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>(), Loc,</div>
+<div class="line"><a name="l04643"></a><span class="lineno"> 4643</span>                                                 DS.<a class="code" href="classclang_1_1DeclSpec.html#aeede161c2e7790e4d9ceaca2657af20f">getConstSpecLoc</a>(),</div>
+<div class="line"><a name="l04644"></a><span class="lineno"> 4644</span>                                                 DS.<a class="code" href="classclang_1_1DeclSpec.html#a6dc67cc243c1018bc393691cb012c9fd">getVolatileSpecLoc</a>(),</div>
+<div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>                                                 DS.<a class="code" href="classclang_1_1DeclSpec.html#a56f20f9ce57bb74bec1830b38438f8e0">getRestrictSpecLoc</a>()),</div>
+<div class="line"><a name="l04646"></a><span class="lineno"> 4646</span>                     DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>(),</div>
+<div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>                     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>());</div>
+<div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>       <span class="comment">// Remember that we parsed a Block type, and remember the type-quals.</span></div>
+<div class="line"><a name="l04650"></a><span class="lineno"> 4650</span>       D.<a class="code" href="classclang_1_1Declarator.html#a6584999672d6ede1bc33ca1f85452b90">AddTypeInfo</a>(<a class="code" href="structclang_1_1DeclaratorChunk.html#a3f12446b08f52a065ad063c54460c1e0" title="Return a DeclaratorChunk for a block.">DeclaratorChunk::getBlockPointer</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>(),</div>
+<div class="line"><a name="l04651"></a><span class="lineno"> 4651</span>                                                      Loc),</div>
+<div class="line"><a name="l04652"></a><span class="lineno"> 4652</span>                     DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>(),</div>
+<div class="line"><a name="l04653"></a><span class="lineno"> 4653</span>                     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>());</div>
+<div class="line"><a name="l04654"></a><span class="lineno"> 4654</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04655"></a><span class="lineno"> 4655</span>     <span class="comment">// Is a reference</span></div>
+<div class="line"><a name="l04656"></a><span class="lineno"> 4656</span>     <a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> DS(AttrFactory);</div>
+<div class="line"><a name="l04657"></a><span class="lineno"> 4657</span> </div>
+<div class="line"><a name="l04658"></a><span class="lineno"> 4658</span>     <span class="comment">// Complain about rvalue references in C++03, but then go on and build</span></div>
+<div class="line"><a name="l04659"></a><span class="lineno"> 4659</span>     <span class="comment">// the declarator.</span></div>
+<div class="line"><a name="l04660"></a><span class="lineno"> 4660</span>     <span class="keywordflow">if</span> (Kind == tok::ampamp)</div>
+<div class="line"><a name="l04661"></a><span class="lineno"> 4661</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Loc, <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> ?</div>
+<div class="line"><a name="l04662"></a><span class="lineno"> 4662</span>            diag::warn_cxx98_compat_rvalue_reference :</div>
+<div class="line"><a name="l04663"></a><span class="lineno"> 4663</span>            diag::ext_rvalue_reference);</div>
+<div class="line"><a name="l04664"></a><span class="lineno"> 4664</span> </div>
+<div class="line"><a name="l04665"></a><span class="lineno"> 4665</span>     <span class="comment">// GNU-style and C++11 attributes are allowed here, as is restrict.</span></div>
+<div class="line"><a name="l04666"></a><span class="lineno"> 4666</span>     ParseTypeQualifierListOpt(DS);</div>
+<div class="line"><a name="l04667"></a><span class="lineno"> 4667</span>     D.<a class="code" href="classclang_1_1Declarator.html#acde4a425328b570d00be59da31413b70">ExtendWithDeclSpec</a>(DS);</div>
+<div class="line"><a name="l04668"></a><span class="lineno"> 4668</span> </div>
+<div class="line"><a name="l04669"></a><span class="lineno"> 4669</span>     <span class="comment">// C++ 8.3.2p1: cv-qualified references are ill-formed except when the</span></div>
+<div class="line"><a name="l04670"></a><span class="lineno"> 4670</span>     <span class="comment">// cv-qualifiers are introduced through the use of a typedef or of a</span></div>
+<div class="line"><a name="l04671"></a><span class="lineno"> 4671</span>     <span class="comment">// template type argument, in which case the cv-qualifiers are ignored.</span></div>
+<div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>     <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>() != <a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858ad4355e0fb665e9f9ea9bec5100069b79">DeclSpec::TQ_unspecified</a>) {</div>
+<div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>() & <a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a37e97f6b9e2b185e8d3673c6805852a2">DeclSpec::TQ_const</a>)</div>
+<div class="line"><a name="l04674"></a><span class="lineno"> 4674</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#aeede161c2e7790e4d9ceaca2657af20f">getConstSpecLoc</a>(),</div>
+<div class="line"><a name="l04675"></a><span class="lineno"> 4675</span>              diag::err_invalid_reference_qualifier_application) << <span class="stringliteral">"const"</span>;</div>
+<div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>() & <a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858acc41f6b86fe9124e33ea9ae583c34d04">DeclSpec::TQ_volatile</a>)</div>
+<div class="line"><a name="l04677"></a><span class="lineno"> 4677</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a6dc67cc243c1018bc393691cb012c9fd">getVolatileSpecLoc</a>(),</div>
+<div class="line"><a name="l04678"></a><span class="lineno"> 4678</span>              diag::err_invalid_reference_qualifier_application) << <span class="stringliteral">"volatile"</span>;</div>
+<div class="line"><a name="l04679"></a><span class="lineno"> 4679</span>       <span class="comment">// 'restrict' is permitted as an extension.</span></div>
+<div class="line"><a name="l04680"></a><span class="lineno"> 4680</span>       <span class="keywordflow">if</span> (DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>() & <a class="code" href="classclang_1_1DeclSpec.html#a9b714ac5b4e929fe06c2ac17d9628858a72437f2a8423fd3d585cd5e139efa580">DeclSpec::TQ_atomic</a>)</div>
+<div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a549f689bd1728757d166e567723c7f8f">getAtomicSpecLoc</a>(),</div>
+<div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>              diag::err_invalid_reference_qualifier_application) << <span class="stringliteral">"_Atomic"</span>;</div>
+<div class="line"><a name="l04683"></a><span class="lineno"> 4683</span>     }</div>
+<div class="line"><a name="l04684"></a><span class="lineno"> 4684</span> </div>
+<div class="line"><a name="l04685"></a><span class="lineno"> 4685</span>     <span class="comment">// Recursively parse the declarator.</span></div>
+<div class="line"><a name="l04686"></a><span class="lineno"> 4686</span>     ParseDeclaratorInternal(D, DirectDeclParser);</div>
+<div class="line"><a name="l04687"></a><span class="lineno"> 4687</span> </div>
+<div class="line"><a name="l04688"></a><span class="lineno"> 4688</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a93d4ac55876e700883cd3775f47b499e" title="Return the number of types applied to this declarator.">getNumTypeObjects</a>() > 0) {</div>
+<div class="line"><a name="l04689"></a><span class="lineno"> 4689</span>       <span class="comment">// C++ [dcl.ref]p4: There shall be no references to references.</span></div>
+<div class="line"><a name="l04690"></a><span class="lineno"> 4690</span>       <a class="code" href="structclang_1_1DeclaratorChunk.html" title="One instance of this struct is used for each type in a declarator that is parsed.">DeclaratorChunk</a>& InnerChunk = D.<a class="code" href="classclang_1_1Declarator.html#a8eef5fa389c92da7d750fbbb7ce7b9f9">getTypeObject</a>(D.<a class="code" href="classclang_1_1Declarator.html#a93d4ac55876e700883cd3775f47b499e" title="Return the number of types applied to this declarator.">getNumTypeObjects</a>() - 1);</div>
+<div class="line"><a name="l04691"></a><span class="lineno"> 4691</span>       <span class="keywordflow">if</span> (InnerChunk.<a class="code" href="structclang_1_1DeclaratorChunk.html#aec83aec53644bae39b90eb0d71bfa637">Kind</a> == <a class="code" href="structclang_1_1DeclaratorChunk.html#acbcfac544c507b8adc4e86c601a12a87ac7ffa77fa0063707f15008dcec5f6a08">DeclaratorChunk::Reference</a>) {</div>
+<div class="line"><a name="l04692"></a><span class="lineno"> 4692</span>         <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *II = D.<a class="code" href="classclang_1_1Declarator.html#ac1465e02d2f6c8fa2a8aa69d8bdcec51">getIdentifier</a>())</div>
+<div class="line"><a name="l04693"></a><span class="lineno"> 4693</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(InnerChunk.<a class="code" href="structclang_1_1DeclaratorChunk.html#abbb27926cefb5b748250b6f880dad9c7" title="Loc - The place where this type was defined.">Loc</a>, diag::err_illegal_decl_reference_to_reference)</div>
+<div class="line"><a name="l04694"></a><span class="lineno"> 4694</span>            << II;</div>
+<div class="line"><a name="l04695"></a><span class="lineno"> 4695</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04696"></a><span class="lineno"> 4696</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(InnerChunk.<a class="code" href="structclang_1_1DeclaratorChunk.html#abbb27926cefb5b748250b6f880dad9c7" title="Loc - The place where this type was defined.">Loc</a>, diag::err_illegal_decl_reference_to_reference)</div>
+<div class="line"><a name="l04697"></a><span class="lineno"> 4697</span>             << <span class="stringliteral">"type name"</span>;</div>
+<div class="line"><a name="l04698"></a><span class="lineno"> 4698</span> </div>
+<div class="line"><a name="l04699"></a><span class="lineno"> 4699</span>         <span class="comment">// Once we've complained about the reference-to-reference, we</span></div>
+<div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>         <span class="comment">// can go ahead and build the (technically ill-formed)</span></div>
+<div class="line"><a name="l04701"></a><span class="lineno"> 4701</span>         <span class="comment">// declarator: reference collapsing will take care of it.</span></div>
+<div class="line"><a name="l04702"></a><span class="lineno"> 4702</span>       }</div>
+<div class="line"><a name="l04703"></a><span class="lineno"> 4703</span>     }</div>
+<div class="line"><a name="l04704"></a><span class="lineno"> 4704</span> </div>
+<div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>     <span class="comment">// Remember that we parsed a reference type.</span></div>
+<div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>     D.<a class="code" href="classclang_1_1Declarator.html#a6584999672d6ede1bc33ca1f85452b90">AddTypeInfo</a>(<a class="code" href="structclang_1_1DeclaratorChunk.html#af8eb1c574b2ff98b7f469bd24369cf55" title="Return a DeclaratorChunk for a reference.">DeclaratorChunk::getReference</a>(DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>(), Loc,</div>
+<div class="line"><a name="l04707"></a><span class="lineno"> 4707</span>                                                 Kind == tok::amp),</div>
+<div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>                   DS.<a class="code" href="classclang_1_1DeclSpec.html#a6943e56367dc870afb5ce6b7de04b972">getAttributes</a>(),</div>
+<div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>                   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>());</div>
+<div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>   }</div>
+<div class="line"><a name="l04711"></a><span class="lineno"> 4711</span> }</div>
+<div class="line"><a name="l04712"></a><span class="lineno"> 4712</span> </div>
+<div class="line"><a name="l04713"></a><span class="lineno"><a class="code" href="ParseDecl_8cpp.html#ab629216d8ccbcf0313202ee60e96c865"> 4713</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ParseDecl_8cpp.html#ab629216d8ccbcf0313202ee60e96c865">diagnoseMisplacedEllipsis</a>(<a class="code" href="classclang_1_1Parser.html">Parser</a> &<a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>, <a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l04714"></a><span class="lineno"> 4714</span>                                       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EllipsisLoc) {</div>
+<div class="line"><a name="l04715"></a><span class="lineno"> 4715</span>   <span class="keywordflow">if</span> (EllipsisLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) {</div>
+<div class="line"><a name="l04716"></a><span class="lineno"> 4716</span>     <a class="code" href="classclang_1_1FixItHint.html" title="Annotates a diagnostic with some code that should be inserted, removed, or replaced to fix the proble...">FixItHint</a> Insertion;</div>
+<div class="line"><a name="l04717"></a><span class="lineno"> 4717</span>     <span class="keywordflow">if</span> (!D.<a class="code" href="classclang_1_1Declarator.html#a58c600f71c8a79aa675b86da3c5298b1">getEllipsisLoc</a>().<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) {</div>
+<div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>       Insertion = <a class="code" href="classclang_1_1FixItHint.html#afd481d826e9ddaa39fc82a698a810246" title="Create a code modification hint that inserts the given code string at a specific location.">FixItHint::CreateInsertion</a>(D.<a class="code" href="classclang_1_1Declarator.html#a9399027da6026803450f7ffb7957adac">getIdentifierLoc</a>(), <span class="stringliteral">"..."</span>);</div>
+<div class="line"><a name="l04719"></a><span class="lineno"> 4719</span>       D.<a class="code" href="classclang_1_1Declarator.html#afe56933de21b56e6844e0f4b6b1c6347">setEllipsisLoc</a>(EllipsisLoc);</div>
+<div class="line"><a name="l04720"></a><span class="lineno"> 4720</span>     }</div>
+<div class="line"><a name="l04721"></a><span class="lineno"> 4721</span>     P.<a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(EllipsisLoc, diag::err_misplaced_ellipsis_in_declaration)</div>
+<div class="line"><a name="l04722"></a><span class="lineno"> 4722</span>       << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(EllipsisLoc) << Insertion << !D.<a class="code" href="classclang_1_1Declarator.html#a6723ac717345ada576f8d19775b5623b">hasName</a>();</div>
+<div class="line"><a name="l04723"></a><span class="lineno"> 4723</span>   }</div>
+<div class="line"><a name="l04724"></a><span class="lineno"> 4724</span> }</div>
+<div class="line"><a name="l04725"></a><span class="lineno"> 4725</span> <span class="comment"></span></div>
+<div class="line"><a name="l04726"></a><span class="lineno"> 4726</span> <span class="comment">/// ParseDirectDeclarator</span></div>
+<div class="line"><a name="l04727"></a><span class="lineno"> 4727</span> <span class="comment">///       direct-declarator: [C99 6.7.5]</span></div>
+<div class="line"><a name="l04728"></a><span class="lineno"> 4728</span> <span class="comment">/// [C99]   identifier</span></div>
+<div class="line"><a name="l04729"></a><span class="lineno"> 4729</span> <span class="comment">///         '(' declarator ')'</span></div>
+<div class="line"><a name="l04730"></a><span class="lineno"> 4730</span> <span class="comment">/// [GNU]   '(' attributes declarator ')'</span></div>
+<div class="line"><a name="l04731"></a><span class="lineno"> 4731</span> <span class="comment">/// [C90]   direct-declarator '[' constant-expression[opt] ']'</span></div>
+<div class="line"><a name="l04732"></a><span class="lineno"> 4732</span> <span class="comment">/// [C99]   direct-declarator '[' type-qual-list[opt] assignment-expr[opt] ']'</span></div>
+<div class="line"><a name="l04733"></a><span class="lineno"> 4733</span> <span class="comment">/// [C99]   direct-declarator '[' 'static' type-qual-list[opt] assign-expr ']'</span></div>
+<div class="line"><a name="l04734"></a><span class="lineno"> 4734</span> <span class="comment">/// [C99]   direct-declarator '[' type-qual-list 'static' assignment-expr ']'</span></div>
+<div class="line"><a name="l04735"></a><span class="lineno"> 4735</span> <span class="comment">/// [C99]   direct-declarator '[' type-qual-list[opt] '*' ']'</span></div>
+<div class="line"><a name="l04736"></a><span class="lineno"> 4736</span> <span class="comment">/// [C++11] direct-declarator '[' constant-expression[opt] ']'</span></div>
+<div class="line"><a name="l04737"></a><span class="lineno"> 4737</span> <span class="comment">///                    attribute-specifier-seq[opt]</span></div>
+<div class="line"><a name="l04738"></a><span class="lineno"> 4738</span> <span class="comment">///         direct-declarator '(' parameter-type-list ')'</span></div>
+<div class="line"><a name="l04739"></a><span class="lineno"> 4739</span> <span class="comment">///         direct-declarator '(' identifier-list[opt] ')'</span></div>
+<div class="line"><a name="l04740"></a><span class="lineno"> 4740</span> <span class="comment">/// [GNU]   direct-declarator '(' parameter-forward-declarations</span></div>
+<div class="line"><a name="l04741"></a><span class="lineno"> 4741</span> <span class="comment">///                    parameter-type-list[opt] ')'</span></div>
+<div class="line"><a name="l04742"></a><span class="lineno"> 4742</span> <span class="comment">/// [C++]   direct-declarator '(' parameter-declaration-clause ')'</span></div>
+<div class="line"><a name="l04743"></a><span class="lineno"> 4743</span> <span class="comment">///                    cv-qualifier-seq[opt] exception-specification[opt]</span></div>
+<div class="line"><a name="l04744"></a><span class="lineno"> 4744</span> <span class="comment">/// [C++11] direct-declarator '(' parameter-declaration-clause ')'</span></div>
+<div class="line"><a name="l04745"></a><span class="lineno"> 4745</span> <span class="comment">///                    attribute-specifier-seq[opt] cv-qualifier-seq[opt]</span></div>
+<div class="line"><a name="l04746"></a><span class="lineno"> 4746</span> <span class="comment">///                    ref-qualifier[opt] exception-specification[opt]</span></div>
+<div class="line"><a name="l04747"></a><span class="lineno"> 4747</span> <span class="comment">/// [C++]   declarator-id</span></div>
+<div class="line"><a name="l04748"></a><span class="lineno"> 4748</span> <span class="comment">/// [C++11] declarator-id attribute-specifier-seq[opt]</span></div>
+<div class="line"><a name="l04749"></a><span class="lineno"> 4749</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04750"></a><span class="lineno"> 4750</span> <span class="comment">///       declarator-id: [C++ 8]</span></div>
+<div class="line"><a name="l04751"></a><span class="lineno"> 4751</span> <span class="comment">///         '...'[opt] id-expression</span></div>
+<div class="line"><a name="l04752"></a><span class="lineno"> 4752</span> <span class="comment">///         '::'[opt] nested-name-specifier[opt] type-name</span></div>
+<div class="line"><a name="l04753"></a><span class="lineno"> 4753</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04754"></a><span class="lineno"> 4754</span> <span class="comment">///       id-expression: [C++ 5.1]</span></div>
+<div class="line"><a name="l04755"></a><span class="lineno"> 4755</span> <span class="comment">///         unqualified-id</span></div>
+<div class="line"><a name="l04756"></a><span class="lineno"> 4756</span> <span class="comment">///         qualified-id</span></div>
+<div class="line"><a name="l04757"></a><span class="lineno"> 4757</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04758"></a><span class="lineno"> 4758</span> <span class="comment">///       unqualified-id: [C++ 5.1]</span></div>
+<div class="line"><a name="l04759"></a><span class="lineno"> 4759</span> <span class="comment">///         identifier</span></div>
+<div class="line"><a name="l04760"></a><span class="lineno"> 4760</span> <span class="comment">///         operator-function-id</span></div>
+<div class="line"><a name="l04761"></a><span class="lineno"> 4761</span> <span class="comment">///         conversion-function-id</span></div>
+<div class="line"><a name="l04762"></a><span class="lineno"> 4762</span> <span class="comment">///          '~' class-name</span></div>
+<div class="line"><a name="l04763"></a><span class="lineno"> 4763</span> <span class="comment">///         template-id</span></div>
+<div class="line"><a name="l04764"></a><span class="lineno"> 4764</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04765"></a><span class="lineno"> 4765</span> <span class="comment">/// Note, any additional constructs added here may need corresponding changes</span></div>
+<div class="line"><a name="l04766"></a><span class="lineno"> 4766</span> <span class="comment">/// in isConstructorDeclarator.</span></div>
+<div class="line"><a name="l04767"></a><span class="lineno"> 4767</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseDirectDeclarator(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D) {</div>
+<div class="line"><a name="l04768"></a><span class="lineno"> 4768</span>   DeclaratorScopeObj DeclScopeObj(*<span class="keyword">this</span>, D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>());</div>
+<div class="line"><a name="l04769"></a><span class="lineno"> 4769</span> </div>
+<div class="line"><a name="l04770"></a><span class="lineno"> 4770</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus && D.<a class="code" href="classclang_1_1Declarator.html#aa9abfecde9d82d440096066028f774f4">mayHaveIdentifier</a>()) {</div>
+<div class="line"><a name="l04771"></a><span class="lineno"> 4771</span>     <span class="comment">// ParseDeclaratorInternal might already have parsed the scope.</span></div>
+<div class="line"><a name="l04772"></a><span class="lineno"> 4772</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae92a40568ee6a10431af2437af862b07" title="No scope specifier.">isEmpty</a>()) {</div>
+<div class="line"><a name="l04773"></a><span class="lineno"> 4773</span>       <span class="keywordtype">bool</span> EnteringContext = D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a> ||</div>
+<div class="line"><a name="l04774"></a><span class="lineno"> 4774</span>                              D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a>;</div>
+<div class="line"><a name="l04775"></a><span class="lineno"> 4775</span>       ParseOptionalCXXScopeSpecifier(D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>(), <a class="code" href="namespaceclang.html#aeb304ed08ffec14495690938d6bd95e2">ParsedType</a>(),</div>
+<div class="line"><a name="l04776"></a><span class="lineno"> 4776</span>                                      EnteringContext);</div>
+<div class="line"><a name="l04777"></a><span class="lineno"> 4777</span>     }</div>
+<div class="line"><a name="l04778"></a><span class="lineno"> 4778</span> </div>
+<div class="line"><a name="l04779"></a><span class="lineno"> 4779</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#a1b5492c64a19704d8f8b3373a0be09c7" title="A scope specifier is present, and it refers to a real scope.">isValid</a>()) {</div>
+<div class="line"><a name="l04780"></a><span class="lineno"> 4780</span>       <span class="keywordflow">if</span> (Actions.<a class="code" href="classclang_1_1Sema.html#a70e5b4ceeddc42515f4488ca91a905bb">ShouldEnterDeclaratorScope</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>()))</div>
+<div class="line"><a name="l04781"></a><span class="lineno"> 4781</span>         <span class="comment">// Change the declaration context for name lookup, until this function</span></div>
+<div class="line"><a name="l04782"></a><span class="lineno"> 4782</span>         <span class="comment">// is exited (and the declarator has been parsed).</span></div>
+<div class="line"><a name="l04783"></a><span class="lineno"> 4783</span>         DeclScopeObj.EnterDeclaratorScope();</div>
+<div class="line"><a name="l04784"></a><span class="lineno"> 4784</span>     }</div>
+<div class="line"><a name="l04785"></a><span class="lineno"> 4785</span> </div>
+<div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>     <span class="comment">// C++0x [dcl.fct]p14:</span></div>
+<div class="line"><a name="l04787"></a><span class="lineno"> 4787</span>     <span class="comment">//   There is a syntactic ambiguity when an ellipsis occurs at the end</span></div>
+<div class="line"><a name="l04788"></a><span class="lineno"> 4788</span>     <span class="comment">//   of a parameter-declaration-clause without a preceding comma. In</span></div>
+<div class="line"><a name="l04789"></a><span class="lineno"> 4789</span>     <span class="comment">//   this case, the ellipsis is parsed as part of the</span></div>
+<div class="line"><a name="l04790"></a><span class="lineno"> 4790</span>     <span class="comment">//   abstract-declarator if the type of the parameter names a template</span></div>
+<div class="line"><a name="l04791"></a><span class="lineno"> 4791</span>     <span class="comment">//   parameter pack that has not been expanded; otherwise, it is parsed</span></div>
+<div class="line"><a name="l04792"></a><span class="lineno"> 4792</span>     <span class="comment">//   as part of the parameter-declaration-clause.</span></div>
+<div class="line"><a name="l04793"></a><span class="lineno"> 4793</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ellipsis) && D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae92a40568ee6a10431af2437af862b07" title="No scope specifier.">isEmpty</a>() &&</div>
+<div class="line"><a name="l04794"></a><span class="lineno"> 4794</span>         !((D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156ab6615dbe95fb0d7b843377867d885c5e">Declarator::PrototypeContext</a> ||</div>
+<div class="line"><a name="l04795"></a><span class="lineno"> 4795</span>            D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a68431e3a649e3a4351ac0bda59514319">Declarator::LambdaExprParameterContext</a> ||</div>
+<div class="line"><a name="l04796"></a><span class="lineno"> 4796</span>            D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af9709e24ae1e26152f5c02325f364bfd">Declarator::BlockLiteralContext</a>) &&</div>
+<div class="line"><a name="l04797"></a><span class="lineno"> 4797</span>           <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren) &&</div>
+<div class="line"><a name="l04798"></a><span class="lineno"> 4798</span>           !D.<a class="code" href="classclang_1_1Declarator.html#a51aa50e2666ddb3df3925e250b616e56">hasGroupingParens</a>() &&</div>
+<div class="line"><a name="l04799"></a><span class="lineno"> 4799</span>           !Actions.<a class="code" href="classclang_1_1Sema.html#a07be1ac3a9a36b8c84cccd0b20db6726" title="Determine whether the given declarator contains any unexpanded parameter packs.">containsUnexpandedParameterPacks</a>(D))) {</div>
+<div class="line"><a name="l04800"></a><span class="lineno"> 4800</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EllipsisLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04801"></a><span class="lineno"> 4801</span>       <span class="keywordflow">if</span> (<a class="code" href="ParseDecl_8cpp.html#ae74c4ce00f2a91f568ad3505346222f7">isPtrOperatorToken</a>(Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>(), <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>())) {</div>
+<div class="line"><a name="l04802"></a><span class="lineno"> 4802</span>         <span class="comment">// The ellipsis was put in the wrong place. Recover, and explain to</span></div>
+<div class="line"><a name="l04803"></a><span class="lineno"> 4803</span>         <span class="comment">// the user what they should have done.</span></div>
+<div class="line"><a name="l04804"></a><span class="lineno"> 4804</span>         ParseDeclarator(D);</div>
+<div class="line"><a name="l04805"></a><span class="lineno"> 4805</span>         <a class="code" href="ParseDecl_8cpp.html#ab629216d8ccbcf0313202ee60e96c865">diagnoseMisplacedEllipsis</a>(*<span class="keyword">this</span>, D, EllipsisLoc);</div>
+<div class="line"><a name="l04806"></a><span class="lineno"> 4806</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04807"></a><span class="lineno"> 4807</span>       } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04808"></a><span class="lineno"> 4808</span>         D.<a class="code" href="classclang_1_1Declarator.html#afe56933de21b56e6844e0f4b6b1c6347">setEllipsisLoc</a>(EllipsisLoc);</div>
+<div class="line"><a name="l04809"></a><span class="lineno"> 4809</span> </div>
+<div class="line"><a name="l04810"></a><span class="lineno"> 4810</span>       <span class="comment">// The ellipsis can't be followed by a parenthesized declarator. We</span></div>
+<div class="line"><a name="l04811"></a><span class="lineno"> 4811</span>       <span class="comment">// check for that in ParseParenDeclarator, after we have disambiguated</span></div>
+<div class="line"><a name="l04812"></a><span class="lineno"> 4812</span>       <span class="comment">// the l_paren token.</span></div>
+<div class="line"><a name="l04813"></a><span class="lineno"> 4813</span>     }</div>
+<div class="line"><a name="l04814"></a><span class="lineno"> 4814</span> </div>
+<div class="line"><a name="l04815"></a><span class="lineno"> 4815</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw_operator) ||</div>
+<div class="line"><a name="l04816"></a><span class="lineno"> 4816</span>         Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_template_id) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::tilde)) {</div>
+<div class="line"><a name="l04817"></a><span class="lineno"> 4817</span>       <span class="comment">// We found something that indicates the start of an unqualified-id.</span></div>
+<div class="line"><a name="l04818"></a><span class="lineno"> 4818</span>       <span class="comment">// Parse that unqualified-id.</span></div>
+<div class="line"><a name="l04819"></a><span class="lineno"> 4819</span>       <span class="keywordtype">bool</span> AllowConstructorName;</div>
+<div class="line"><a name="l04820"></a><span class="lineno"> 4820</span>       <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#a469d228c02d73f5dc32456d6990ca778" title="Return true if any type-specifier has been found.">hasTypeSpecifier</a>())</div>
+<div class="line"><a name="l04821"></a><span class="lineno"> 4821</span>         AllowConstructorName = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04822"></a><span class="lineno"> 4822</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>())</div>
+<div class="line"><a name="l04823"></a><span class="lineno"> 4823</span>         AllowConstructorName =</div>
+<div class="line"><a name="l04824"></a><span class="lineno"> 4824</span>           (D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a> ||</div>
+<div class="line"><a name="l04825"></a><span class="lineno"> 4825</span>            D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a>);</div>
+<div class="line"><a name="l04826"></a><span class="lineno"> 4826</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04827"></a><span class="lineno"> 4827</span>         AllowConstructorName = (D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a>);</div>
+<div class="line"><a name="l04828"></a><span class="lineno"> 4828</span> </div>
+<div class="line"><a name="l04829"></a><span class="lineno"> 4829</span>       <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> TemplateKWLoc;</div>
+<div class="line"><a name="l04830"></a><span class="lineno"> 4830</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a1825dac9fa2dbbc90288b97f2c14eba6" title="Parse a C++ unqualified-id (or a C identifier), which describes the name of an entity.">ParseUnqualifiedId</a>(D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>(),</div>
+<div class="line"><a name="l04831"></a><span class="lineno"> 4831</span>                              <span class="comment">/*EnteringContext=*/</span><span class="keyword">true</span>,</div>
+<div class="line"><a name="l04832"></a><span class="lineno"> 4832</span>                              <span class="comment">/*AllowDestructorName=*/</span><span class="keyword">true</span>,</div>
+<div class="line"><a name="l04833"></a><span class="lineno"> 4833</span>                              AllowConstructorName,</div>
+<div class="line"><a name="l04834"></a><span class="lineno"> 4834</span>                              <a class="code" href="namespaceclang.html#aeb304ed08ffec14495690938d6bd95e2">ParsedType</a>(),</div>
+<div class="line"><a name="l04835"></a><span class="lineno"> 4835</span>                              TemplateKWLoc,</div>
+<div class="line"><a name="l04836"></a><span class="lineno"> 4836</span>                              D.<a class="code" href="classclang_1_1Declarator.html#abf6902e9c1758f5db00d427c768edba3" title="Retrieve the name specified by this declarator.">getName</a>()) ||</div>
+<div class="line"><a name="l04837"></a><span class="lineno"> 4837</span>           <span class="comment">// Once we're past the identifier, if the scope was bad, mark the</span></div>
+<div class="line"><a name="l04838"></a><span class="lineno"> 4838</span>           <span class="comment">// whole declarator bad.</span></div>
+<div class="line"><a name="l04839"></a><span class="lineno"> 4839</span>           D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#a4470b2b22ffe903c05b83ba25d774652" title="An error occurred during parsing of the scope specifier.">isInvalid</a>()) {</div>
+<div class="line"><a name="l04840"></a><span class="lineno"> 4840</span>         D.<a class="code" href="classclang_1_1Declarator.html#a0a60bf51acdddfd2077e6725af7ad2f2" title="Set the name of this declarator to be the given identifier.">SetIdentifier</a>(0, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l04841"></a><span class="lineno"> 4841</span>         D.<a class="code" href="classclang_1_1Declarator.html#a5c81152c5ac5b3c8aa340c413ed634a8">setInvalidType</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l04842"></a><span class="lineno"> 4842</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04843"></a><span class="lineno"> 4843</span>         <span class="comment">// Parsed the unqualified-id; update range information and move along.</span></div>
+<div class="line"><a name="l04844"></a><span class="lineno"> 4844</span>         <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#ac26653ad54d1663d8f1c263f726aabc3" title="Get the source range that spans this declarator.">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a890dff14560eb9aceb08be18dfe74208">getBegin</a>().<a class="code" href="classclang_1_1SourceLocation.html#a1936fc09837ff8a195fa63e29f05796f">isInvalid</a>())</div>
+<div class="line"><a name="l04845"></a><span class="lineno"> 4845</span>           D.<a class="code" href="classclang_1_1Declarator.html#a13efa9396ee1040fcd8704321db8243f">SetRangeBegin</a>(D.<a class="code" href="classclang_1_1Declarator.html#abf6902e9c1758f5db00d427c768edba3" title="Retrieve the name specified by this declarator.">getName</a>().<a class="code" href="classclang_1_1UnqualifiedId.html#a79268390f0aa348edea4ee6041aa256d" title="Return the source range that covers this unqualified-id.">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a890dff14560eb9aceb08be18dfe74208">getBegin</a>());</div>
+<div class="line"><a name="l04846"></a><span class="lineno"> 4846</span>         D.<a class="code" href="classclang_1_1Declarator.html#ad1251a155b6375921dd4e6cc682eb53a" title="SetRangeEnd - Set the end of the source range to Loc, unless it's invalid.">SetRangeEnd</a>(D.<a class="code" href="classclang_1_1Declarator.html#abf6902e9c1758f5db00d427c768edba3" title="Retrieve the name specified by this declarator.">getName</a>().<a class="code" href="classclang_1_1UnqualifiedId.html#a79268390f0aa348edea4ee6041aa256d" title="Return the source range that covers this unqualified-id.">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>());</div>
+<div class="line"><a name="l04847"></a><span class="lineno"> 4847</span>       }</div>
+<div class="line"><a name="l04848"></a><span class="lineno"> 4848</span>       <span class="keywordflow">goto</span> PastIdentifier;</div>
+<div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>     }</div>
+<div class="line"><a name="l04850"></a><span class="lineno"> 4850</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) && D.<a class="code" href="classclang_1_1Declarator.html#aa9abfecde9d82d440096066028f774f4">mayHaveIdentifier</a>()) {</div>
+<div class="line"><a name="l04851"></a><span class="lineno"> 4851</span>     assert(!<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> &&</div>
+<div class="line"><a name="l04852"></a><span class="lineno"> 4852</span>            <span class="stringliteral">"There's a C++-specific check for tok::identifier above"</span>);</div>
+<div class="line"><a name="l04853"></a><span class="lineno"> 4853</span>     assert(Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>() && <span class="stringliteral">"Not an identifier?"</span>);</div>
+<div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>     D.<a class="code" href="classclang_1_1Declarator.html#a0a60bf51acdddfd2077e6725af7ad2f2" title="Set the name of this declarator to be the given identifier.">SetIdentifier</a>(Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>(), Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04856"></a><span class="lineno"> 4856</span>     <span class="keywordflow">goto</span> PastIdentifier;</div>
+<div class="line"><a name="l04857"></a><span class="lineno"> 4857</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier) && D.<a class="code" href="classclang_1_1Declarator.html#a6e226da07b6d744634a5c230ecca076b">diagnoseIdentifier</a>()) {</div>
+<div class="line"><a name="l04858"></a><span class="lineno"> 4858</span>     <span class="comment">// A virt-specifier isn't treated as an identifier if it appears after a</span></div>
+<div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>     <span class="comment">// trailing-return-type.</span></div>
+<div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() != <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a59979e5a4b957844d544c3b617178f42">Declarator::TrailingReturnContext</a> ||</div>
+<div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>         !isCXX11VirtSpecifier(Tok)) {</div>
+<div class="line"><a name="l04862"></a><span class="lineno"> 4862</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), diag::err_unexpected_unqualified_id)</div>
+<div class="line"><a name="l04863"></a><span class="lineno"> 4863</span>         << <a class="code" href="classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe" title="Create a code modification hint that removes the given source range.">FixItHint::CreateRemoval</a>(Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l04864"></a><span class="lineno"> 4864</span>       D.<a class="code" href="classclang_1_1Declarator.html#a0a60bf51acdddfd2077e6725af7ad2f2" title="Set the name of this declarator to be the given identifier.">SetIdentifier</a>(0, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l04865"></a><span class="lineno"> 4865</span>       <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l04866"></a><span class="lineno"> 4866</span>       <span class="keywordflow">goto</span> PastIdentifier;</div>
+<div class="line"><a name="l04867"></a><span class="lineno"> 4867</span>     }</div>
+<div class="line"><a name="l04868"></a><span class="lineno"> 4868</span>   }</div>
+<div class="line"><a name="l04869"></a><span class="lineno"> 4869</span> </div>
+<div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren)) {</div>
+<div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>     <span class="comment">// direct-declarator: '(' declarator ')'</span></div>
+<div class="line"><a name="l04872"></a><span class="lineno"> 4872</span>     <span class="comment">// direct-declarator: '(' attributes declarator ')'</span></div>
+<div class="line"><a name="l04873"></a><span class="lineno"> 4873</span>     <span class="comment">// Example: 'char (*X)'   or 'int (*XX)(void)'</span></div>
+<div class="line"><a name="l04874"></a><span class="lineno"> 4874</span>     ParseParenDeclarator(D);</div>
+<div class="line"><a name="l04875"></a><span class="lineno"> 4875</span> </div>
+<div class="line"><a name="l04876"></a><span class="lineno"> 4876</span>     <span class="comment">// If the declarator was parenthesized, we entered the declarator</span></div>
+<div class="line"><a name="l04877"></a><span class="lineno"> 4877</span>     <span class="comment">// scope when parsing the parenthesized declarator, then exited</span></div>
+<div class="line"><a name="l04878"></a><span class="lineno"> 4878</span>     <span class="comment">// the scope already. Re-enter the scope, if we need to.</span></div>
+<div class="line"><a name="l04879"></a><span class="lineno"> 4879</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#ae27d587ba7dae0cfdcdfa2f7f5472c3c">isSet</a>()) {</div>
+<div class="line"><a name="l04880"></a><span class="lineno"> 4880</span>       <span class="comment">// If there was an error parsing parenthesized declarator, declarator</span></div>
+<div class="line"><a name="l04881"></a><span class="lineno"> 4881</span>       <span class="comment">// scope may have been entered before. Don't do it again.</span></div>
+<div class="line"><a name="l04882"></a><span class="lineno"> 4882</span>       <span class="keywordflow">if</span> (!D.<a class="code" href="classclang_1_1Declarator.html#acf30c6365eec56c5d3d4ec7266d9a6c9">isInvalidType</a>() &&</div>
+<div class="line"><a name="l04883"></a><span class="lineno"> 4883</span>           Actions.<a class="code" href="classclang_1_1Sema.html#a70e5b4ceeddc42515f4488ca91a905bb">ShouldEnterDeclaratorScope</a>(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>(), D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>()))</div>
+<div class="line"><a name="l04884"></a><span class="lineno"> 4884</span>         <span class="comment">// Change the declaration context for name lookup, until this function</span></div>
+<div class="line"><a name="l04885"></a><span class="lineno"> 4885</span>         <span class="comment">// is exited (and the declarator has been parsed).</span></div>
+<div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>         DeclScopeObj.EnterDeclaratorScope();</div>
+<div class="line"><a name="l04887"></a><span class="lineno"> 4887</span>     }</div>
+<div class="line"><a name="l04888"></a><span class="lineno"> 4888</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a065bae4b5e3f42a3c06da7965077f47c">mayOmitIdentifier</a>()) {</div>
+<div class="line"><a name="l04889"></a><span class="lineno"> 4889</span>     <span class="comment">// This could be something simple like "int" (in which case the declarator</span></div>
+<div class="line"><a name="l04890"></a><span class="lineno"> 4890</span>     <span class="comment">// portion is empty), if an abstract-declarator is allowed.</span></div>
+<div class="line"><a name="l04891"></a><span class="lineno"> 4891</span>     D.<a class="code" href="classclang_1_1Declarator.html#a0a60bf51acdddfd2077e6725af7ad2f2" title="Set the name of this declarator to be the given identifier.">SetIdentifier</a>(0, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l04892"></a><span class="lineno"> 4892</span> </div>
+<div class="line"><a name="l04893"></a><span class="lineno"> 4893</span>     <span class="comment">// The grammar for abstract-pack-declarator does not allow grouping parens.</span></div>
+<div class="line"><a name="l04894"></a><span class="lineno"> 4894</span>     <span class="comment">// FIXME: Revisit this once core issue 1488 is resolved.</span></div>
+<div class="line"><a name="l04895"></a><span class="lineno"> 4895</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a51c82ca88a697a3cdc5e92e287a3c58d">hasEllipsis</a>() && D.<a class="code" href="classclang_1_1Declarator.html#a51aa50e2666ddb3df3925e250b616e56">hasGroupingParens</a>())</div>
+<div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(PP.<a class="code" href="classclang_1_1Preprocessor.html#aef7193e9d262ea6852d666beb28dc1a0" title="Computes the source location just past the end of the token at this source location.">getLocForEndOfToken</a>(D.<a class="code" href="classclang_1_1Declarator.html#a58c600f71c8a79aa675b86da3c5298b1">getEllipsisLoc</a>()),</div>
+<div class="line"><a name="l04897"></a><span class="lineno"> 4897</span>            diag::ext_abstract_pack_declarator_parens);</div>
+<div class="line"><a name="l04898"></a><span class="lineno"> 4898</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04899"></a><span class="lineno"> 4899</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a84a069f6887b650763e640eeabfeebe4">getKind</a>() == tok::annot_pragma_parser_crash)</div>
+<div class="line"><a name="l04900"></a><span class="lineno"> 4900</span>       LLVM_BUILTIN_TRAP;</div>
+<div class="line"><a name="l04901"></a><span class="lineno"> 4901</span>     <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a>)</div>
+<div class="line"><a name="l04902"></a><span class="lineno"> 4902</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_member_name_or_semi)</div>
+<div class="line"><a name="l04903"></a><span class="lineno"> 4903</span>         << D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#a7b8a30b08c1fa1aac47e417167a8631f">getSourceRange</a>();</div>
+<div class="line"><a name="l04904"></a><span class="lineno"> 4904</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>) {</div>
+<div class="line"><a name="l04905"></a><span class="lineno"> 4905</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::period) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::arrow))</div>
+<div class="line"><a name="l04906"></a><span class="lineno"> 4906</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_invalid_operator_on_type) << Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::arrow);</div>
+<div class="line"><a name="l04907"></a><span class="lineno"> 4907</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>         <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> Loc = D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#a8d97dfd4ab5e7e1ba5a966f645338f9f">getEndLoc</a>();</div>
+<div class="line"><a name="l04909"></a><span class="lineno"> 4909</span>         <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#a895009ede74790b61cf636fd7e498d44">isAtStartOfLine</a>() && Loc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>())</div>
+<div class="line"><a name="l04910"></a><span class="lineno"> 4910</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(PP.<a class="code" href="classclang_1_1Preprocessor.html#aef7193e9d262ea6852d666beb28dc1a0" title="Computes the source location just past the end of the token at this source location.">getLocForEndOfToken</a>(Loc), diag::err_expected_unqualified_id)</div>
+<div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>               << <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus;</div>
+<div class="line"><a name="l04912"></a><span class="lineno"> 4912</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>           <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_unqualified_id)</div>
+<div class="line"><a name="l04914"></a><span class="lineno"> 4914</span>               << <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus;</div>
+<div class="line"><a name="l04915"></a><span class="lineno"> 4915</span>       }</div>
+<div class="line"><a name="l04916"></a><span class="lineno"> 4916</span>     } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04917"></a><span class="lineno"> 4917</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident_lparen);</div>
+<div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>     D.<a class="code" href="classclang_1_1Declarator.html#a0a60bf51acdddfd2077e6725af7ad2f2" title="Set the name of this declarator to be the given identifier.">SetIdentifier</a>(0, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l04919"></a><span class="lineno"> 4919</span>     D.<a class="code" href="classclang_1_1Declarator.html#a5c81152c5ac5b3c8aa340c413ed634a8">setInvalidType</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l04920"></a><span class="lineno"> 4920</span>   }</div>
+<div class="line"><a name="l04921"></a><span class="lineno"> 4921</span> </div>
+<div class="line"><a name="l04922"></a><span class="lineno"> 4922</span>  PastIdentifier:</div>
+<div class="line"><a name="l04923"></a><span class="lineno"> 4923</span>   assert(D.<a class="code" href="classclang_1_1Declarator.html#a91b289a9fb2d7456aeebfaa1fe11c07e">isPastIdentifier</a>() &&</div>
+<div class="line"><a name="l04924"></a><span class="lineno"> 4924</span>          <span class="stringliteral">"Haven't past the location of the identifier yet?"</span>);</div>
+<div class="line"><a name="l04925"></a><span class="lineno"> 4925</span> </div>
+<div class="line"><a name="l04926"></a><span class="lineno"> 4926</span>   <span class="comment">// Don't parse attributes unless we have parsed an unparenthesized name.</span></div>
+<div class="line"><a name="l04927"></a><span class="lineno"> 4927</span>   <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a6723ac717345ada576f8d19775b5623b">hasName</a>() && !D.<a class="code" href="classclang_1_1Declarator.html#a93d4ac55876e700883cd3775f47b499e" title="Return the number of types applied to this declarator.">getNumTypeObjects</a>())</div>
+<div class="line"><a name="l04928"></a><span class="lineno"> 4928</span>     MaybeParseCXX11Attributes(D);</div>
+<div class="line"><a name="l04929"></a><span class="lineno"> 4929</span> </div>
+<div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>   <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l04931"></a><span class="lineno"> 4931</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_paren)) {</div>
+<div class="line"><a name="l04932"></a><span class="lineno"> 4932</span>       <span class="comment">// Enter function-declaration scope, limiting any declarators to the</span></div>
+<div class="line"><a name="l04933"></a><span class="lineno"> 4933</span>       <span class="comment">// function prototype scope, including parameter declarators.</span></div>
+<div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>       ParseScope PrototypeScope(<span class="keyword">this</span>,</div>
+<div class="line"><a name="l04935"></a><span class="lineno"> 4935</span>                                 <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a03e444466b6d5f544bd8fedbe94a7cdb" title="This is a scope that corresponds to the parameters within a function prototype.">Scope::FunctionPrototypeScope</a>|<a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7af9dd922f0e23495a79fc93698d6775ff" title="This is a scope that can contain a declaration. Some scopes just contain loop constructs but don't co...">Scope::DeclScope</a>|</div>
+<div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>                                 (D.<a class="code" href="classclang_1_1Declarator.html#a1e656a51e602628292dd2193d1765318" title="Return true if a function declarator at this position would be a function declaration.">isFunctionDeclaratorAFunctionDeclaration</a>()</div>
+<div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>                                    ? <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7ad0c60d6cb6734034fb8ee9d694e2d854" title="This is a scope that corresponds to the parameters within a function prototype for a function declara...">Scope::FunctionDeclarationScope</a> : 0));</div>
+<div class="line"><a name="l04938"></a><span class="lineno"> 4938</span> </div>
+<div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>       <span class="comment">// The paren may be part of a C++ direct initializer, eg. "int x(1);".</span></div>
+<div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>       <span class="comment">// In such a case, check if we actually have a function declarator; if it</span></div>
+<div class="line"><a name="l04941"></a><span class="lineno"> 4941</span>       <span class="comment">// is not, the declarator has been fully parsed.</span></div>
+<div class="line"><a name="l04942"></a><span class="lineno"> 4942</span>       <span class="keywordtype">bool</span> IsAmbiguous = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04943"></a><span class="lineno"> 4943</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && D.<a class="code" href="classclang_1_1Declarator.html#a45e72cd4e79e4c1e05a9976ead204256">mayBeFollowedByCXXDirectInit</a>()) {</div>
+<div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>         <span class="comment">// The name of the declarator, if any, is tentatively declared within</span></div>
+<div class="line"><a name="l04945"></a><span class="lineno"> 4945</span>         <span class="comment">// a possible direct initializer.</span></div>
+<div class="line"><a name="l04946"></a><span class="lineno"> 4946</span>         TentativelyDeclaredIdentifiers.push_back(D.<a class="code" href="classclang_1_1Declarator.html#ac1465e02d2f6c8fa2a8aa69d8bdcec51">getIdentifier</a>());</div>
+<div class="line"><a name="l04947"></a><span class="lineno"> 4947</span>         <span class="keywordtype">bool</span> IsFunctionDecl = isCXXFunctionDeclarator(&IsAmbiguous);</div>
+<div class="line"><a name="l04948"></a><span class="lineno"> 4948</span>         TentativelyDeclaredIdentifiers.pop_back();</div>
+<div class="line"><a name="l04949"></a><span class="lineno"> 4949</span>         <span class="keywordflow">if</span> (!IsFunctionDecl)</div>
+<div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04951"></a><span class="lineno"> 4951</span>       }</div>
+<div class="line"><a name="l04952"></a><span class="lineno"> 4952</span>       <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> attrs(AttrFactory);</div>
+<div class="line"><a name="l04953"></a><span class="lineno"> 4953</span>       <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>       T.consumeOpen();</div>
+<div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>       ParseFunctionDeclarator(D, attrs, T, IsAmbiguous);</div>
+<div class="line"><a name="l04956"></a><span class="lineno"> 4956</span>       PrototypeScope.Exit();</div>
+<div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::l_square)) {</div>
+<div class="line"><a name="l04958"></a><span class="lineno"> 4958</span>       ParseBracketDeclarator(D);</div>
+<div class="line"><a name="l04959"></a><span class="lineno"> 4959</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04960"></a><span class="lineno"> 4960</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04961"></a><span class="lineno"> 4961</span>     }</div>
+<div class="line"><a name="l04962"></a><span class="lineno"> 4962</span>   }</div>
+<div class="line"><a name="l04963"></a><span class="lineno"> 4963</span> }</div>
+<div class="line"><a name="l04964"></a><span class="lineno"> 4964</span> <span class="comment"></span></div>
+<div class="line"><a name="l04965"></a><span class="lineno"> 4965</span> <span class="comment">/// ParseParenDeclarator - We parsed the declarator D up to a paren.  This is</span></div>
+<div class="line"><a name="l04966"></a><span class="lineno"> 4966</span> <span class="comment">/// only called before the identifier, so these are most likely just grouping</span></div>
+<div class="line"><a name="l04967"></a><span class="lineno"> 4967</span> <span class="comment">/// parens for precedence.  If we find that these are actually function</span></div>
+<div class="line"><a name="l04968"></a><span class="lineno"> 4968</span> <span class="comment">/// parameter parens in an abstract-declarator, we call ParseFunctionDeclarator.</span></div>
+<div class="line"><a name="l04969"></a><span class="lineno"> 4969</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04970"></a><span class="lineno"> 4970</span> <span class="comment">///       direct-declarator:</span></div>
+<div class="line"><a name="l04971"></a><span class="lineno"> 4971</span> <span class="comment">///         '(' declarator ')'</span></div>
+<div class="line"><a name="l04972"></a><span class="lineno"> 4972</span> <span class="comment">/// [GNU]   '(' attributes declarator ')'</span></div>
+<div class="line"><a name="l04973"></a><span class="lineno"> 4973</span> <span class="comment">///         direct-declarator '(' parameter-type-list ')'</span></div>
+<div class="line"><a name="l04974"></a><span class="lineno"> 4974</span> <span class="comment">///         direct-declarator '(' identifier-list[opt] ')'</span></div>
+<div class="line"><a name="l04975"></a><span class="lineno"> 4975</span> <span class="comment">/// [GNU]   direct-declarator '(' parameter-forward-declarations</span></div>
+<div class="line"><a name="l04976"></a><span class="lineno"> 4976</span> <span class="comment">///                    parameter-type-list[opt] ')'</span></div>
+<div class="line"><a name="l04977"></a><span class="lineno"> 4977</span> <span class="comment">///</span></div>
+<div class="line"><a name="l04978"></a><span class="lineno"> 4978</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseParenDeclarator(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D) {</div>
+<div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>   <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> T(*<span class="keyword">this</span>, tok::l_paren);</div>
+<div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>   T.consumeOpen();</div>
+<div class="line"><a name="l04981"></a><span class="lineno"> 4981</span> </div>
+<div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>   assert(!D.<a class="code" href="classclang_1_1Declarator.html#a91b289a9fb2d7456aeebfaa1fe11c07e">isPastIdentifier</a>() && <span class="stringliteral">"Should be called before passing identifier"</span>);</div>
+<div class="line"><a name="l04983"></a><span class="lineno"> 4983</span> </div>
+<div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>   <span class="comment">// Eat any attributes before we look at whether this is a grouping or function</span></div>
+<div class="line"><a name="l04985"></a><span class="lineno"> 4985</span>   <span class="comment">// declarator paren.  If this is a grouping paren, the attribute applies to</span></div>
+<div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>   <span class="comment">// the type being built up, for example:</span></div>
+<div class="line"><a name="l04987"></a><span class="lineno"> 4987</span>   <span class="comment">//     int (__attribute__(()) *x)(long y)</span></div>
+<div class="line"><a name="l04988"></a><span class="lineno"> 4988</span>   <span class="comment">// If this ends up not being a grouping paren, the attribute applies to the</span></div>
+<div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>   <span class="comment">// first argument, for example:</span></div>
+<div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>   <span class="comment">//     int (__attribute__(()) int x)</span></div>
+<div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>   <span class="comment">// In either case, we need to eat any attributes to be able to determine what</span></div>
+<div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>   <span class="comment">// sort of paren this is.</span></div>
+<div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>   <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> attrs(AttrFactory);</div>
+<div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>   <span class="keywordtype">bool</span> RequiresArg = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l04996"></a><span class="lineno"> 4996</span>   <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___attribute)) {</div>
+<div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>     ParseGNUAttributes(attrs);</div>
+<div class="line"><a name="l04998"></a><span class="lineno"> 4998</span> </div>
+<div class="line"><a name="l04999"></a><span class="lineno"> 4999</span>     <span class="comment">// We require that the argument list (if this is a non-grouping paren) be</span></div>
+<div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>     <span class="comment">// present even if the attribute list was empty.</span></div>
+<div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>     RequiresArg = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>   }</div>
+<div class="line"><a name="l05003"></a><span class="lineno"> 5003</span> </div>
+<div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>   <span class="comment">// Eat any Microsoft extensions.</span></div>
+<div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>   ParseMicrosoftTypeAttributes(attrs);</div>
+<div class="line"><a name="l05006"></a><span class="lineno"> 5006</span> </div>
+<div class="line"><a name="l05007"></a><span class="lineno"> 5007</span>   <span class="comment">// Eat any Borland extensions.</span></div>
+<div class="line"><a name="l05008"></a><span class="lineno"> 5008</span>   <span class="keywordflow">if</span>  (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::kw___pascal))</div>
+<div class="line"><a name="l05009"></a><span class="lineno"> 5009</span>     ParseBorlandTypeAttributes(attrs);</div>
+<div class="line"><a name="l05010"></a><span class="lineno"> 5010</span> </div>
+<div class="line"><a name="l05011"></a><span class="lineno"> 5011</span>   <span class="comment">// If we haven't past the identifier yet (or where the identifier would be</span></div>
+<div class="line"><a name="l05012"></a><span class="lineno"> 5012</span>   <span class="comment">// stored, if this is an abstract declarator), then this is probably just</span></div>
+<div class="line"><a name="l05013"></a><span class="lineno"> 5013</span>   <span class="comment">// grouping parens. However, if this could be an abstract-declarator, then</span></div>
+<div class="line"><a name="l05014"></a><span class="lineno"> 5014</span>   <span class="comment">// this could also be the start of function arguments (consider 'void()').</span></div>
+<div class="line"><a name="l05015"></a><span class="lineno"> 5015</span>   <span class="keywordtype">bool</span> isGrouping;</div>
+<div class="line"><a name="l05016"></a><span class="lineno"> 5016</span> </div>
+<div class="line"><a name="l05017"></a><span class="lineno"> 5017</span>   <span class="keywordflow">if</span> (!D.<a class="code" href="classclang_1_1Declarator.html#a065bae4b5e3f42a3c06da7965077f47c">mayOmitIdentifier</a>()) {</div>
+<div class="line"><a name="l05018"></a><span class="lineno"> 5018</span>     <span class="comment">// If this can't be an abstract-declarator, this *must* be a grouping</span></div>
+<div class="line"><a name="l05019"></a><span class="lineno"> 5019</span>     <span class="comment">// paren, because we haven't seen the identifier yet.</span></div>
+<div class="line"><a name="l05020"></a><span class="lineno"> 5020</span>     isGrouping = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l05021"></a><span class="lineno"> 5021</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren) ||           <span class="comment">// 'int()' is a function.</span></div>
+<div class="line"><a name="l05022"></a><span class="lineno"> 5022</span>              (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ellipsis) &&</div>
+<div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>               <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren)) || <span class="comment">// C++ int(...)</span></div>
+<div class="line"><a name="l05024"></a><span class="lineno"> 5024</span>              isDeclarationSpecifier() ||       <span class="comment">// 'int(int)' is a function.</span></div>
+<div class="line"><a name="l05025"></a><span class="lineno"> 5025</span>              isCXX11AttributeSpecifier()) {    <span class="comment">// 'int([[]]int)' is a function.</span></div>
+<div class="line"><a name="l05026"></a><span class="lineno"> 5026</span>     <span class="comment">// This handles C99 6.7.5.3p11: in "typedef int X; void foo(X)", X is</span></div>
+<div class="line"><a name="l05027"></a><span class="lineno"> 5027</span>     <span class="comment">// considered to be a type, not a K&R identifier-list.</span></div>
+<div class="line"><a name="l05028"></a><span class="lineno"> 5028</span>     isGrouping = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l05029"></a><span class="lineno"> 5029</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05030"></a><span class="lineno"> 5030</span>     <span class="comment">// Otherwise, this is a grouping paren, e.g. 'int (*X)' or 'int(X)'.</span></div>
+<div class="line"><a name="l05031"></a><span class="lineno"> 5031</span>     isGrouping = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l05032"></a><span class="lineno"> 5032</span>   }</div>
+<div class="line"><a name="l05033"></a><span class="lineno"> 5033</span> </div>
+<div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>   <span class="comment">// If this is a grouping paren, handle:</span></div>
+<div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>   <span class="comment">// direct-declarator: '(' declarator ')'</span></div>
+<div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>   <span class="comment">// direct-declarator: '(' attributes declarator ')'</span></div>
+<div class="line"><a name="l05037"></a><span class="lineno"> 5037</span>   <span class="keywordflow">if</span> (isGrouping) {</div>
+<div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>     <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EllipsisLoc = D.<a class="code" href="classclang_1_1Declarator.html#a58c600f71c8a79aa675b86da3c5298b1">getEllipsisLoc</a>();</div>
+<div class="line"><a name="l05039"></a><span class="lineno"> 5039</span>     D.<a class="code" href="classclang_1_1Declarator.html#afe56933de21b56e6844e0f4b6b1c6347">setEllipsisLoc</a>(<a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>());</div>
+<div class="line"><a name="l05040"></a><span class="lineno"> 5040</span> </div>
+<div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>     <span class="keywordtype">bool</span> hadGroupingParens = D.<a class="code" href="classclang_1_1Declarator.html#a51aa50e2666ddb3df3925e250b616e56">hasGroupingParens</a>();</div>
+<div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>     D.<a class="code" href="classclang_1_1Declarator.html#a688393fbb6bd2ba0c28d8a3a2e6aa332">setGroupingParens</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>     ParseDeclaratorInternal(D, &Parser::ParseDirectDeclarator);</div>
+<div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>     <span class="comment">// Match the ')'.</span></div>
+<div class="line"><a name="l05045"></a><span class="lineno"> 5045</span>     T.consumeClose();</div>
+<div class="line"><a name="l05046"></a><span class="lineno"> 5046</span>     D.<a class="code" href="classclang_1_1Declarator.html#a6584999672d6ede1bc33ca1f85452b90">AddTypeInfo</a>(<a class="code" href="structclang_1_1DeclaratorChunk.html#aeeb919dd21c543fd545dd54b7f7544cd" title="Return a DeclaratorChunk for a paren.">DeclaratorChunk::getParen</a>(T.getOpenLocation(),</div>
+<div class="line"><a name="l05047"></a><span class="lineno"> 5047</span>                                             T.getCloseLocation()),</div>
+<div class="line"><a name="l05048"></a><span class="lineno"> 5048</span>                   attrs, T.getCloseLocation());</div>
+<div class="line"><a name="l05049"></a><span class="lineno"> 5049</span> </div>
+<div class="line"><a name="l05050"></a><span class="lineno"> 5050</span>     D.<a class="code" href="classclang_1_1Declarator.html#a688393fbb6bd2ba0c28d8a3a2e6aa332">setGroupingParens</a>(hadGroupingParens);</div>
+<div class="line"><a name="l05051"></a><span class="lineno"> 5051</span> </div>
+<div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>     <span class="comment">// An ellipsis cannot be placed outside parentheses.</span></div>
+<div class="line"><a name="l05053"></a><span class="lineno"> 5053</span>     <span class="keywordflow">if</span> (EllipsisLoc.<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>())</div>
+<div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>       <a class="code" href="ParseDecl_8cpp.html#ab629216d8ccbcf0313202ee60e96c865">diagnoseMisplacedEllipsis</a>(*<span class="keyword">this</span>, D, EllipsisLoc);</div>
+<div class="line"><a name="l05055"></a><span class="lineno"> 5055</span> </div>
+<div class="line"><a name="l05056"></a><span class="lineno"> 5056</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05057"></a><span class="lineno"> 5057</span>   }</div>
+<div class="line"><a name="l05058"></a><span class="lineno"> 5058</span> </div>
+<div class="line"><a name="l05059"></a><span class="lineno"> 5059</span>   <span class="comment">// Okay, if this wasn't a grouping paren, it must be the start of a function</span></div>
+<div class="line"><a name="l05060"></a><span class="lineno"> 5060</span>   <span class="comment">// argument list.  Recognize that this declarator will never have an</span></div>
+<div class="line"><a name="l05061"></a><span class="lineno"> 5061</span>   <span class="comment">// identifier (and remember where it would have been), then call into</span></div>
+<div class="line"><a name="l05062"></a><span class="lineno"> 5062</span>   <span class="comment">// ParseFunctionDeclarator to handle of argument list.</span></div>
+<div class="line"><a name="l05063"></a><span class="lineno"> 5063</span>   D.<a class="code" href="classclang_1_1Declarator.html#a0a60bf51acdddfd2077e6725af7ad2f2" title="Set the name of this declarator to be the given identifier.">SetIdentifier</a>(0, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>());</div>
+<div class="line"><a name="l05064"></a><span class="lineno"> 5064</span> </div>
+<div class="line"><a name="l05065"></a><span class="lineno"> 5065</span>   <span class="comment">// Enter function-declaration scope, limiting any declarators to the</span></div>
+<div class="line"><a name="l05066"></a><span class="lineno"> 5066</span>   <span class="comment">// function prototype scope, including parameter declarators.</span></div>
+<div class="line"><a name="l05067"></a><span class="lineno"> 5067</span>   ParseScope PrototypeScope(<span class="keyword">this</span>,</div>
+<div class="line"><a name="l05068"></a><span class="lineno"> 5068</span>                             <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7a03e444466b6d5f544bd8fedbe94a7cdb" title="This is a scope that corresponds to the parameters within a function prototype.">Scope::FunctionPrototypeScope</a> | <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7af9dd922f0e23495a79fc93698d6775ff" title="This is a scope that can contain a declaration. Some scopes just contain loop constructs but don't co...">Scope::DeclScope</a> |</div>
+<div class="line"><a name="l05069"></a><span class="lineno"> 5069</span>                             (D.<a class="code" href="classclang_1_1Declarator.html#a1e656a51e602628292dd2193d1765318" title="Return true if a function declarator at this position would be a function declaration.">isFunctionDeclaratorAFunctionDeclaration</a>()</div>
+<div class="line"><a name="l05070"></a><span class="lineno"> 5070</span>                                ? <a class="code" href="classclang_1_1Scope.html#afa7e82b8e23f84d0d73e27953b9afab7ad0c60d6cb6734034fb8ee9d694e2d854" title="This is a scope that corresponds to the parameters within a function prototype for a function declara...">Scope::FunctionDeclarationScope</a> : 0));</div>
+<div class="line"><a name="l05071"></a><span class="lineno"> 5071</span>   ParseFunctionDeclarator(D, attrs, T, <span class="keyword">false</span>, RequiresArg);</div>
+<div class="line"><a name="l05072"></a><span class="lineno"> 5072</span>   PrototypeScope.Exit();</div>
+<div class="line"><a name="l05073"></a><span class="lineno"> 5073</span> }</div>
+<div class="line"><a name="l05074"></a><span class="lineno"> 5074</span> <span class="comment"></span></div>
+<div class="line"><a name="l05075"></a><span class="lineno"> 5075</span> <span class="comment">/// ParseFunctionDeclarator - We are after the identifier and have parsed the</span></div>
+<div class="line"><a name="l05076"></a><span class="lineno"> 5076</span> <span class="comment">/// declarator D up to a paren, which indicates that we are parsing function</span></div>
+<div class="line"><a name="l05077"></a><span class="lineno"> 5077</span> <span class="comment">/// arguments.</span></div>
+<div class="line"><a name="l05078"></a><span class="lineno"> 5078</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05079"></a><span class="lineno"> 5079</span> <span class="comment">/// If FirstArgAttrs is non-null, then the caller parsed those arguments</span></div>
+<div class="line"><a name="l05080"></a><span class="lineno"> 5080</span> <span class="comment">/// immediately after the open paren - they should be considered to be the</span></div>
+<div class="line"><a name="l05081"></a><span class="lineno"> 5081</span> <span class="comment">/// first argument of a parameter.</span></div>
+<div class="line"><a name="l05082"></a><span class="lineno"> 5082</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05083"></a><span class="lineno"> 5083</span> <span class="comment">/// If RequiresArg is true, then the first argument of the function is required</span></div>
+<div class="line"><a name="l05084"></a><span class="lineno"> 5084</span> <span class="comment">/// to be present and required to not be an identifier list.</span></div>
+<div class="line"><a name="l05085"></a><span class="lineno"> 5085</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05086"></a><span class="lineno"> 5086</span> <span class="comment">/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],</span></div>
+<div class="line"><a name="l05087"></a><span class="lineno"> 5087</span> <span class="comment">/// (C++11) ref-qualifier[opt], exception-specification[opt],</span></div>
+<div class="line"><a name="l05088"></a><span class="lineno"> 5088</span> <span class="comment">/// (C++11) attribute-specifier-seq[opt], and (C++11) trailing-return-type[opt].</span></div>
+<div class="line"><a name="l05089"></a><span class="lineno"> 5089</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05090"></a><span class="lineno"> 5090</span> <span class="comment">/// [C++11] exception-specification:</span></div>
+<div class="line"><a name="l05091"></a><span class="lineno"> 5091</span> <span class="comment">///           dynamic-exception-specification</span></div>
+<div class="line"><a name="l05092"></a><span class="lineno"> 5092</span> <span class="comment">///           noexcept-specification</span></div>
+<div class="line"><a name="l05093"></a><span class="lineno"> 5093</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05094"></a><span class="lineno"> 5094</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseFunctionDeclarator(<a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>                                      <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &FirstArgAttrs,</div>
+<div class="line"><a name="l05096"></a><span class="lineno"> 5096</span>                                      <a class="code" href="classclang_1_1BalancedDelimiterTracker.html" title="RAII class that helps handle the parsing of an open/close delimiter pair, such as braces { ...">BalancedDelimiterTracker</a> &Tracker,</div>
+<div class="line"><a name="l05097"></a><span class="lineno"> 5097</span>                                      <span class="keywordtype">bool</span> IsAmbiguous,</div>
+<div class="line"><a name="l05098"></a><span class="lineno"> 5098</span>                                      <span class="keywordtype">bool</span> RequiresArg) {</div>
+<div class="line"><a name="l05099"></a><span class="lineno"> 5099</span>   assert(<a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()->isFunctionPrototypeScope() &&</div>
+<div class="line"><a name="l05100"></a><span class="lineno"> 5100</span>          <span class="stringliteral">"Should call from a Function scope"</span>);</div>
+<div class="line"><a name="l05101"></a><span class="lineno"> 5101</span>   <span class="comment">// lparen is already consumed!</span></div>
+<div class="line"><a name="l05102"></a><span class="lineno"> 5102</span>   assert(D.<a class="code" href="classclang_1_1Declarator.html#a91b289a9fb2d7456aeebfaa1fe11c07e">isPastIdentifier</a>() && <span class="stringliteral">"Should not call before identifier!"</span>);</div>
+<div class="line"><a name="l05103"></a><span class="lineno"> 5103</span> </div>
+<div class="line"><a name="l05104"></a><span class="lineno"> 5104</span>   <span class="comment">// This should be true when the function has typed arguments.</span></div>
+<div class="line"><a name="l05105"></a><span class="lineno"> 5105</span>   <span class="comment">// Otherwise, it is treated as a K&R-style function.</span></div>
+<div class="line"><a name="l05106"></a><span class="lineno"> 5106</span>   <span class="keywordtype">bool</span> HasProto = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l05107"></a><span class="lineno"> 5107</span>   <span class="comment">// Build up an array of information about the parsed arguments.</span></div>
+<div class="line"><a name="l05108"></a><span class="lineno"> 5108</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<DeclaratorChunk::ParamInfo, 16></a> ParamInfo;</div>
+<div class="line"><a name="l05109"></a><span class="lineno"> 5109</span>   <span class="comment">// Remember where we see an ellipsis, if any.</span></div>
+<div class="line"><a name="l05110"></a><span class="lineno"> 5110</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> EllipsisLoc;</div>
+<div class="line"><a name="l05111"></a><span class="lineno"> 5111</span> </div>
+<div class="line"><a name="l05112"></a><span class="lineno"> 5112</span>   <a class="code" href="classclang_1_1DeclSpec.html" title="Captures information about "declaration specifiers".">DeclSpec</a> DS(AttrFactory);</div>
+<div class="line"><a name="l05113"></a><span class="lineno"> 5113</span>   <span class="keywordtype">bool</span> RefQualifierIsLValueRef = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l05114"></a><span class="lineno"> 5114</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> RefQualifierLoc;</div>
+<div class="line"><a name="l05115"></a><span class="lineno"> 5115</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> ConstQualifierLoc;</div>
+<div class="line"><a name="l05116"></a><span class="lineno"> 5116</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> VolatileQualifierLoc;</div>
+<div class="line"><a name="l05117"></a><span class="lineno"> 5117</span>   <a class="code" href="namespaceclang.html#af8a91eed04532d5da41ef08e7c9c081e" title="The various types of exception specifications that exist in C++11.">ExceptionSpecificationType</a> ESpecType = <a class="code" href="namespaceclang.html#af8a91eed04532d5da41ef08e7c9c081ea8cabd964c552c9a643fd6e57bad90220" title="no exception specification">EST_None</a>;</div>
+<div class="line"><a name="l05118"></a><span class="lineno"> 5118</span>   <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> ESpecRange;</div>
+<div class="line"><a name="l05119"></a><span class="lineno"> 5119</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<ParsedType, 2></a> DynamicExceptions;</div>
+<div class="line"><a name="l05120"></a><span class="lineno"> 5120</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SourceRange, 2></a> DynamicExceptionRanges;</div>
+<div class="line"><a name="l05121"></a><span class="lineno"> 5121</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> NoexceptExpr;</div>
+<div class="line"><a name="l05122"></a><span class="lineno"> 5122</span>   <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> FnAttrs(AttrFactory);</div>
+<div class="line"><a name="l05123"></a><span class="lineno"> 5123</span>   <a class="code" href="classclang_1_1ActionResult.html">TypeResult</a> TrailingReturnType;</div>
+<div class="line"><a name="l05124"></a><span class="lineno"> 5124</span> </div>
+<div class="line"><a name="l05125"></a><span class="lineno"> 5125</span>   Actions.<a class="code" href="classclang_1_1Sema.html#a922e46e7876e088aa79aa56a0a29e4f7">ActOnStartFunctionDeclarator</a>();</div>
+<div class="line"><a name="l05126"></a><span class="lineno"> 5126</span>   <span class="comment">/* LocalEndLoc is the end location for the local FunctionTypeLoc.</span></div>
+<div class="line"><a name="l05127"></a><span class="lineno"> 5127</span> <span class="comment">     EndLoc is the end location for the function declarator.</span></div>
+<div class="line"><a name="l05128"></a><span class="lineno"> 5128</span> <span class="comment">     They differ for trailing return types. */</span></div>
+<div class="line"><a name="l05129"></a><span class="lineno"> 5129</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> StartLoc, LocalEndLoc, EndLoc;</div>
+<div class="line"><a name="l05130"></a><span class="lineno"> 5130</span>   <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> LParenLoc, RParenLoc;</div>
+<div class="line"><a name="l05131"></a><span class="lineno"> 5131</span>   LParenLoc = Tracker.<a class="code" href="classclang_1_1BalancedDelimiterTracker.html#a5a460bd8c664becc038d4764072fdc58">getOpenLocation</a>();</div>
+<div class="line"><a name="l05132"></a><span class="lineno"> 5132</span>   StartLoc = LParenLoc;</div>
+<div class="line"><a name="l05133"></a><span class="lineno"> 5133</span> </div>
+<div class="line"><a name="l05134"></a><span class="lineno"> 5134</span>   <span class="keywordflow">if</span> (isFunctionDeclaratorIdentifierList()) {</div>
+<div class="line"><a name="l05135"></a><span class="lineno"> 5135</span>     <span class="keywordflow">if</span> (RequiresArg)</div>
+<div class="line"><a name="l05136"></a><span class="lineno"> 5136</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_argument_required_after_attribute);</div>
+<div class="line"><a name="l05137"></a><span class="lineno"> 5137</span> </div>
+<div class="line"><a name="l05138"></a><span class="lineno"> 5138</span>     ParseFunctionDeclaratorIdentifierList(D, ParamInfo);</div>
+<div class="line"><a name="l05139"></a><span class="lineno"> 5139</span> </div>
+<div class="line"><a name="l05140"></a><span class="lineno"> 5140</span>     Tracker.<a class="code" href="classclang_1_1BalancedDelimiterTracker.html#a0604b944b45dc21a6f5ba3d60aea21aa">consumeClose</a>();</div>
+<div class="line"><a name="l05141"></a><span class="lineno"> 5141</span>     RParenLoc = Tracker.<a class="code" href="classclang_1_1BalancedDelimiterTracker.html#a7d323c7574221fb1f8f4bdab695e8d87">getCloseLocation</a>();</div>
+<div class="line"><a name="l05142"></a><span class="lineno"> 5142</span>     LocalEndLoc = RParenLoc;</div>
+<div class="line"><a name="l05143"></a><span class="lineno"> 5143</span>     EndLoc = RParenLoc;</div>
+<div class="line"><a name="l05144"></a><span class="lineno"> 5144</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::r_paren))</div>
+<div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>       ParseParameterDeclarationClause(D, FirstArgAttrs, ParamInfo, </div>
+<div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>                                       EllipsisLoc);</div>
+<div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (RequiresArg)</div>
+<div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_argument_required_after_attribute);</div>
+<div class="line"><a name="l05150"></a><span class="lineno"> 5150</span> </div>
+<div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>     HasProto = ParamInfo.size() || <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus;</div>
+<div class="line"><a name="l05152"></a><span class="lineno"> 5152</span> </div>
+<div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>     <span class="comment">// If we have the closing ')', eat it.</span></div>
+<div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>     Tracker.<a class="code" href="classclang_1_1BalancedDelimiterTracker.html#a0604b944b45dc21a6f5ba3d60aea21aa">consumeClose</a>();</div>
+<div class="line"><a name="l05155"></a><span class="lineno"> 5155</span>     RParenLoc = Tracker.<a class="code" href="classclang_1_1BalancedDelimiterTracker.html#a7d323c7574221fb1f8f4bdab695e8d87">getCloseLocation</a>();</div>
+<div class="line"><a name="l05156"></a><span class="lineno"> 5156</span>     LocalEndLoc = RParenLoc;</div>
+<div class="line"><a name="l05157"></a><span class="lineno"> 5157</span>     EndLoc = RParenLoc;</div>
+<div class="line"><a name="l05158"></a><span class="lineno"> 5158</span> </div>
+<div class="line"><a name="l05159"></a><span class="lineno"> 5159</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>) {</div>
+<div class="line"><a name="l05160"></a><span class="lineno"> 5160</span>       <span class="comment">// FIXME: Accept these components in any order, and produce fixits to</span></div>
+<div class="line"><a name="l05161"></a><span class="lineno"> 5161</span>       <span class="comment">// correct the order if the user gets it wrong. Ideally we should deal</span></div>
+<div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>       <span class="comment">// with the virt-specifier-seq and pure-specifier in the same way.</span></div>
+<div class="line"><a name="l05163"></a><span class="lineno"> 5163</span> </div>
+<div class="line"><a name="l05164"></a><span class="lineno"> 5164</span>       <span class="comment">// Parse cv-qualifier-seq[opt].</span></div>
+<div class="line"><a name="l05165"></a><span class="lineno"> 5165</span>       ParseTypeQualifierListOpt(DS, <span class="comment">/*VendorAttributesAllowed*/</span> <span class="keyword">false</span>,</div>
+<div class="line"><a name="l05166"></a><span class="lineno"> 5166</span>                                 <span class="comment">/*CXX11AttributesAllowed*/</span> <span class="keyword">false</span>,</div>
+<div class="line"><a name="l05167"></a><span class="lineno"> 5167</span>                                 <span class="comment">/*AtomicAllowed*/</span> <span class="keyword">false</span>);</div>
+<div class="line"><a name="l05168"></a><span class="lineno"> 5168</span>       <span class="keywordflow">if</span> (!DS.<a class="code" href="classclang_1_1DeclSpec.html#a7b8a30b08c1fa1aac47e417167a8631f">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>().<a class="code" href="classclang_1_1SourceLocation.html#a1936fc09837ff8a195fa63e29f05796f">isInvalid</a>()) {</div>
+<div class="line"><a name="l05169"></a><span class="lineno"> 5169</span>         EndLoc = DS.<a class="code" href="classclang_1_1DeclSpec.html#a7b8a30b08c1fa1aac47e417167a8631f">getSourceRange</a>().<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>();</div>
+<div class="line"><a name="l05170"></a><span class="lineno"> 5170</span>         ConstQualifierLoc = DS.<a class="code" href="classclang_1_1DeclSpec.html#aeede161c2e7790e4d9ceaca2657af20f">getConstSpecLoc</a>();</div>
+<div class="line"><a name="l05171"></a><span class="lineno"> 5171</span>         VolatileQualifierLoc = DS.<a class="code" href="classclang_1_1DeclSpec.html#a6dc67cc243c1018bc393691cb012c9fd">getVolatileSpecLoc</a>();</div>
+<div class="line"><a name="l05172"></a><span class="lineno"> 5172</span>       }</div>
+<div class="line"><a name="l05173"></a><span class="lineno"> 5173</span> </div>
+<div class="line"><a name="l05174"></a><span class="lineno"> 5174</span>       <span class="comment">// Parse ref-qualifier[opt].</span></div>
+<div class="line"><a name="l05175"></a><span class="lineno"> 5175</span>       <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::amp) || Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ampamp)) {</div>
+<div class="line"><a name="l05176"></a><span class="lineno"> 5176</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> ?</div>
+<div class="line"><a name="l05177"></a><span class="lineno"> 5177</span>              diag::warn_cxx98_compat_ref_qualifier :</div>
+<div class="line"><a name="l05178"></a><span class="lineno"> 5178</span>              diag::ext_ref_qualifier);</div>
+<div class="line"><a name="l05179"></a><span class="lineno"> 5179</span> </div>
+<div class="line"><a name="l05180"></a><span class="lineno"> 5180</span>         RefQualifierIsLValueRef = Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::amp);</div>
+<div class="line"><a name="l05181"></a><span class="lineno"> 5181</span>         RefQualifierLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l05182"></a><span class="lineno"> 5182</span>         EndLoc = RefQualifierLoc;</div>
+<div class="line"><a name="l05183"></a><span class="lineno"> 5183</span>       }</div>
+<div class="line"><a name="l05184"></a><span class="lineno"> 5184</span> </div>
+<div class="line"><a name="l05185"></a><span class="lineno"> 5185</span>       <span class="comment">// C++11 [expr.prim.general]p3:</span></div>
+<div class="line"><a name="l05186"></a><span class="lineno"> 5186</span>       <span class="comment">//   If a declaration declares a member function or member function</span></div>
+<div class="line"><a name="l05187"></a><span class="lineno"> 5187</span>       <span class="comment">//   template of a class X, the expression this is a prvalue of type</span></div>
+<div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>       <span class="comment">//   "pointer to cv-qualifier-seq X" between the optional cv-qualifer-seq</span></div>
+<div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>       <span class="comment">//   and the end of the function-definition, member-declarator, or</span></div>
+<div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>       <span class="comment">//   declarator.</span></div>
+<div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>       <span class="comment">// FIXME: currently, "static" case isn't handled correctly.</span></div>
+<div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>       <span class="keywordtype">bool</span> IsCXX11MemberFunction =</div>
+<div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>         <a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus11 &&</div>
+<div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>         (D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156a1e14935ffa1250c82e451a548b7302f6">Declarator::MemberContext</a></div>
+<div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>          ? !D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#a102837205c9d404fc55dec8bcf7435e3">isFriendSpecified</a>()</div>
+<div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>          : D.<a class="code" href="classclang_1_1Declarator.html#a9f8176e80c2f28664c3a296b75c4137e">getContext</a>() == <a class="code" href="classclang_1_1Declarator.html#a1e882aec89a926d4a64b0ac2d6a40156af0880405dff056ebbd56152e963e5cd5">Declarator::FileContext</a> &&</div>
+<div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>            D.<a class="code" href="classclang_1_1Declarator.html#a2d6e6fa737ba7f7e12e0e393d3c73297">getCXXScopeSpec</a>().<a class="code" href="classclang_1_1CXXScopeSpec.html#a1b5492c64a19704d8f8b3373a0be09c7" title="A scope specifier is present, and it refers to a real scope.">isValid</a>() &&</div>
+<div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>            Actions.<a class="code" href="classclang_1_1Sema.html#a915a017e1ec7e24452d90bebe226c8cc" title="CurContext - This is the current declaration context of parsing.">CurContext</a>-><a class="code" href="classclang_1_1DeclContext.html#a85027c592c0fa8ffa83e2570089217a7">isRecord</a>());</div>
+<div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>       <a class="code" href="classclang_1_1Sema_1_1CXXThisScopeRAII.html" title="RAII object used to temporarily allow the C++ 'this' expression to be used, with the given qualifiers...">Sema::CXXThisScopeRAII</a> ThisScope(Actions,</div>
+<div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>                                dyn_cast<CXXRecordDecl>(Actions.<a class="code" href="classclang_1_1Sema.html#a915a017e1ec7e24452d90bebe226c8cc" title="CurContext - This is the current declaration context of parsing.">CurContext</a>),</div>
+<div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>                                DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>() |</div>
+<div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>                                (D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#af31541afc7e8463cae0a1afe9946f1cf">isConstexprSpecified</a>() &&</div>
+<div class="line"><a name="l05203"></a><span class="lineno"> 5203</span>                                 !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus1y</div>
+<div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>                                   ? <a class="code" href="classclang_1_1Qualifiers.html#a2754b754fd8a09705c060dc7b48badfea453669a6a4ff7ce22ec7b1024079aaf9">Qualifiers::Const</a> : 0),</div>
+<div class="line"><a name="l05205"></a><span class="lineno"> 5205</span>                                IsCXX11MemberFunction);</div>
+<div class="line"><a name="l05206"></a><span class="lineno"> 5206</span> </div>
+<div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>       <span class="comment">// Parse exception-specification[opt].</span></div>
+<div class="line"><a name="l05208"></a><span class="lineno"> 5208</span>       ESpecType = tryParseExceptionSpecification(ESpecRange,</div>
+<div class="line"><a name="l05209"></a><span class="lineno"> 5209</span>                                                  DynamicExceptions,</div>
+<div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>                                                  DynamicExceptionRanges,</div>
+<div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>                                                  NoexceptExpr);</div>
+<div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>       <span class="keywordflow">if</span> (ESpecType != <a class="code" href="namespaceclang.html#af8a91eed04532d5da41ef08e7c9c081ea8cabd964c552c9a643fd6e57bad90220" title="no exception specification">EST_None</a>)</div>
+<div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>         EndLoc = ESpecRange.<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>();</div>
+<div class="line"><a name="l05214"></a><span class="lineno"> 5214</span> </div>
+<div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>       <span class="comment">// Parse attribute-specifier-seq[opt]. Per DR 979 and DR 1297, this goes</span></div>
+<div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>       <span class="comment">// after the exception-specification.</span></div>
+<div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>       MaybeParseCXX11Attributes(FnAttrs);</div>
+<div class="line"><a name="l05218"></a><span class="lineno"> 5218</span> </div>
+<div class="line"><a name="l05219"></a><span class="lineno"> 5219</span>       <span class="comment">// Parse trailing-return-type[opt].</span></div>
+<div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>       LocalEndLoc = EndLoc;</div>
+<div class="line"><a name="l05221"></a><span class="lineno"> 5221</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a> && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::arrow)) {</div>
+<div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>         <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::warn_cxx98_compat_trailing_return_type);</div>
+<div class="line"><a name="l05223"></a><span class="lineno"> 5223</span>         <span class="keywordflow">if</span> (D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#a8e80657590008634115a6fe1d31f7600">getTypeSpecType</a>() == <a class="code" href="namespaceclang.html#a033691a5f00979c1a22d8aa114d07e13a181187fb12e42d2806a044e0a7f458f4">TST_auto</a>)</div>
+<div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>           StartLoc = D.<a class="code" href="classclang_1_1Declarator.html#a759faf43a439cce3a915e11f33ff8c5a">getDeclSpec</a>().<a class="code" href="classclang_1_1DeclSpec.html#ab3ee52f99feff86eacd8349ff1cb1381">getTypeSpecTypeLoc</a>();</div>
+<div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>         LocalEndLoc = Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>();</div>
+<div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>         <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> Range;</div>
+<div class="line"><a name="l05227"></a><span class="lineno"> 5227</span>         TrailingReturnType = ParseTrailingReturnType(Range);</div>
+<div class="line"><a name="l05228"></a><span class="lineno"> 5228</span>         EndLoc = Range.<a class="code" href="classclang_1_1SourceRange.html#a982d28235ad96ce81b3e8144b7b245c0">getEnd</a>();</div>
+<div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>       }</div>
+<div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>     }</div>
+<div class="line"><a name="l05231"></a><span class="lineno"> 5231</span>   }</div>
+<div class="line"><a name="l05232"></a><span class="lineno"> 5232</span> </div>
+<div class="line"><a name="l05233"></a><span class="lineno"> 5233</span>   <span class="comment">// Remember that we parsed a function type, and remember the attributes.</span></div>
+<div class="line"><a name="l05234"></a><span class="lineno"> 5234</span>   D.<a class="code" href="classclang_1_1Declarator.html#a6584999672d6ede1bc33ca1f85452b90">AddTypeInfo</a>(<a class="code" href="structclang_1_1DeclaratorChunk.html#a682a0cfc3d30e9ab9349bef9d875eb0f">DeclaratorChunk::getFunction</a>(HasProto,</div>
+<div class="line"><a name="l05235"></a><span class="lineno"> 5235</span>                                              IsAmbiguous,</div>
+<div class="line"><a name="l05236"></a><span class="lineno"> 5236</span>                                              LParenLoc,</div>
+<div class="line"><a name="l05237"></a><span class="lineno"> 5237</span>                                              ParamInfo.data(), ParamInfo.size(),</div>
+<div class="line"><a name="l05238"></a><span class="lineno"> 5238</span>                                              EllipsisLoc, RParenLoc,</div>
+<div class="line"><a name="l05239"></a><span class="lineno"> 5239</span>                                              DS.<a class="code" href="classclang_1_1DeclSpec.html#a41d4bf4c8f0a90885b6ce26b5c9bb105" title="getTypeQualifiers - Return a set of TQs.">getTypeQualifiers</a>(),</div>
+<div class="line"><a name="l05240"></a><span class="lineno"> 5240</span>                                              RefQualifierIsLValueRef,</div>
+<div class="line"><a name="l05241"></a><span class="lineno"> 5241</span>                                              RefQualifierLoc, ConstQualifierLoc,</div>
+<div class="line"><a name="l05242"></a><span class="lineno"> 5242</span>                                              VolatileQualifierLoc,</div>
+<div class="line"><a name="l05243"></a><span class="lineno"> 5243</span>                                              <span class="comment">/*MutableLoc=*/</span><a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(),</div>
+<div class="line"><a name="l05244"></a><span class="lineno"> 5244</span>                                              ESpecType, ESpecRange.<a class="code" href="classclang_1_1SourceRange.html#a890dff14560eb9aceb08be18dfe74208">getBegin</a>(),</div>
+<div class="line"><a name="l05245"></a><span class="lineno"> 5245</span>                                              DynamicExceptions.data(),</div>
+<div class="line"><a name="l05246"></a><span class="lineno"> 5246</span>                                              DynamicExceptionRanges.data(),</div>
+<div class="line"><a name="l05247"></a><span class="lineno"> 5247</span>                                              DynamicExceptions.size(),</div>
+<div class="line"><a name="l05248"></a><span class="lineno"> 5248</span>                                              NoexceptExpr.<a class="code" href="classclang_1_1ActionResult.html#ae70d0a2fa83269f71f1634cb9e0dc3d6">isUsable</a>() ?</div>
+<div class="line"><a name="l05249"></a><span class="lineno"> 5249</span>                                                NoexceptExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>() : 0,</div>
+<div class="line"><a name="l05250"></a><span class="lineno"> 5250</span>                                              StartLoc, LocalEndLoc, D,</div>
+<div class="line"><a name="l05251"></a><span class="lineno"> 5251</span>                                              TrailingReturnType),</div>
+<div class="line"><a name="l05252"></a><span class="lineno"> 5252</span>                 FnAttrs, EndLoc);</div>
+<div class="line"><a name="l05253"></a><span class="lineno"> 5253</span> </div>
+<div class="line"><a name="l05254"></a><span class="lineno"> 5254</span>   Actions.<a class="code" href="classclang_1_1Sema.html#a621c33e1e018c386e5edcb0210088ca5">ActOnEndFunctionDeclarator</a>();</div>
+<div class="line"><a name="l05255"></a><span class="lineno"> 5255</span> }</div>
+<div class="line"><a name="l05256"></a><span class="lineno"> 5256</span> <span class="comment"></span></div>
+<div class="line"><a name="l05257"></a><span class="lineno"> 5257</span> <span class="comment">/// isFunctionDeclaratorIdentifierList - This parameter list may have an</span></div>
+<div class="line"><a name="l05258"></a><span class="lineno"> 5258</span> <span class="comment">/// identifier list form for a K&R-style function:  void foo(a,b,c)</span></div>
+<div class="line"><a name="l05259"></a><span class="lineno"> 5259</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05260"></a><span class="lineno"> 5260</span> <span class="comment">/// Note that identifier-lists are only allowed for normal declarators, not for</span></div>
+<div class="line"><a name="l05261"></a><span class="lineno"> 5261</span> <span class="comment">/// abstract-declarators.</span></div>
+<div class="line"><a name="l05262"></a><span class="lineno"> 5262</span> <span class="comment"></span><span class="keywordtype">bool</span> Parser::isFunctionDeclaratorIdentifierList() {</div>
+<div class="line"><a name="l05263"></a><span class="lineno"> 5263</span>   <span class="keywordflow">return</span> !<a class="code" href="classclang_1_1Parser.html#a01a6e30bd84c4846bcb0dc9c0bd86023">getLangOpts</a>().CPlusPlus</div>
+<div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>          && Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::identifier)</div>
+<div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>          && !TryAltiVecVectorToken()</div>
+<div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>          <span class="comment">// K&R identifier lists can't have typedefs as identifiers, per C99</span></div>
+<div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>          <span class="comment">// 6.7.5.3p11.</span></div>
+<div class="line"><a name="l05268"></a><span class="lineno"> 5268</span>          && (<a class="code" href="classclang_1_1Parser.html#a6a05dc9fb5788cbe37c727e89324c04d">TryAnnotateTypeOrScopeToken</a>() || !Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::annot_typename))</div>
+<div class="line"><a name="l05269"></a><span class="lineno"> 5269</span>          <span class="comment">// Identifier lists follow a really simple grammar: the identifiers can</span></div>
+<div class="line"><a name="l05270"></a><span class="lineno"> 5270</span>          <span class="comment">// be followed *only* by a ", identifier" or ")".  However, K&R</span></div>
+<div class="line"><a name="l05271"></a><span class="lineno"> 5271</span>          <span class="comment">// identifier lists are really rare in the brave new modern world, and</span></div>
+<div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>          <span class="comment">// it is very common for someone to typo a type in a non-K&R style</span></div>
+<div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>          <span class="comment">// list.  If we are presented with something like: "void foo(intptr x,</span></div>
+<div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>          <span class="comment">// float y)", we don't want to start parsing the function declarator as</span></div>
+<div class="line"><a name="l05275"></a><span class="lineno"> 5275</span>          <span class="comment">// though it is a K&R style declarator just because intptr is an</span></div>
+<div class="line"><a name="l05276"></a><span class="lineno"> 5276</span>          <span class="comment">// invalid type.</span></div>
+<div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>          <span class="comment">//</span></div>
+<div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>          <span class="comment">// To handle this, we check to see if the token after the first</span></div>
+<div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>          <span class="comment">// identifier is a "," or ")".  Only then do we parse it as an</span></div>
+<div class="line"><a name="l05280"></a><span class="lineno"> 5280</span>          <span class="comment">// identifier list.</span></div>
+<div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>          && (<a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::comma) || <a class="code" href="classclang_1_1Parser.html#a2807f5c9175ce6f3e43fa9cca9690020">NextToken</a>().<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::r_paren));</div>
+<div class="line"><a name="l05282"></a><span class="lineno"> 5282</span> }</div>
+<div class="line"><a name="l05283"></a><span class="lineno"> 5283</span> <span class="comment"></span></div>
+<div class="line"><a name="l05284"></a><span class="lineno"> 5284</span> <span class="comment">/// ParseFunctionDeclaratorIdentifierList - While parsing a function declarator</span></div>
+<div class="line"><a name="l05285"></a><span class="lineno"> 5285</span> <span class="comment">/// we found a K&R-style identifier list instead of a typed parameter list.</span></div>
+<div class="line"><a name="l05286"></a><span class="lineno"> 5286</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05287"></a><span class="lineno"> 5287</span> <span class="comment">/// After returning, ParamInfo will hold the parsed parameters.</span></div>
+<div class="line"><a name="l05288"></a><span class="lineno"> 5288</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05289"></a><span class="lineno"> 5289</span> <span class="comment">///       identifier-list: [C99 6.7.5]</span></div>
+<div class="line"><a name="l05290"></a><span class="lineno"> 5290</span> <span class="comment">///         identifier</span></div>
+<div class="line"><a name="l05291"></a><span class="lineno"> 5291</span> <span class="comment">///         identifier-list ',' identifier</span></div>
+<div class="line"><a name="l05292"></a><span class="lineno"> 5292</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05293"></a><span class="lineno"> 5293</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseFunctionDeclaratorIdentifierList(</div>
+<div class="line"><a name="l05294"></a><span class="lineno"> 5294</span>        <a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l05295"></a><span class="lineno"> 5295</span>        <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<DeclaratorChunk::ParamInfo></a> &ParamInfo) {</div>
+<div class="line"><a name="l05296"></a><span class="lineno"> 5296</span>   <span class="comment">// If there was no identifier specified for the declarator, either we are in</span></div>
+<div class="line"><a name="l05297"></a><span class="lineno"> 5297</span>   <span class="comment">// an abstract-declarator, or we are in a parameter declarator which was found</span></div>
+<div class="line"><a name="l05298"></a><span class="lineno"> 5298</span>   <span class="comment">// to be abstract.  In abstract-declarators, identifier lists are not valid:</span></div>
+<div class="line"><a name="l05299"></a><span class="lineno"> 5299</span>   <span class="comment">// diagnose this.</span></div>
+<div class="line"><a name="l05300"></a><span class="lineno"> 5300</span>   <span class="keywordflow">if</span> (!D.<a class="code" href="classclang_1_1Declarator.html#ac1465e02d2f6c8fa2a8aa69d8bdcec51">getIdentifier</a>())</div>
+<div class="line"><a name="l05301"></a><span class="lineno"> 5301</span>     <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::ext_ident_list_in_param);</div>
+<div class="line"><a name="l05302"></a><span class="lineno"> 5302</span> </div>
+<div class="line"><a name="l05303"></a><span class="lineno"> 5303</span>   <span class="comment">// Maintain an efficient lookup of params we have seen so far.</span></div>
+<div class="line"><a name="l05304"></a><span class="lineno"> 5304</span>   llvm::SmallSet<const IdentifierInfo*, 16> ParamsSoFar;</div>
+<div class="line"><a name="l05305"></a><span class="lineno"> 5305</span> </div>
+<div class="line"><a name="l05306"></a><span class="lineno"> 5306</span>   <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>     <span class="comment">// If this isn't an identifier, report the error and skip until ')'.</span></div>
+<div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::identifier)) {</div>
+<div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_expected_ident);</div>
+<div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>       <a class="code" href="classclang_1_1Parser.html#a8ff77be4f8f67a884036ea2dc5e2d468">SkipUntil</a>(tok::r_paren, <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdceabec820d0f0c6bfe0100d9f343adbd1c6">StopAtSemi</a> | <a class="code" href="classclang_1_1Parser.html#ad15719a223127a6626e0b1107c99fdcea7eadfbdad0b0f32d010aa026f79f44d9" title="Stop skipping at specified token, but don't skip the token itself.">StopBeforeMatch</a>);</div>
+<div class="line"><a name="l05311"></a><span class="lineno"> 5311</span>       <span class="comment">// Forget we parsed anything.</span></div>
+<div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>       ParamInfo.clear();</div>
+<div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05314"></a><span class="lineno"> 5314</span>     }</div>
+<div class="line"><a name="l05315"></a><span class="lineno"> 5315</span> </div>
+<div class="line"><a name="l05316"></a><span class="lineno"> 5316</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *ParmII = Tok.<a class="code" href="classclang_1_1Token.html#a0f86a35069d2f1917402adba7f4f6a7b">getIdentifierInfo</a>();</div>
+<div class="line"><a name="l05317"></a><span class="lineno"> 5317</span> </div>
+<div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>     <span class="comment">// Reject 'typedef int y; int test(x, y)', but continue parsing.</span></div>
+<div class="line"><a name="l05319"></a><span class="lineno"> 5319</span>     <span class="keywordflow">if</span> (Actions.<a class="code" href="classclang_1_1Sema.html#a3bdae6d7d92cb79777f2bcaea9b1c4b0" title="If the identifier refers to a type name within this scope, return the declaration of that type...">getTypeName</a>(*ParmII, Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(), <a class="code" href="classclang_1_1Parser.html#a1b5ad7abd6599942dc36a0abf8cd0fb3">getCurScope</a>()))</div>
+<div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_unexpected_typedef_ident) << ParmII;</div>
+<div class="line"><a name="l05321"></a><span class="lineno"> 5321</span> </div>
+<div class="line"><a name="l05322"></a><span class="lineno"> 5322</span>     <span class="comment">// Verify that the argument identifier has not already been mentioned.</span></div>
+<div class="line"><a name="l05323"></a><span class="lineno"> 5323</span>     <span class="keywordflow">if</span> (!ParamsSoFar.insert(ParmII)) {</div>
+<div class="line"><a name="l05324"></a><span class="lineno"> 5324</span>       <a class="code" href="classclang_1_1Parser.html#a17667802b65fe77c3199b8c7ce96d86c">Diag</a>(Tok, diag::err_param_redefinition) << ParmII;</div>
+<div class="line"><a name="l05325"></a><span class="lineno"> 5325</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05326"></a><span class="lineno"> 5326</span>       <span class="comment">// Remember this identifier in ParamInfo.</span></div>
+<div class="line"><a name="l05327"></a><span class="lineno"> 5327</span>       ParamInfo.push_back(<a class="code" href="structclang_1_1DeclaratorChunk_1_1ParamInfo.html">DeclaratorChunk::ParamInfo</a>(ParmII,</div>
+<div class="line"><a name="l05328"></a><span class="lineno"> 5328</span>                                                      Tok.<a class="code" href="classclang_1_1Token.html#a6f28cdecdecc3f19f8e7c976a044ebf8" title="Return a source location identifier for the specified offset in the current file.">getLocation</a>(),</div>
+<div class="line"><a name="l05329"></a><span class="lineno"> 5329</span>                                                      0));</div>
+<div class="line"><a name="l05330"></a><span class="lineno"> 5330</span>     }</div>
+<div class="line"><a name="l05331"></a><span class="lineno"> 5331</span> </div>
+<div class="line"><a name="l05332"></a><span class="lineno"> 5332</span>     <span class="comment">// Eat the identifier.</span></div>
+<div class="line"><a name="l05333"></a><span class="lineno"> 5333</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l05334"></a><span class="lineno"> 5334</span> </div>
+<div class="line"><a name="l05335"></a><span class="lineno"> 5335</span>     <span class="comment">// The list continues if we see a comma.</span></div>
+<div class="line"><a name="l05336"></a><span class="lineno"> 5336</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#add9ef521a5de741af9c573525b71cb73">isNot</a>(tok::comma))</div>
+<div class="line"><a name="l05337"></a><span class="lineno"> 5337</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05338"></a><span class="lineno"> 5338</span>     <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();</div>
+<div class="line"><a name="l05339"></a><span class="lineno"> 5339</span>   }</div>
+<div class="line"><a name="l05340"></a><span class="lineno"> 5340</span> }</div>
+<div class="line"><a name="l05341"></a><span class="lineno"> 5341</span> <span class="comment"></span></div>
+<div class="line"><a name="l05342"></a><span class="lineno"> 5342</span> <span class="comment">/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list</span></div>
+<div class="line"><a name="l05343"></a><span class="lineno"> 5343</span> <span class="comment">/// after the opening parenthesis. This function will not parse a K&R-style</span></div>
+<div class="line"><a name="l05344"></a><span class="lineno"> 5344</span> <span class="comment">/// identifier list.</span></div>
+<div class="line"><a name="l05345"></a><span class="lineno"> 5345</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05346"></a><span class="lineno"> 5346</span> <span class="comment">/// D is the declarator being parsed.  If FirstArgAttrs is non-null, then the</span></div>
+<div class="line"><a name="l05347"></a><span class="lineno"> 5347</span> <span class="comment">/// caller parsed those arguments immediately after the open paren - they should</span></div>
+<div class="line"><a name="l05348"></a><span class="lineno"> 5348</span> <span class="comment">/// be considered to be part of the first parameter.</span></div>
+<div class="line"><a name="l05349"></a><span class="lineno"> 5349</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05350"></a><span class="lineno"> 5350</span> <span class="comment">/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will</span></div>
+<div class="line"><a name="l05351"></a><span class="lineno"> 5351</span> <span class="comment">/// be the location of the ellipsis, if any was parsed.</span></div>
+<div class="line"><a name="l05352"></a><span class="lineno"> 5352</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05353"></a><span class="lineno"> 5353</span> <span class="comment">///       parameter-type-list: [C99 6.7.5]</span></div>
+<div class="line"><a name="l05354"></a><span class="lineno"> 5354</span> <span class="comment">///         parameter-list</span></div>
+<div class="line"><a name="l05355"></a><span class="lineno"> 5355</span> <span class="comment">///         parameter-list ',' '...'</span></div>
+<div class="line"><a name="l05356"></a><span class="lineno"> 5356</span> <span class="comment">/// [C++]   parameter-list '...'</span></div>
+<div class="line"><a name="l05357"></a><span class="lineno"> 5357</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05358"></a><span class="lineno"> 5358</span> <span class="comment">///       parameter-list: [C99 6.7.5]</span></div>
+<div class="line"><a name="l05359"></a><span class="lineno"> 5359</span> <span class="comment">///         parameter-declaration</span></div>
+<div class="line"><a name="l05360"></a><span class="lineno"> 5360</span> <span class="comment">///         parameter-list ',' parameter-declaration</span></div>
+<div class="line"><a name="l05361"></a><span class="lineno"> 5361</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05362"></a><span class="lineno"> 5362</span> <span class="comment">///       parameter-declaration: [C99 6.7.5]</span></div>
+<div class="line"><a name="l05363"></a><span class="lineno"> 5363</span> <span class="comment">///         declaration-specifiers declarator</span></div>
+<div class="line"><a name="l05364"></a><span class="lineno"> 5364</span> <span class="comment">/// [C++]   declaration-specifiers declarator '=' assignment-expression</span></div>
+<div class="line"><a name="l05365"></a><span class="lineno"> 5365</span> <span class="comment">/// [C++11]                                       initializer-clause</span></div>
+<div class="line"><a name="l05366"></a><span class="lineno"> 5366</span> <span class="comment">/// [GNU]   declaration-specifiers declarator attributes</span></div>
+<div class="line"><a name="l05367"></a><span class="lineno"> 5367</span> <span class="comment">///         declaration-specifiers abstract-declarator[opt]</span></div>
+<div class="line"><a name="l05368"></a><span class="lineno"> 5368</span> <span class="comment">/// [C++]   declaration-specifiers abstract-declarator[opt]</span></div>
+<div class="line"><a name="l05369"></a><span class="lineno"> 5369</span> <span class="comment">///           '=' assignment-expression</span></div>
+<div class="line"><a name="l05370"></a><span class="lineno"> 5370</span> <span class="comment">/// [GNU]   declaration-specifiers abstract-declarator[opt] attributes</span></div>
+<div class="line"><a name="l05371"></a><span class="lineno"> 5371</span> <span class="comment">/// [C++11] attribute-specifier-seq parameter-declaration</span></div>
+<div class="line"><a name="l05372"></a><span class="lineno"> 5372</span> <span class="comment">///</span></div>
+<div class="line"><a name="l05373"></a><span class="lineno"> 5373</span> <span class="comment"></span><span class="keywordtype">void</span> Parser::ParseParameterDeclarationClause(</div>
+<div class="line"><a name="l05374"></a><span class="lineno"> 5374</span>        <a class="code" href="classclang_1_1Declarator.html" title="Information about one declarator, including the parsed type information and the identifier.">Declarator</a> &D,</div>
+<div class="line"><a name="l05375"></a><span class="lineno"> 5375</span>        <a class="code" href="classclang_1_1ParsedAttributes.html">ParsedAttributes</a> &FirstArgAttrs,</div>
+<div class="line"><a name="l05376"></a><span class="lineno"> 5376</span>        <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<DeclaratorChunk::ParamInfo></a> &ParamInfo,</div>
+<div class="line"><a name="l05377"></a><span class="lineno"> 5377</span>        <a class="code" href="classclang_1_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a> &EllipsisLoc) {</div>
+<div class="line"><a name="l05378"></a><span class="lineno"> 5378</span>   <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l05379"></a><span class="lineno"> 5379</span>     <span class="keywordflow">if</span> (Tok.<a class="code" href="classclang_1_1Token.html#abc7c8cc4d8598e2c07148189157cf066">is</a>(tok::ellipsis)) {</div>
+<div class="line"><a name="l05380"></a><span class="lineno"> 5380</span>       <span class="comment">// FIXME: Issue a diagnostic if we parsed an attribute-specifier-seq</span></div>
+<div class="line"><a name="l05381"></a><span class="lineno"> 5381</span>       <span class="comment">// before deciding this was a parameter-declaration-clause.</span></div>
+<div class="line"><a name="l05382"></a><span class="lineno"> 5382</span>       EllipsisLoc = <a class="code" href="classclang_1_1Parser.html#a6d0070b6cec04f092e97eb7009a0dfb2">ConsumeToken</a>();     <span class="comment">// Consume the ellipsis.</span></div>
+<div class="line"><a name="l05383"></a><span class="lineno"> 5383</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05384"></a><span class="lineno"> 5384</span>     }</div>
+<div class="line"><a name="l05385"></a><span class="lineno"> 5385</span> </div>

[... 442 lines stripped ...]




More information about the llvm-commits mailing list