[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