[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/SemaStmt_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8cpp_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8cpp_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8cpp_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,3386 @@
+<!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: SemaStmt.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_0c3cadfa2fbef89a3b8f57073e8a31f9.html">Sema</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">SemaStmt.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="SemaStmt_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">//===--- SemaStmt.cpp - Semantic Analysis for Statements ------------------===//</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 semantic analysis for statements.</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="SemaInternal_8h.html">clang/Sema/SemaInternal.h</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor">#include "<a class="code" href="ASTContext_8h.html" title="Defines the clang::ASTContext interface.">clang/AST/ASTContext.h</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor">#include "<a class="code" href="ASTDiagnostic_8h.html">clang/AST/ASTDiagnostic.h</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "<a class="code" href="CharUnits_8h.html">clang/AST/CharUnits.h</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "<a class="code" href="DeclObjC_8h.html">clang/AST/DeclObjC.h</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include "<a class="code" href="EvaluatedExprVisitor_8h.html">clang/AST/EvaluatedExprVisitor.h</a>"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "<a class="code" href="ExprCXX_8h.html" title="Defines the clang::Expr interface and subclasses for C++ expressions.">clang/AST/ExprCXX.h</a>"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "<a class="code" href="ExprObjC_8h.html">clang/AST/ExprObjC.h</a>"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include "<a class="code" href="StmtCXX_8h.html">clang/AST/StmtCXX.h</a>"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "<a class="code" href="StmtObjC_8h.html" title="Defines the Objective-C statement AST node classes.">clang/AST/StmtObjC.h</a>"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "<a class="code" href="TypeLoc_8h.html" title="Defines the clang::TypeLoc interface and its subclasses.">clang/AST/TypeLoc.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "<a class="code" href="Preprocessor_8h.html">clang/Lex/Preprocessor.h</a>"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "<a class="code" href="Initialization_8h.html">clang/Sema/Initialization.h</a>"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "<a class="code" href="Lookup_8h.html">clang/Sema/Lookup.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="Scope_8h.html">clang/Sema/Scope.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="ScopeInfo_8h.html">clang/Sema/ScopeInfo.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "llvm/ADT/ArrayRef.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "llvm/ADT/STLExtras.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "llvm/ADT/SmallPtrSet.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "llvm/ADT/SmallString.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "llvm/ADT/SmallVector.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keyword">using namespace </span>clang;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keyword">using namespace </span>sema;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a90ac7f034fd898e5f3be6371e7ac7356">   38</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a90ac7f034fd898e5f3be6371e7ac7356">Sema::ActOnExprStmt</a>(<a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> FE) {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordflow">if</span> (FE.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   FE = ActOnFinishFullExpr(FE.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), FE.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>()-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(),</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                            <span class="comment">/*DiscardedValue*/</span> <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">if</span> (FE.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="comment">// C99 6.8.3p2: The expression in an expression statement is evaluated as a</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="comment">// void expression for its side effects.  Conversion to void allows any</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="comment">// operand, even incomplete types.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="comment">// Same thing in for stmt first clause (when expr) and third clause.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">return</span> Owned(static_cast<Stmt*>(FE.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>()));</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> }</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a7b29f15f67ae177e93c726043a275047">   56</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a7b29f15f67ae177e93c726043a275047">Sema::ActOnExprStmtError</a>() {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   DiscardCleanupsInEvaluationContext();</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a7eb2012ee62fd50a13a5b672e280d5a6">   61</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a7eb2012ee62fd50a13a5b672e280d5a6">Sema::ActOnNullStmt</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> SemiLoc,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                                <span class="keywordtype">bool</span> HasLeadingEmptyMacro) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1NullStmt.html">NullStmt</a>(SemiLoc, HasLeadingEmptyMacro));</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> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ac43246b39d7ad4017134f714c1d0aa30">   66</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#ac43246b39d7ad4017134f714c1d0aa30">Sema::ActOnDeclStmt</a>(<a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">DeclGroupPtrTy</a> dg, <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,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</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="l00068"></a><span class="lineno">   68</span>   <a class="code" href="classclang_1_1DeclGroupRef.html">DeclGroupRef</a> DG = dg.<a class="code" href="classclang_1_1OpaquePtr.html#a697242042954af7a2206fbd3c1acbf7e">get</a>();</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="comment">// If we have an invalid decl, just return an error.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">if</span> (DG.<a class="code" href="classclang_1_1DeclGroupRef.html#aaabf4d470e806b8396a852fb1b8dcdbc">isNull</a>()) <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a>(DG, StartLoc, EndLoc));</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</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"><a class="code" href="classclang_1_1Sema.html#a1f72327421572c32b6e3b856e8a820dd">   76</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#a1f72327421572c32b6e3b856e8a820dd">Sema::ActOnForEachDeclStmt</a>(<a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">DeclGroupPtrTy</a> dg) {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <a class="code" href="classclang_1_1DeclGroupRef.html">DeclGroupRef</a> DG = dg.<a class="code" href="classclang_1_1OpaquePtr.html#a697242042954af7a2206fbd3c1acbf7e">get</a>();</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">// If we don't have a declaration, or we have an invalid declaration,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="comment">// just return.</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">if</span> (DG.<a class="code" href="classclang_1_1DeclGroupRef.html#aaabf4d470e806b8396a852fb1b8dcdbc">isNull</a>() || !DG.<a class="code" href="classclang_1_1DeclGroupRef.html#a86e4d18a7d2b6c70c979edd41a941093">isSingleDecl</a>())</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *<a class="code" href="namespaceclang_1_1ast__matchers.html#a7e0add38d4eff7a20684fcba24be8887" title="Matches declarations.">decl</a> = DG.<a class="code" href="classclang_1_1DeclGroupRef.html#a4d038d29cf3002ed06d91f38959e9ed1">getSingleDecl</a>();</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">if</span> (!decl || decl-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>())</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="comment">// Only variable declarations are permitted.</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *var = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(<a class="code" href="namespaceclang_1_1ast__matchers.html#a7e0add38d4eff7a20684fcba24be8887" title="Matches declarations.">decl</a>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordflow">if</span> (!var) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(decl-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), diag::err_non_variable_decl_in_for);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     decl-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="comment">// foreach variables are never actually initialized in the way that</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="comment">// the parser came up with.</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   var-><a class="code" href="classclang_1_1VarDecl.html#abe4f58c0c2f5fb19c3b025ddd2e7dfcc">setInit</a>(0);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="comment">// In ARC, we don't need to retain the iteration variable of a fast</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="comment">// enumeration loop.  Rather than actually trying to catch that</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="comment">// during declaration processing, we remove the consequences here.</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span> (getLangOpts().ObjCAutoRefCount) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> <a class="code" href="namespaceclang_1_1ast__matchers.html#a82efb51f28681d561f9ce42fecf09d4b" title="Matches Types in the clang AST.">type</a> = var-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="comment">// Only do this if we inferred the lifetime.  Inferred lifetime</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="comment">// will show up as a local qualifier because explicit lifetime</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="comment">// should have shown up as an AttributedType instead.</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">if</span> (type.<a class="code" href="classclang_1_1QualType.html#ad2baca05dc1fa00a603a300973272610" title="Retrieve the set of qualifiers local to this particular QualType instance, not including any qualifie...">getLocalQualifiers</a>().<a class="code" href="classclang_1_1Qualifiers.html#adc87b34275b3ffb4f05274cc1fe0ecf7">getObjCLifetime</a>() == <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a>) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>       <span class="comment">// Add 'const' and mark the variable as pseudo-strong.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       var-><a class="code" href="classclang_1_1ValueDecl.html#a3a82ca5762f3fb1c2d25d9cf63728cd2">setType</a>(type.<a class="code" href="classclang_1_1QualType.html#af67a97892c8d03335815654b4b1b27db">withConst</a>());</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>       var-><a class="code" href="classclang_1_1VarDecl.html#aeba03e5d638a66da9ef9a25e9dbff68e">setARCPseudoStrong</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</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">/// \brief Diagnose unused '==' and '!=' as likely typos for '=' or '|='.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/// Adding a cast to void (or other expression wrappers) will prevent the</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">/// warning from firing.</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a1fc4e6eb6995316a956de9bbcdbf7aa3">  121</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a1fc4e6eb6995316a956de9bbcdbf7aa3" title="Diagnose unused '==' and '!=' as likely typos for '=' or '|='.">DiagnoseUnusedComparison</a>(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</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="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">bool</span> IsNotEqual, CanAssign;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1BinaryOperator.html" title="A builtin binary operation expression such as "x + y" or "x <= y".">BinaryOperator</a> *Op = dyn_cast<BinaryOperator>(E)) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">if</span> (Op->getOpcode() != <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a69f29b9100be3ced416f394df1b8387d">BO_EQ</a> && Op->getOpcode() != <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ad1f67b78e6981e7d44e0a1794432d104">BO_NE</a>)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     Loc = Op->getOperatorLoc();</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     IsNotEqual = Op->getOpcode() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ad1f67b78e6981e7d44e0a1794432d104">BO_NE</a>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     CanAssign = Op->getLHS()->IgnoreParenImpCasts()->isLValue();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXOperatorCallExpr.html" title="A call to an overloaded operator written using operator syntax.">CXXOperatorCallExpr</a> *Op = dyn_cast<CXXOperatorCallExpr>(E)) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">if</span> (Op->getOperator() != OO_EqualEqual &&</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         Op->getOperator() != OO_ExclaimEqual)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     Loc = Op->getOperatorLoc();</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     IsNotEqual = Op->getOperator() == OO_ExclaimEqual;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     CanAssign = Op->getArg(0)->IgnoreParenImpCasts()->isLValue();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">// Not a typo-prone comparison.</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="comment">// Suppress warnings when the operator, suspicious as it may be, comes from</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="comment">// a macro expansion.</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">if</span> (S.<a class="code" href="classclang_1_1Sema.html#acc411771f5b6267b2ac95c1b58979774">SourceMgr</a>.<a class="code" href="classclang_1_1SourceManager.html#a118a110590249d67d2a6a62e793dc74b" title="Tests whether the given source location represents the expansion of a macro body.">isMacroBodyExpansion</a>(Loc))</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::warn_unused_comparison)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     << (<a class="code" href="classunsigned.html">unsigned</a>)IsNotEqual << E-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</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">// If the LHS is a plausible entity to assign to, provide a fixit hint to</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="comment">// correct common typos.</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">if</span> (CanAssign) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">if</span> (IsNotEqual)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::note_inequality_comparison_to_or_assign)</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</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>(Loc, <span class="stringliteral">"|="</span>);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::note_equality_comparison_to_assign)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</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>(Loc, <span class="stringliteral">"="</span>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af484abbc5ac04f3b6ba0f47e9825116b">  167</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#af484abbc5ac04f3b6ba0f47e9825116b">Sema::DiagnoseUnusedExprResult</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1LabelStmt.html">LabelStmt</a> *Label = dyn_cast_or_null<LabelStmt>(S))</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">return</span> DiagnoseUnusedExprResult(Label->getSubStmt());</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E = dyn_cast_or_null<Expr>(<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">if</span> (!E)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</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> ExprLoc = E->IgnoreParens()->getExprLoc();</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="comment">// In most cases, we don't want to warn if the expression is written in a</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="comment">// macro body, or if the macro comes from a system header. If the offending</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">// expression is a call to a function with the warn_unused_result attribute,</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="comment">// we warn no matter the location. Because of the order in which the various</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="comment">// checks need to happen, we factor out the macro-related test here.</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordtype">bool</span> ShouldSuppress = </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       <a class="code" href="Format_8cpp.html#a8b28f9f83ac8256fbde7e45b0f874f27">SourceMgr</a>.<a class="code" href="classclang_1_1SourceManager.html#a118a110590249d67d2a6a62e793dc74b" title="Tests whether the given source location represents the expansion of a macro body.">isMacroBodyExpansion</a>(ExprLoc) ||</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       <a class="code" href="Format_8cpp.html#a8b28f9f83ac8256fbde7e45b0f874f27">SourceMgr</a>.<a class="code" href="classclang_1_1SourceManager.html#a2222d87fda8fdd794296950190702f7f" title="Returns whether Loc is expanded from a macro in a system header.">isInSystemMacro</a>(ExprLoc);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *WarnExpr;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</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="l00186"></a><span class="lineno">  186</span>   <a class="code" href="classclang_1_1SourceRange.html" title="A trival tuple used to represent a source range.">SourceRange</a> R1, R2;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">if</span> (!E->isUnusedResultAWarning(WarnExpr, Loc, R1, R2, <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>))</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">return</span>;</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">// If this is a GNU statement expression expanded from a macro, it is probably</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="comment">// unused because it is a function-like macro that can be used as either an</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="comment">// expression or statement.  Don't warn, because it is almost certainly a</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="comment">// false positive.</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordflow">if</span> (isa<StmtExpr>(E) && Loc.<a class="code" href="classclang_1_1SourceLocation.html#a83c660ad7c57096011c5f40c50b52c7d">isMacroID</a>())</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">return</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">// Okay, we have an unused result.  Depending on what the base expression is,</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="comment">// we might want to make a more specific diagnostic.  Check for one of these</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="comment">// cases now.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   <span class="keywordtype">unsigned</span> DiagID = diag::warn_unused_expr;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ExprWithCleanups.html">ExprWithCleanups</a> *Temps = dyn_cast<ExprWithCleanups>(E))</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     E = Temps->getSubExpr();</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXBindTemporaryExpr.html" title="Represents binding an expression to a temporary.">CXXBindTemporaryExpr</a> *TempExpr = dyn_cast<CXXBindTemporaryExpr>(E))</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     E = TempExpr->getSubExpr();</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="keywordflow">if</span> (<a class="code" href="SemaStmt_8cpp.html#a1fc4e6eb6995316a956de9bbcdbf7aa3" title="Diagnose unused '==' and '!=' as likely typos for '=' or '|='.">DiagnoseUnusedComparison</a>(*<span class="keyword">this</span>, E))</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   E = WarnExpr;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CallExpr.html">CallExpr</a> *CE = dyn_cast<CallExpr>(E)) {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordflow">if</span> (E->getType()->isVoidType())</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       <span class="keywordflow">return</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="comment">// If the callee has attribute pure, const, or warn_unused_result, warn with</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="comment">// a more specific message to make it clear what is happening. If the call</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="comment">// is written in a macro body, only warn if it has the warn_unused_result</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="comment">// attribute.</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1Decl.html">Decl</a> *FD = CE->getCalleeDecl()) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       <span class="keywordflow">if</span> (FD->getAttr<<a class="code" href="classclang_1_1WarnUnusedResultAttr.html">WarnUnusedResultAttr</a>>()) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_unused_result) << R1 << R2;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       <span class="keywordflow">if</span> (ShouldSuppress)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       <span class="keywordflow">if</span> (FD->getAttr<<a class="code" href="classclang_1_1PureAttr.html">PureAttr</a>>()) {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_unused_call) << R1 << R2 << <span class="stringliteral">"pure"</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       <span class="keywordflow">if</span> (FD->getAttr<<a class="code" href="classclang_1_1ConstAttr.html">ConstAttr</a>>()) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_unused_call) << R1 << R2 << <span class="stringliteral">"const"</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ShouldSuppress)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCMessageExpr.html" title="An expression that sends a message to the given Objective-C object or class.">ObjCMessageExpr</a> *ME = dyn_cast<ObjCMessageExpr>(E)) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> (getLangOpts().ObjCAutoRefCount && ME->isDelegateInitCall()) {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::err_arc_unused_init_message) << R1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCMethodDecl.html">ObjCMethodDecl</a> *MD = ME->getMethodDecl();</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">if</span> (MD && MD-><a class="code" href="classclang_1_1Decl.html#a6a041df02fad17a6fabe51af5de0ea3c">getAttr</a><<a class="code" href="classclang_1_1WarnUnusedResultAttr.html">WarnUnusedResultAttr</a>>()) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_unused_result) << R1 << R2;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1PseudoObjectExpr.html">PseudoObjectExpr</a> *POE = dyn_cast<PseudoObjectExpr>(E)) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *Source = POE->getSyntacticForm();</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">if</span> (isa<ObjCSubscriptRefExpr>(Source))</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       DiagID = diag::warn_unused_container_subscript_expr;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       DiagID = diag::warn_unused_property_expr;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXFunctionalCastExpr.html" title="Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr.type.conv]).">CXXFunctionalCastExpr</a> *FC</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                        = dyn_cast<CXXFunctionalCastExpr>(E)) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">if</span> (isa<CXXConstructExpr>(FC->getSubExpr()) ||</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         isa<CXXTemporaryObjectExpr>(FC->getSubExpr()))</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="comment">// Diagnose "(void*) blah" as a typo for "(void) blah".</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CStyleCastExpr.html">CStyleCastExpr</a> *CE = dyn_cast<CStyleCastExpr>(E)) {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <a class="code" href="classclang_1_1TypeSourceInfo.html" title="A container of type source information.">TypeSourceInfo</a> *TI = CE->getTypeInfoAsWritten();</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> T = TI-><a class="code" href="classclang_1_1TypeSourceInfo.html#affbab53588a16a2bc948f2493d93a4e2" title="Return the type wrapped by this type source info.">getType</a>();</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="comment">// We really do want to use the non-canonical type here.</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">if</span> (T == <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a485732164c40553bb323c58f5e8bf7a7">VoidPtrTy</a>) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       <a class="code" href="classclang_1_1PointerTypeLoc.html" title="Wrapper for source info for pointers.">PointerTypeLoc</a> TL = TI-><a class="code" href="classclang_1_1TypeSourceInfo.html#a51bc61879d5926193a3bb3ee1a280fee" title="Return the TypeLoc wrapper for the type source info.">getTypeLoc</a>().<a class="code" href="classclang_1_1TypeLoc.html#a9418837bde8b3c515cc00ba5b2a9818f" title="Convert to the specified TypeLoc type, asserting that this TypeLoc is of the desired type...">castAs</a><<a class="code" href="classclang_1_1PointerTypeLoc.html" title="Wrapper for source info for pointers.">PointerTypeLoc</a>>();</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_unused_voidptr)</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</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>(TL.<a class="code" href="classclang_1_1PointerTypeLoc.html#ad8eef257cc39098e1196089cff8445e6">getStarLoc</a>());</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</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="keywordflow">if</span> (E->isGLValue() && E->getType().isVolatileQualified()) {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_unused_volatile) << R1 << R2;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</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>   DiagRuntimeBehavior(Loc, 0, PDiag(DiagID) << R1 << R2);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#aac9adcb15ad7abf3888de0f1ed16d2a9">  282</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#aac9adcb15ad7abf3888de0f1ed16d2a9">Sema::ActOnStartOfCompoundStmt</a>() {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   PushCompoundScope();</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> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af066304e49fe6d8bb218853336ef6d2b">  286</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#af066304e49fe6d8bb218853336ef6d2b">Sema::ActOnFinishOfCompoundStmt</a>() {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   PopCompoundScope();</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> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a03d5fad112f5edeb760a8c20083784f2">  290</a></span> <a class="code" href="classclang_1_1sema_1_1CompoundScopeInfo.html" title="Contains information about the compound statement currently being parsed.">sema::CompoundScopeInfo</a> &<a class="code" href="classclang_1_1Sema.html#a03d5fad112f5edeb760a8c20083784f2">Sema::getCurCompoundScope</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordflow">return</span> getCurFunction()->CompoundScopes.back();</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af2ba82492f4ae86f17eac6dff9a25f76">  294</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#af2ba82492f4ae86f17eac6dff9a25f76">Sema::ActOnCompoundStmt</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> L, <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> R,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                                    <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<Stmt *></a> Elts, <span class="keywordtype">bool</span> isStmtExpr) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> NumElts = Elts.size();</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="comment">// If we're in C89 mode, check that we don't have any decls after stmts.  If</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="comment">// so, emit an extension diagnostic.</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordflow">if</span> (!getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba26ba8b0762e63747844e84a45f42ba6e">C99</a> && !getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="comment">// Note that __extension__ can be around a decl.</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordtype">unsigned</span> i = 0;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="comment">// Skip over all declarations.</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordflow">for</span> (; i != NumElts && isa<DeclStmt>(Elts[i]); ++i)</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       <span class="comment">/*empty*/</span>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="comment">// We found the end of the list or a statement.  Scan for another declstmt.</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordflow">for</span> (; i != NumElts && !isa<DeclStmt>(Elts[i]); ++i)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       <span class="comment">/*empty*/</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordflow">if</span> (i != NumElts) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <a class="code" href="classclang_1_1Decl.html">Decl</a> *D = *cast<DeclStmt>(Elts[i])->decl_begin();</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(D-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), diag::ext_mixed_decls_code);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   <span class="comment">// Warn about unused expressions in statements.</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumElts; ++i) {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="comment">// Ignore statements that are last in a statement expression.</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordflow">if</span> (isStmtExpr && i == NumElts - 1)</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     DiagnoseUnusedExprResult(Elts[i]);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   }</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="comment">// Check for suspicious empty body (null statement) in `for' and `while'</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="comment">// statements.  Don't do anything for template instantiations, this just adds</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   <span class="comment">// noise.</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordflow">if</span> (NumElts != 0 && !CurrentInstantiationScope &&</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       getCurCompoundScope().HasEmptyLoopBodies) {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumElts - 1; ++i)</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       DiagnoseEmptyLoopBody(Elts[i], Elts[i + 1]);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   }</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>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1CompoundStmt.html">CompoundStmt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, Elts, L, R));</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l00338"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a86192e6c491c809800ade61163b474aa">  338</a></span> <a class="code" href="classclang_1_1Sema.html#a86192e6c491c809800ade61163b474aa">Sema::ActOnCaseStmt</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> CaseLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHSVal,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</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> DotDotDotLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHSVal,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</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> ColonLoc) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   assert((LHSVal != 0) && <span class="stringliteral">"missing expression in case statement"</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   <span class="keywordflow">if</span> (getCurFunction()->SwitchStack.empty()) {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CaseLoc, diag::err_case_not_in_switch);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   }</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>   <span class="keywordflow">if</span> (!getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a>) {</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="comment">// C99 6.8.4.2p3: The expression shall be an integer constant.</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="comment">// However, GCC allows any evaluatable integer expression.</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <span class="keywordflow">if</span> (!LHSVal-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() && !LHSVal-><a class="code" href="classclang_1_1Expr.html#a34f1652a9072dfd3c7119d23e1a14fa5">isValueDependent</a>()) {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       LHSVal = VerifyIntegerConstantExpression(LHSVal).take();</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       <span class="keywordflow">if</span> (!LHSVal)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="comment">// GCC extension: The expression shall be an integer constant.</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">if</span> (RHSVal && !RHSVal-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() && !RHSVal-><a class="code" href="classclang_1_1Expr.html#a34f1652a9072dfd3c7119d23e1a14fa5">isValueDependent</a>()) {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       RHSVal = VerifyIntegerConstantExpression(RHSVal).take();</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       <span class="comment">// Recover from an error by just forgetting about it.</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   LHSVal = ActOnFinishFullExpr(LHSVal, LHSVal-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), <span class="keyword">false</span>,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                getLangOpts().CPlusPlus11).take();</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <span class="keywordflow">if</span> (RHSVal)</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     RHSVal = ActOnFinishFullExpr(RHSVal, RHSVal-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), <span class="keyword">false</span>,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                                  getLangOpts().CPlusPlus11).take();</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a> *CS = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a>(LHSVal, RHSVal, CaseLoc, DotDotDotLoc,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                                         ColonLoc);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   getCurFunction()->SwitchStack.back()->addSwitchCase(CS);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   <span class="keywordflow">return</span> Owned(CS);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment"></span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="comment">/// ActOnCaseStmtBody - This installs a statement as the body of a case.</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#add5413b625a7e3d025eb6b21af0c14fe">  378</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#add5413b625a7e3d025eb6b21af0c14fe" title="ActOnCaseStmtBody - This installs a statement as the body of a case.">Sema::ActOnCaseStmtBody</a>(<a class="code" href="classclang_1_1Stmt.html">Stmt</a> *<a class="code" href="namespaceclang_1_1ast__matchers.html#a286779ce0aa6b6ba862c1f26a9495fbb" title="Matches case statements inside switch statements.">caseStmt</a>, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *SubStmt) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   DiagnoseUnusedExprResult(SubStmt);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a> *CS = <span class="keyword">static_cast<</span><a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a>*<span class="keyword">></span>(<a class="code" href="namespaceclang_1_1ast__matchers.html#a286779ce0aa6b6ba862c1f26a9495fbb" title="Matches case statements inside switch statements.">caseStmt</a>);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   CS-><a class="code" href="classclang_1_1CaseStmt.html#ab9ab28a6b64c507f45f295fdf9578333">setSubStmt</a>(SubStmt);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l00386"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af8ccd3d8bfc19ae5f33f6fc954e57a37">  386</a></span> <a class="code" href="classclang_1_1Sema.html#af8ccd3d8bfc19ae5f33f6fc954e57a37">Sema::ActOnDefaultStmt</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> DefaultLoc, <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> ColonLoc,</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>                        <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *SubStmt, <a class="code" href="classclang_1_1Scope.html">Scope</a> *CurScope) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   DiagnoseUnusedExprResult(SubStmt);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   <span class="keywordflow">if</span> (getCurFunction()->SwitchStack.empty()) {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(DefaultLoc, diag::err_default_not_in_switch);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     <span class="keywordflow">return</span> Owned(SubStmt);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   <a class="code" href="classclang_1_1DefaultStmt.html">DefaultStmt</a> *DS = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1DefaultStmt.html">DefaultStmt</a>(DefaultLoc, ColonLoc, SubStmt);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   getCurFunction()->SwitchStack.back()->addSwitchCase(DS);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordflow">return</span> Owned(DS);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> }</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l00401"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af63f81b62601e1bd8c10172763d37583">  401</a></span> <a class="code" href="classclang_1_1Sema.html#af63f81b62601e1bd8c10172763d37583">Sema::ActOnLabelStmt</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> IdentLoc, <a class="code" href="classclang_1_1LabelDecl.html">LabelDecl</a> *TheDecl,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</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> ColonLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *SubStmt) {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   <span class="comment">// If the label was multiply defined, reject it now.</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   <span class="keywordflow">if</span> (TheDecl-><a class="code" href="classclang_1_1LabelDecl.html#a13c54288572cc3bb5db92c857099fd27">getStmt</a>()) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(IdentLoc, diag::err_redefinition_of_label) << TheDecl-><a class="code" href="classclang_1_1NamedDecl.html#a1e3e90455be89bb5c7c23640cbbd7153">getDeclName</a>();</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(TheDecl-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), diag::note_previous_definition);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="keywordflow">return</span> Owned(SubStmt);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   <span class="comment">// Otherwise, things are good.  Fill in the declaration and return it.</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   <a class="code" href="classclang_1_1LabelStmt.html">LabelStmt</a> *LS = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1LabelStmt.html">LabelStmt</a>(IdentLoc, TheDecl, SubStmt);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   TheDecl-><a class="code" href="classclang_1_1LabelDecl.html#a8f31bdd061310ae1a8dcdd19e5a90c86">setStmt</a>(LS);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="keywordflow">if</span> (!TheDecl-><a class="code" href="classclang_1_1LabelDecl.html#a5712901d7e36668931b08a0a3e924d50">isGnuLocal</a>()) {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     TheDecl-><a class="code" href="classclang_1_1LabelDecl.html#a5508c11bb007c2b936564252b731cdd2">setLocStart</a>(IdentLoc);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     TheDecl-><a class="code" href="classclang_1_1Decl.html#ab9567d0129af38839ace3ddbf21c0ae1">setLocation</a>(IdentLoc);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <span class="keywordflow">return</span> Owned(LS);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> }</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a6eee00290bca28f588606e886e8c0064">  420</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a6eee00290bca28f588606e886e8c0064">Sema::ActOnAttributedStmt</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> AttrLoc,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                      <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<const Attr*></a> Attrs,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                      <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *SubStmt) {</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="comment">// Fill in the declaration and return it.</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   <a class="code" href="classclang_1_1AttributedStmt.html" title="Represents an attribute applied to a statement.">AttributedStmt</a> *LS = <a class="code" href="classclang_1_1AttributedStmt.html#ae2c65571774830ec3e82a7aa402aa69e">AttributedStmt::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, AttrLoc, Attrs, SubStmt);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   <span class="keywordflow">return</span> Owned(LS);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> }</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l00429"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a758ccd9e4a81f56b35d8ccb27a26d23e">  429</a></span> <a class="code" href="classclang_1_1Sema.html#a758ccd9e4a81f56b35d8ccb27a26d23e">Sema::ActOnIfStmt</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> IfLoc, <a class="code" href="classclang_1_1Sema_1_1FullExprArg.html">FullExprArg</a> CondVal, <a class="code" href="classclang_1_1Decl.html">Decl</a> *CondVar,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                   <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *thenStmt, <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> ElseLoc,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                   <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *elseStmt) {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <span class="comment">// If the condition was invalid, discard the if statement.  We could recover</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <span class="comment">// better by replacing it with a valid expr, but don't do that yet.</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   <span class="keywordflow">if</span> (!CondVal.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#ab95e0353173cad65a006440cf0555b2e">get</a>() && !CondVar) {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     getCurFunction()->setHasDroppedStmt();</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</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> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> CondResult(CondVal.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#a38c0bc42411ce4cbd001e69eb5abd810">release</a>());</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *ConditionVar = 0;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   <span class="keywordflow">if</span> (CondVar) {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     ConditionVar = cast<VarDecl>(CondVar);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     CondResult = CheckConditionVariable(ConditionVar, IfLoc, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordflow">if</span> (CondResult.isInvalid())</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   <a class="code" href="classclang_1_1Expr.html">Expr</a> *ConditionExpr = CondResult.takeAs<<a class="code" href="classclang_1_1Expr.html">Expr</a>>();</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="keywordflow">if</span> (!ConditionExpr)</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</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>   DiagnoseUnusedExprResult(thenStmt);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   <span class="keywordflow">if</span> (!elseStmt) {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     DiagnoseEmptyStmtBody(ConditionExpr-><a class="code" href="classclang_1_1Stmt.html#acdd36e45abff718e8134873f9b7448ef">getLocEnd</a>(), thenStmt,</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                           diag::warn_empty_if_body);</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> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   DiagnoseUnusedExprResult(elseStmt);</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>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1IfStmt.html">IfStmt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, IfLoc, ConditionVar, ConditionExpr,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                     thenStmt, ElseLoc, elseStmt));</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> }</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment"></span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="comment">/// ConvertIntegerToTypeWarnOnOverflow - Convert the specified APInt to have</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="comment">/// the specified width and sign.  If an overflow occurs, detect it and emit</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="comment">/// the specified diagnostic.</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a890c3085912a5cd346f656592ac8e520">  468</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#a890c3085912a5cd346f656592ac8e520">Sema::ConvertIntegerToTypeWarnOnOverflow</a>(llvm::APSInt &Val,</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                                               <span class="keywordtype">unsigned</span> NewWidth, <span class="keywordtype">bool</span> NewSign,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</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="l00471"></a><span class="lineno">  471</span>                                               <span class="keywordtype">unsigned</span> DiagID) {</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   <span class="comment">// Perform a conversion to the promoted condition type if needed.</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordflow">if</span> (NewWidth > Val.getBitWidth()) {</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="comment">// If this is an extension, just do it.</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     Val = Val.extend(NewWidth);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     Val.setIsSigned(NewSign);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="comment">// If the input was signed and negative and the output is</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="comment">// unsigned, don't bother to warn: this is implementation-defined</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="comment">// behavior.</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="comment">// FIXME: Introduce a second, default-ignored warning for this case?</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (NewWidth < Val.getBitWidth()) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     <span class="comment">// If this is a truncation, check for overflow.</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     llvm::APSInt ConvVal(Val);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     ConvVal = ConvVal.trunc(NewWidth);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     ConvVal.setIsSigned(NewSign);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     ConvVal = ConvVal.extend(Val.getBitWidth());</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     ConvVal.setIsSigned(Val.isSigned());</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordflow">if</span> (ConvVal != Val)</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, DiagID) << Val.toString(10) << ConvVal.toString(10);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="comment">// Regardless of whether a diagnostic was emitted, really do the</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="comment">// truncation.</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     Val = Val.trunc(NewWidth);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     Val.setIsSigned(NewSign);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (NewSign != Val.isSigned()) {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="comment">// Convert the sign to match the sign of the condition.  This can cause</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="comment">// overflow as well: unsigned(INTMIN)</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     <span class="comment">// We don't diagnose this overflow, because it is implementation-defined</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="comment">// behavior.</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="comment">// FIXME: Introduce a second, default-ignored warning for this case?</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     llvm::APSInt OldVal(Val);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     Val.setIsSigned(NewSign);</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> }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <span class="keyword">struct </span>CaseCompareFunctor {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> std::pair<llvm::APSInt, CaseStmt*> &LHS,</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                     <span class="keyword">const</span> llvm::APSInt &RHS) {</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>       <span class="keywordflow">return</span> LHS.first < RHS;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     }</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> std::pair<llvm::APSInt, CaseStmt*> &LHS,</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                     <span class="keyword">const</span> std::pair<llvm::APSInt, CaseStmt*> &RHS) {</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       <span class="keywordflow">return</span> LHS.first < RHS.first;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> llvm::APSInt &LHS,</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                     <span class="keyword">const</span> std::pair<llvm::APSInt, CaseStmt*> &RHS) {</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       <span class="keywordflow">return</span> LHS < RHS.first;</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>   };</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="comment"></span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment">/// CmpCaseVals - Comparison predicate for sorting case values.</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a16c68dd25f5264ba74657904528ca441">  526</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a16c68dd25f5264ba74657904528ca441">CmpCaseVals</a>(<span class="keyword">const</span> std::pair<llvm::APSInt, CaseStmt*>& lhs,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                         <span class="keyword">const</span> std::pair<llvm::APSInt, CaseStmt*>& rhs) {</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <span class="keywordflow">if</span> (lhs.first < rhs.first)</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   <span class="keywordflow">if</span> (lhs.first == rhs.first &&</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>       lhs.second->getCaseLoc().getRawEncoding()</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>        < rhs.second->getCaseLoc().getRawEncoding())</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> }</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment"></span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="comment">/// CmpEnumVals - Comparison predicate for sorting enumeration values.</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a02dace99092bb1d7a1aa59ff6bc353be">  540</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a02dace99092bb1d7a1aa59ff6bc353be">CmpEnumVals</a>(<span class="keyword">const</span> std::pair<llvm::APSInt, EnumConstantDecl*>& lhs,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                         <span class="keyword">const</span> std::pair<llvm::APSInt, EnumConstantDecl*>& rhs)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> {</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   <span class="keywordflow">return</span> lhs.first < rhs.first;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> }</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="comment"></span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="comment">/// EqEnumVals - Comparison preficate for uniqing enumeration values.</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a476f2e4ef0116ec6b6d9d1dd0bd78cbe">  548</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a476f2e4ef0116ec6b6d9d1dd0bd78cbe">EqEnumVals</a>(<span class="keyword">const</span> std::pair<llvm::APSInt, EnumConstantDecl*>& lhs,</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                        <span class="keyword">const</span> std::pair<llvm::APSInt, EnumConstantDecl*>& rhs)</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> {</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   <span class="keywordflow">return</span> lhs.first == rhs.first;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> }</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="comment"></span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="comment">/// GetTypeBeforeIntegralPromotion - Returns the pre-promotion type of</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment">/// potentially integral-promoted expression @p expr.</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#ae668956b12fd336f7f54d2783045e6b1">  556</a></span> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classclang_1_1QualType.html">QualType</a> <a class="code" href="SemaStmt_8cpp.html#ae668956b12fd336f7f54d2783045e6b1">GetTypeBeforeIntegralPromotion</a>(<a class="code" href="classclang_1_1Expr.html">Expr</a> *&<a class="code" href="namespaceclang_1_1ast__matchers.html#a62d0b4c2a483d355a4d740ded606188f" title="Matches expressions.">expr</a>) {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1ExprWithCleanups.html">ExprWithCleanups</a> *cleanups = dyn_cast<ExprWithCleanups>(expr))</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     expr = cleanups->getSubExpr();</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   <span class="keywordflow">while</span> (<a class="code" href="classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a> *impcast = dyn_cast<ImplicitCastExpr>(expr)) {</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="keywordflow">if</span> (impcast->getCastKind() != <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cad71cad80dd5957bfc6e8aa8f3a36f814">CK_IntegralCast</a>) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     expr = impcast->getSubExpr();</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>   }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   <span class="keywordflow">return</span> expr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> }</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l00567"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a04512de21d1233e0d90d6d2098b8c315">  567</a></span> <a class="code" href="classclang_1_1Sema.html#a04512de21d1233e0d90d6d2098b8c315">Sema::ActOnStartOfSwitchStmt</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> SwitchLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Cond,</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                              <a class="code" href="classclang_1_1Decl.html">Decl</a> *CondVar) {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> CondResult;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *ConditionVar = 0;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   <span class="keywordflow">if</span> (CondVar) {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     ConditionVar = cast<VarDecl>(CondVar);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     CondResult = CheckConditionVariable(ConditionVar, <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>(), <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="keywordflow">if</span> (CondResult.isInvalid())</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     Cond = CondResult.release();</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   }</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   <span class="keywordflow">if</span> (!Cond)</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="keyword">class </span>SwitchConvertDiagnoser : <span class="keyword">public</span> <a class="code" href="classclang_1_1Sema_1_1ICEConvertDiagnoser.html">ICEConvertDiagnoser</a> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <a class="code" href="classclang_1_1Expr.html">Expr</a> *Cond;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     SwitchConvertDiagnoser(<a class="code" href="classclang_1_1Expr.html">Expr</a> *Cond)</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         : <a class="code" href="classclang_1_1Sema_1_1ICEConvertDiagnoser.html">ICEConvertDiagnoser</a>(<span class="comment">/*AllowScopedEnumerations*/</span><span class="keyword">true</span>, <span class="keyword">false</span>, <span class="keyword">true</span>),</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>           Cond(Cond) {}</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> diagnoseNotInt(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</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> Loc,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                                                  <a class="code" href="classclang_1_1QualType.html">QualType</a> T) {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>       <span class="keywordflow">return</span> S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::err_typecheck_statement_requires_integer) << T;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     }</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <span class="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> diagnoseIncomplete(</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         <a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <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_1QualType.html">QualType</a> T) {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>       <span class="keywordflow">return</span> S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::err_switch_incomplete_class_type)</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                << T << Cond-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</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="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> diagnoseExplicitConv(</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>         <a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <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_1QualType.html">QualType</a> T, <a class="code" href="classclang_1_1QualType.html">QualType</a> ConvTy) {</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>       <span class="keywordflow">return</span> S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::err_switch_explicit_conversion) << T << ConvTy;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> noteExplicitConv(</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>         <a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <a class="code" href="classclang_1_1CXXConversionDecl.html" title="Represents a C++ conversion function within a class.">CXXConversionDecl</a> *Conv, <a class="code" href="classclang_1_1QualType.html">QualType</a> ConvTy) {</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>       <span class="keywordflow">return</span> S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Conv-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), diag::note_switch_conversion)</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>         << ConvTy-><a class="code" href="classclang_1_1Type.html#a1b8eefccd216afd2ff89e2fa71f9f089">isEnumeralType</a>() << ConvTy;</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> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     <span class="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> diagnoseAmbiguous(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <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="l00615"></a><span class="lineno">  615</span>                                                     <a class="code" href="classclang_1_1QualType.html">QualType</a> T) {</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>       <span class="keywordflow">return</span> S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::err_switch_multiple_conversions) << T;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     <span class="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> noteAmbiguous(</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         <a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <a class="code" href="classclang_1_1CXXConversionDecl.html" title="Represents a C++ conversion function within a class.">CXXConversionDecl</a> *Conv, <a class="code" href="classclang_1_1QualType.html">QualType</a> ConvTy) {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       <span class="keywordflow">return</span> S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Conv-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), diag::note_switch_conversion)</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       << ConvTy-><a class="code" href="classclang_1_1Type.html#a1b8eefccd216afd2ff89e2fa71f9f089">isEnumeralType</a>() << ConvTy;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     <span class="keyword">virtual</span> <a class="code" href="classclang_1_1Sema_1_1SemaDiagnosticBuilder.html" title="Helper class that creates diagnostics with optional template instantiation stacks.">SemaDiagnosticBuilder</a> diagnoseConversion(</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         <a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <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_1QualType.html">QualType</a> T, <a class="code" href="classclang_1_1QualType.html">QualType</a> ConvTy) {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>       llvm_unreachable(<span class="stringliteral">"conversion functions are permitted"</span>);</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   } SwitchDiagnoser(Cond);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   CondResult =</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>       PerformContextualImplicitConversion(SwitchLoc, Cond, SwitchDiagnoser);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   <span class="keywordflow">if</span> (CondResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   Cond = CondResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</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="comment">// C99 6.8.4.2p5 - Integer promotions are performed on the controlling expr.</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   CondResult = UsualUnaryConversions(Cond);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   <span class="keywordflow">if</span> (CondResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   Cond = CondResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   <span class="keywordflow">if</span> (!CondVar) {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     CondResult = ActOnFinishFullExpr(Cond, SwitchLoc);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     <span class="keywordflow">if</span> (CondResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     Cond = CondResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</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>   getCurFunction()->setHasBranchIntoScope();</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   <a class="code" href="classclang_1_1SwitchStmt.html">SwitchStmt</a> *SS = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1SwitchStmt.html">SwitchStmt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, ConditionVar, Cond);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   getCurFunction()->SwitchStack.push_back(SS);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   <span class="keywordflow">return</span> Owned(SS);</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> </div>
+<div class="line"><a name="l00655"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">  655</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">AdjustAPSInt</a>(llvm::APSInt &Val, <span class="keywordtype">unsigned</span> BitWidth, <span class="keywordtype">bool</span> IsSigned) {</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>   <span class="keywordflow">if</span> (Val.getBitWidth() < BitWidth)</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     Val = Val.extend(BitWidth);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Val.getBitWidth() > BitWidth)</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     Val = Val.trunc(BitWidth);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   Val.setIsSigned(IsSigned);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> }</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l00664"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a5aa15c1b42fdafa986327244cf73ac4f">  664</a></span> <a class="code" href="classclang_1_1Sema.html#a5aa15c1b42fdafa986327244cf73ac4f">Sema::ActOnFinishSwitchStmt</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> SwitchLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Switch,</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                             <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *BodyStmt) {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>   <a class="code" href="classclang_1_1SwitchStmt.html">SwitchStmt</a> *SS = cast<SwitchStmt>(Switch);</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   assert(SS == getCurFunction()->SwitchStack.back() &&</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>          <span class="stringliteral">"switch stack missing push/pop!"</span>);</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   SS-><a class="code" href="classclang_1_1SwitchStmt.html#a8b6207f80c8066805dbbac12ff755ca6">setBody</a>(BodyStmt, SwitchLoc);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   getCurFunction()->SwitchStack.pop_back();</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>   <a class="code" href="classclang_1_1Expr.html">Expr</a> *CondExpr = SS-><a class="code" href="classclang_1_1SwitchStmt.html#a7404791c1f6c98cca9a60f681c6f9d32">getCond</a>();</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   <span class="keywordflow">if</span> (!CondExpr) <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> CondType = CondExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   <a class="code" href="classclang_1_1Expr.html">Expr</a> *CondExprBeforePromotion = CondExpr;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> CondTypeBeforePromotion =</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>       <a class="code" href="SemaStmt_8cpp.html#ae668956b12fd336f7f54d2783045e6b1">GetTypeBeforeIntegralPromotion</a>(CondExprBeforePromotion);</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   <span class="comment">// C++ 6.4.2.p2:</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   <span class="comment">// Integral promotions are performed (on the switch condition).</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   <span class="comment">// A case value unrepresentable by the original switch condition</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   <span class="comment">// type (before the promotion) doesn't make sense, even when it can</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   <span class="comment">// be represented by the promoted type.  Therefore we need to find</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   <span class="comment">// the pre-promotion type of the switch condition.</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   <span class="keywordflow">if</span> (!CondExpr-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()) {</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     <span class="comment">// We have already converted the expression to an integral or enumeration</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="comment">// type, when we started the switch statement. If we don't have an</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     <span class="comment">// appropriate type now, just return an error.</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <span class="keywordflow">if</span> (!CondType-><a class="code" href="classclang_1_1Type.html#afa340c23f27a4a28f20bdf52d69a0a4c" title="Determine whether this type is an integral or enumeration type.">isIntegralOrEnumerationType</a>())</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     <span class="keywordflow">if</span> (CondExpr-><a class="code" href="classclang_1_1Expr.html#a161381479db6c9ec01ee300954de8d2c">isKnownToHaveBooleanValue</a>()) {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>       <span class="comment">// switch(bool_expr) {...} is often a programmer error, e.g.</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>       <span class="comment">//   switch(n && mask) { ... }  // Doh - should be "n & mask".</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>       <span class="comment">// One can always use an if statement instead of switch(bool_expr).</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(SwitchLoc, diag::warn_bool_switch_condition)</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>           << CondExpr-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   }</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">// Get the bitwidth of the switched-on value before promotions.  We must</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="comment">// convert the integer case values to this width before comparison.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="keywordtype">bool</span> HasDependentValue</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     = CondExpr-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() || CondExpr-><a class="code" href="classclang_1_1Expr.html#a34f1652a9072dfd3c7119d23e1a14fa5">isValueDependent</a>();</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordtype">unsigned</span> CondWidth</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     = HasDependentValue ? 0 : <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a80afaaf9a6583ac2fa33734057b8220b">getIntWidth</a>(CondTypeBeforePromotion);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   <span class="keywordtype">bool</span> CondIsSigned</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     = CondTypeBeforePromotion-><a class="code" href="classclang_1_1Type.html#ac1a93888d84731955cd5e95d6510aea6">isSignedIntegerOrEnumerationType</a>();</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   <span class="comment">// Accumulate all of the case values in a vector so that we can sort them</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   <span class="comment">// and detect duplicates.  This vector contains the APInt for the case after</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   <span class="comment">// it has been converted to the condition type.</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   <span class="keyword">typedef</span> <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<llvm::APSInt, CaseStmt*></a>, 64> CaseValsTy;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   CaseValsTy CaseVals;</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="comment">// Keep track of any GNU case ranges we see.  The APSInt is the low value.</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="keyword">typedef</span> std::vector<std::pair<llvm::APSInt, CaseStmt*> > CaseRangesTy;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   CaseRangesTy CaseRanges;</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   <a class="code" href="classclang_1_1DefaultStmt.html">DefaultStmt</a> *TheDefaultStmt = 0;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   <span class="keywordtype">bool</span> CaseListIsErroneous = <span class="keyword">false</span>;</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>   <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1SwitchCase.html">SwitchCase</a> *SC = SS-><a class="code" href="classclang_1_1SwitchStmt.html#ace9b2bce71bc2eb328253001c230f011">getSwitchCaseList</a>(); SC && !HasDependentValue;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>        SC = SC-><a class="code" href="classclang_1_1SwitchCase.html#ac260de1f5de7d9e5c5cba896d7f2813f">getNextSwitchCase</a>()) {</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>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DefaultStmt.html">DefaultStmt</a> *DS = dyn_cast<DefaultStmt>(SC)) {</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>       <span class="keywordflow">if</span> (TheDefaultStmt) {</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(DS->getDefaultLoc(), diag::err_multiple_default_labels_defined);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(TheDefaultStmt-><a class="code" href="classclang_1_1DefaultStmt.html#aaa9aaefcc23c3e6b64f4341e39885271">getDefaultLoc</a>(), diag::note_duplicate_case_prev);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>         <span class="comment">// FIXME: Remove the default statement from the switch block so that</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>         <span class="comment">// we'll return a valid AST.  This requires recursing down the AST and</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>         <span class="comment">// finding it, not something we are set up to do right now.  For now,</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>         <span class="comment">// just lop the entire switch stmt out of the AST.</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>         CaseListIsErroneous = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>       }</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>       TheDefaultStmt = DS;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>       <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a> *CS = cast<CaseStmt>(SC);</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>       <a class="code" href="classclang_1_1Expr.html">Expr</a> *Lo = CS-><a class="code" href="classclang_1_1CaseStmt.html#a8188cfacff6e4d7aaeb709a5a4a80a9e">getLHS</a>();</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>       <span class="keywordflow">if</span> (Lo->isTypeDependent() || Lo->isValueDependent()) {</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         HasDependentValue = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>       }</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>       llvm::APSInt LoVal;</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">if</span> (getLangOpts().CPlusPlus11) {</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>         <span class="comment">// C++11 [stmt.switch]p2: the constant-expression shall be a converted</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>         <span class="comment">// constant expression of the promoted type of the switch condition.</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ConvLo =</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>           CheckConvertedConstantExpression(Lo, CondType, LoVal, CCEK_CaseValue);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>         <span class="keywordflow">if</span> (ConvLo.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>           CaseListIsErroneous = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>         }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         Lo = ConvLo.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>         <span class="comment">// We already verified that the expression has a i-c-e value (C99</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         <span class="comment">// 6.8.4.2p3) - get that value now.</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         LoVal = Lo-><a class="code" href="classclang_1_1Expr.html#a9a303252fadd3163f7349daa10955aa4">EvaluateKnownConstInt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <span class="comment">// If the LHS is not the same type as the condition, insert an implicit</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <span class="comment">// cast.</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>         Lo = DefaultLvalueConversion(Lo).take();</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         Lo = ImpCastExprToType(Lo, CondType, <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cad71cad80dd5957bfc6e8aa8f3a36f814">CK_IntegralCast</a>).take();</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>       }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>       <span class="comment">// Convert the value to the same width/sign as the condition had prior to</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>       <span class="comment">// integral promotions.</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>       <span class="comment">//</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>       <span class="comment">// FIXME: This causes us to reject valid code:</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>       <span class="comment">//   switch ((char)c) { case 256: case 0: return 0; }</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>       <span class="comment">// Here we claim there is a duplicated condition value, but there is not.</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>       ConvertIntegerToTypeWarnOnOverflow(LoVal, CondWidth, CondIsSigned,</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                                          Lo->getLocStart(),</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>                                          diag::warn_case_value_overflow);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>       CS-><a class="code" href="classclang_1_1CaseStmt.html#ab652428bf4723eb277c150507c6ee551">setLHS</a>(Lo);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>       <span class="comment">// If this is a case range, remember it in CaseRanges, otherwise CaseVals.</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>       <span class="keywordflow">if</span> (CS-><a class="code" href="classclang_1_1CaseStmt.html#a96cfe2aca9a2248a0f493f9e172de2e1">getRHS</a>()) {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         <span class="keywordflow">if</span> (CS-><a class="code" href="classclang_1_1CaseStmt.html#a96cfe2aca9a2248a0f493f9e172de2e1">getRHS</a>()-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() ||</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>             CS-><a class="code" href="classclang_1_1CaseStmt.html#a96cfe2aca9a2248a0f493f9e172de2e1">getRHS</a>()-><a class="code" href="classclang_1_1Expr.html#a34f1652a9072dfd3c7119d23e1a14fa5">isValueDependent</a>()) {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>           HasDependentValue = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         }</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         CaseRanges.push_back(std::make_pair(LoVal, CS));</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>       } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         CaseVals.push_back(std::make_pair(LoVal, CS));</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   }</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>   <span class="keywordflow">if</span> (!HasDependentValue) {</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="comment">// If we don't have a default statement, check whether the</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="comment">// condition is constant.</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     llvm::APSInt ConstantCondValue;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordtype">bool</span> HasConstantCond = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordflow">if</span> (!HasDependentValue && !TheDefaultStmt) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>       HasConstantCond</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         = CondExprBeforePromotion-><a class="code" href="classclang_1_1Expr.html#aea5aa4f172677bf59f1a149ee1513c9c">EvaluateAsInt</a>(ConstantCondValue, <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>                                                  <a class="code" href="classclang_1_1Expr.html#a23b0a4ca516270db2d6f6337c3e9b08aa4a1fd43d748564539beecb04f16530c8">Expr::SE_AllowSideEffects</a>);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>       assert(!HasConstantCond ||</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>              (ConstantCondValue.getBitWidth() == CondWidth &&</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>               ConstantCondValue.isSigned() == CondIsSigned));</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     }</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="keywordtype">bool</span> ShouldCheckConstantCond = HasConstantCond;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     <span class="comment">// Sort all the scalar case values so we can easily detect duplicates.</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     std::stable_sort(CaseVals.begin(), CaseVals.end(), <a class="code" href="SemaStmt_8cpp.html#a16c68dd25f5264ba74657904528ca441">CmpCaseVals</a>);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="keywordflow">if</span> (!CaseVals.empty()) {</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = CaseVals.size(); i != e; ++i) {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>         <span class="keywordflow">if</span> (ShouldCheckConstantCond &&</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>             CaseVals[i].first == ConstantCondValue)</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>           ShouldCheckConstantCond = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>         <span class="keywordflow">if</span> (i != 0 && CaseVals[i].first == CaseVals[i-1].first) {</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>           <span class="comment">// If we have a duplicate, report it.</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>           <span class="comment">// First, determine if either case value has a name</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>           StringRef PrevString, CurrString;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>           <a class="code" href="classclang_1_1Expr.html">Expr</a> *PrevCase = CaseVals[i-1].second->getLHS()-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>();</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>           <a class="code" href="classclang_1_1Expr.html">Expr</a> *CurrCase = CaseVals[i].second->getLHS()-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>();</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>           <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DeclRef = dyn_cast<DeclRefExpr>(PrevCase)) {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>             PrevString = DeclRef->getDecl()->getName();</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>           }</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>           <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DeclRef = dyn_cast<DeclRefExpr>(CurrCase)) {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>             CurrString = DeclRef->getDecl()->getName();</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>           }</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>           <a class="code" href="classllvm_1_1SmallString.html">SmallString<16></a> CaseValStr;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>           CaseVals[i-1].first.toString(CaseValStr);</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="keywordflow">if</span> (PrevString == CurrString)</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>             <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CaseVals[i].second->getLHS()->getLocStart(),</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                  diag::err_duplicate_case) <<</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>                  (PrevString.empty() ? CaseValStr.str() : PrevString);</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>             <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CaseVals[i].second->getLHS()->getLocStart(),</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                  diag::err_duplicate_case_differing_expr) <<</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>                  (PrevString.empty() ? CaseValStr.str() : PrevString) <<</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>                  (CurrString.empty() ? CaseValStr.str() : CurrString) <<</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>                  CaseValStr;</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>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CaseVals[i-1].second->getLHS()->getLocStart(),</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>                diag::note_duplicate_case_prev);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>           <span class="comment">// FIXME: We really want to remove the bogus case stmt from the</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>           <span class="comment">// substmt, but we have no way to do this right now.</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>           CaseListIsErroneous = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         }</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>     }</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     <span class="comment">// Detect duplicate case ranges, which usually don't exist at all in</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     <span class="comment">// the first place.</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     <span class="keywordflow">if</span> (!CaseRanges.empty()) {</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>       <span class="comment">// Sort all the case ranges by their low value so we can easily detect</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>       <span class="comment">// overlaps between ranges.</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>       std::stable_sort(CaseRanges.begin(), CaseRanges.end());</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>       <span class="comment">// Scan the ranges, computing the high values and removing empty ranges.</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>       std::vector<llvm::APSInt> HiVals;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = CaseRanges.size(); i != e; ++i) {</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>         llvm::APSInt &LoVal = CaseRanges[i].first;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>         <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a> *CR = CaseRanges[i].second;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         <a class="code" href="classclang_1_1Expr.html">Expr</a> *Hi = CR-><a class="code" href="classclang_1_1CaseStmt.html#a96cfe2aca9a2248a0f493f9e172de2e1">getRHS</a>();</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>         llvm::APSInt HiVal;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>         <span class="keywordflow">if</span> (getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba306744f6eb6433073e27523a5ed63184">CPlusPlus11</a>) {</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>           <span class="comment">// C++11 [stmt.switch]p2: the constant-expression shall be a converted</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>           <span class="comment">// constant expression of the promoted type of the switch condition.</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>           <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ConvHi =</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>             CheckConvertedConstantExpression(Hi, CondType, HiVal,</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>                                              CCEK_CaseValue);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>           <span class="keywordflow">if</span> (ConvHi.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>             CaseListIsErroneous = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>           }</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>           Hi = ConvHi.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>           HiVal = Hi-><a class="code" href="classclang_1_1Expr.html#a9a303252fadd3163f7349daa10955aa4">EvaluateKnownConstInt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>           <span class="comment">// If the RHS is not the same type as the condition, insert an</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>           <span class="comment">// implicit cast.</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>           Hi = DefaultLvalueConversion(Hi).take();</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>           Hi = ImpCastExprToType(Hi, CondType, <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cad71cad80dd5957bfc6e8aa8f3a36f814">CK_IntegralCast</a>).take();</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>         }</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>         <span class="comment">// Convert the value to the same width/sign as the condition.</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>         ConvertIntegerToTypeWarnOnOverflow(HiVal, CondWidth, CondIsSigned,</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                                            Hi-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(),</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>                                            diag::warn_case_value_overflow);</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         CR-><a class="code" href="classclang_1_1CaseStmt.html#af92589f1641daba89bc658792a4c81f1">setRHS</a>(Hi);</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         <span class="comment">// If the low value is bigger than the high value, the case is empty.</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>         <span class="keywordflow">if</span> (LoVal > HiVal) {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CR-><a class="code" href="classclang_1_1CaseStmt.html#a8188cfacff6e4d7aaeb709a5a4a80a9e">getLHS</a>()-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(), diag::warn_case_empty_range)</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>(CR-><a class="code" href="classclang_1_1CaseStmt.html#a8188cfacff6e4d7aaeb709a5a4a80a9e">getLHS</a>()-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(),</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                            Hi-><a class="code" href="classclang_1_1Stmt.html#acdd36e45abff718e8134873f9b7448ef">getLocEnd</a>());</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>           CaseRanges.erase(CaseRanges.begin()+i);</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>           --i, --e;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>         }</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         <span class="keywordflow">if</span> (ShouldCheckConstantCond &&</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>             LoVal <= ConstantCondValue &&</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>             ConstantCondValue <= HiVal)</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>           ShouldCheckConstantCond = <span class="keyword">false</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>         HiVals.push_back(HiVal);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</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>       <span class="comment">// Rescan the ranges, looking for overlap with singleton values and other</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>       <span class="comment">// ranges.  Since the range list is sorted, we only need to compare case</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>       <span class="comment">// ranges with their neighbors.</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = CaseRanges.size(); i != e; ++i) {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         llvm::APSInt &CRLo = CaseRanges[i].first;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>         llvm::APSInt &CRHi = HiVals[i];</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>         <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a> *CR = CaseRanges[i].second;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>         <span class="comment">// Check to see whether the case range overlaps with any</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         <span class="comment">// singleton cases.</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         <a class="code" href="classclang_1_1CaseStmt.html">CaseStmt</a> *OverlapStmt = 0;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>         llvm::APSInt OverlapVal(32);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>         <span class="comment">// Find the smallest value >= the lower bound.  If I is in the</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>         <span class="comment">// case range, then we have overlap.</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>         CaseValsTy::iterator I = std::lower_bound(CaseVals.begin(),</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                                                   CaseVals.end(), CRLo,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                                                   CaseCompareFunctor());</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>         <span class="keywordflow">if</span> (I != CaseVals.end() && I->first < CRHi) {</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>           OverlapVal  = I->first;   <span class="comment">// Found overlap with scalar.</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>           OverlapStmt = I->second;</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">// Find the smallest value bigger than the upper bound.</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>         I = std::upper_bound(I, CaseVals.end(), CRHi, CaseCompareFunctor());</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>         <span class="keywordflow">if</span> (I != CaseVals.begin() && (I-1)->first >= CRLo) {</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>           OverlapVal  = (I-1)->first;      <span class="comment">// Found overlap with scalar.</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>           OverlapStmt = (I-1)->second;</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> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>         <span class="comment">// Check to see if this case stmt overlaps with the subsequent</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         <span class="comment">// case range.</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>         <span class="keywordflow">if</span> (i && CRLo <= HiVals[i-1]) {</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>           OverlapVal  = HiVals[i-1];       <span class="comment">// Found overlap with range.</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>           OverlapStmt = CaseRanges[i-1].second;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>         }</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         <span class="keywordflow">if</span> (OverlapStmt) {</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>           <span class="comment">// If we have a duplicate, report it.</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CR-><a class="code" href="classclang_1_1CaseStmt.html#a8188cfacff6e4d7aaeb709a5a4a80a9e">getLHS</a>()-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(), diag::err_duplicate_case)</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>             << OverlapVal.toString(10);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(OverlapStmt-><a class="code" href="classclang_1_1CaseStmt.html#a8188cfacff6e4d7aaeb709a5a4a80a9e">getLHS</a>()-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(),</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>                diag::note_duplicate_case_prev);</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>           <span class="comment">// FIXME: We really want to remove the bogus case stmt from the</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>           <span class="comment">// substmt, but we have no way to do this right now.</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>           CaseListIsErroneous = <span class="keyword">true</span>;</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>       }</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     }</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>     <span class="comment">// Complain if we have a constant condition and we didn't find a match.</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     <span class="keywordflow">if</span> (!CaseListIsErroneous && ShouldCheckConstantCond) {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>       <span class="comment">// TODO: it would be nice if we printed enums as enums, chars as</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>       <span class="comment">// chars, etc.</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CondExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), diag::warn_missing_case_for_condition)</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         << ConstantCondValue.toString(10)</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         << CondExpr-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     }</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     <span class="comment">// Check to see if switch is over an Enum and handles all of its</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     <span class="comment">// values.  We only issue a warning if there is not 'default:', but</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     <span class="comment">// we still do the analysis to preserve this information in the AST</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     <span class="comment">// (which can be used by flow-based analyes).</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="comment">//</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1EnumType.html">EnumType</a> *ET = CondTypeBeforePromotion-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1EnumType.html">EnumType</a>>();</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">// If switch has default case, then ignore it.</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     <span class="keywordflow">if</span> (!CaseListIsErroneous  && !HasConstantCond && ET) {</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1EnumDecl.html">EnumDecl</a> *ED = ET-><a class="code" href="classclang_1_1EnumType.html#ae65ac944d69de5b973ac1e97de6fe780">getDecl</a>();</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>       <span class="keyword">typedef</span> <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<llvm::APSInt, EnumConstantDecl*></a>, 64></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         EnumValsTy;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>       EnumValsTy EnumVals;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>       <span class="comment">// Gather all enum values, set their type and sort them,</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>       <span class="comment">// allowing easier comparison with CaseVals.</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>       <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1DeclContext_1_1specific__decl__iterator.html">EnumDecl::enumerator_iterator</a> EDI = ED-><a class="code" href="classclang_1_1EnumDecl.html#a558bb1c5fffa3e5e34fd8616180ac0c5">enumerator_begin</a>();</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>            EDI != ED-><a class="code" href="classclang_1_1EnumDecl.html#a76d27dc2664d7bad4544eb967f609135">enumerator_end</a>(); ++EDI) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         llvm::APSInt Val = EDI->getInitVal();</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         <a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">AdjustAPSInt</a>(Val, CondWidth, CondIsSigned);</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         EnumVals.push_back(std::make_pair(Val, *EDI));</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>       std::stable_sort(EnumVals.begin(), EnumVals.end(), <a class="code" href="SemaStmt_8cpp.html#a02dace99092bb1d7a1aa59ff6bc353be">CmpEnumVals</a>);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>       EnumValsTy::iterator EIend =</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>         std::unique(EnumVals.begin(), EnumVals.end(), <a class="code" href="SemaStmt_8cpp.html#a476f2e4ef0116ec6b6d9d1dd0bd78cbe">EqEnumVals</a>);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>       <span class="comment">// See which case values aren't in enum.</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>       EnumValsTy::const_iterator EI = EnumVals.begin();</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>       <span class="keywordflow">for</span> (CaseValsTy::const_iterator CI = CaseVals.begin();</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>            CI != CaseVals.end(); CI++) {</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>         <span class="keywordflow">while</span> (EI != EIend && EI->first < CI->first)</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>           EI++;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>         <span class="keywordflow">if</span> (EI == EIend || EI->first > CI->first)</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CI->second->getLHS()->getExprLoc(), diag::warn_not_in_enum)</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>             << CondTypeBeforePromotion;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>       }</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>       <span class="comment">// See which of case ranges aren't in enum</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>       EI = EnumVals.begin();</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>       <span class="keywordflow">for</span> (CaseRangesTy::const_iterator RI = CaseRanges.begin();</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>            RI != CaseRanges.end() && EI != EIend; RI++) {</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         <span class="keywordflow">while</span> (EI != EIend && EI->first < RI->first)</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>           EI++;</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="keywordflow">if</span> (EI == EIend || EI->first != RI->first) {</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RI->second->getLHS()->getExprLoc(), diag::warn_not_in_enum)</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>             << CondTypeBeforePromotion;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         llvm::APSInt Hi =</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>           RI->second->getRHS()->EvaluateKnownConstInt(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         <a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">AdjustAPSInt</a>(Hi, CondWidth, CondIsSigned);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         <span class="keywordflow">while</span> (EI != EIend && EI->first < Hi)</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>           EI++;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         <span class="keywordflow">if</span> (EI == EIend || EI->first != Hi)</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RI->second->getRHS()->getExprLoc(), diag::warn_not_in_enum)</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>             << CondTypeBeforePromotion;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>       }</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>       <span class="comment">// Check which enum vals aren't in switch</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>       CaseValsTy::const_iterator CI = CaseVals.begin();</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>       CaseRangesTy::const_iterator RI = CaseRanges.begin();</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>       <span class="keywordtype">bool</span> hasCasesNotInSwitch = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<DeclarationName,8></a> UnhandledNames;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> </div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>       <span class="keywordflow">for</span> (EI = EnumVals.begin(); EI != EIend; EI++){</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         <span class="comment">// Drop unneeded case values</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>         llvm::APSInt CIVal;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         <span class="keywordflow">while</span> (CI != CaseVals.end() && CI->first < EI->first)</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>           CI++;</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> (CI != CaseVals.end() && CI->first == EI->first)</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         <span class="comment">// Drop unneeded case ranges</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>         <span class="keywordflow">for</span> (; RI != CaseRanges.end(); RI++) {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>           llvm::APSInt Hi =</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>             RI->second->getRHS()->EvaluateKnownConstInt(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>           <a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">AdjustAPSInt</a>(Hi, CondWidth, CondIsSigned);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>           <span class="keywordflow">if</span> (EI->first <= Hi)</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>         }</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         <span class="keywordflow">if</span> (RI == CaseRanges.end() || EI->first < RI->first) {</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>           hasCasesNotInSwitch = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>           UnhandledNames.push_back(EI->second->getDeclName());</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>       }</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>       <span class="keywordflow">if</span> (TheDefaultStmt && UnhandledNames.empty())</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(TheDefaultStmt-><a class="code" href="classclang_1_1DefaultStmt.html#aaa9aaefcc23c3e6b64f4341e39885271">getDefaultLoc</a>(), diag::warn_unreachable_default);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>       <span class="comment">// Produce a nice diagnostic if multiple values aren't handled.</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>       <span class="keywordflow">switch</span> (UnhandledNames.size()) {</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>       <span class="keywordflow">case</span> 0: <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>       <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CondExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), TheDefaultStmt</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>           ? diag::warn_def_missing_case1 : diag::warn_missing_case1)</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>           << UnhandledNames[0];</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>       <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CondExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), TheDefaultStmt</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>           ? diag::warn_def_missing_case2 : diag::warn_missing_case2)</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>           << UnhandledNames[0] << UnhandledNames[1];</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>       <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CondExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), TheDefaultStmt</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>           ? diag::warn_def_missing_case3 : diag::warn_missing_case3)</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>           << UnhandledNames[0] << UnhandledNames[1] << UnhandledNames[2];</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>       <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(CondExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), TheDefaultStmt</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>           ? diag::warn_def_missing_cases : diag::warn_missing_cases)</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>           << (<span class="keywordtype">unsigned</span>)UnhandledNames.size()</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>           << UnhandledNames[0] << UnhandledNames[1] << UnhandledNames[2];</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>         <span class="keywordflow">break</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> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>       <span class="keywordflow">if</span> (!hasCasesNotInSwitch)</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         SS-><a class="code" href="classclang_1_1SwitchStmt.html#ae57f204b5be06018ceb9fdfab19ed6c1">setAllEnumCasesCovered</a>();</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     }</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>   }</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>   DiagnoseEmptyStmtBody(CondExpr-><a class="code" href="classclang_1_1Stmt.html#acdd36e45abff718e8134873f9b7448ef">getLocEnd</a>(), BodyStmt,</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>                         diag::warn_empty_switch_body);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>   <span class="comment">// FIXME: If the case list was broken is some way, we don't have a good system</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>   <span class="comment">// to patch it up.  Instead, just return the whole substmt as broken.</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>   <span class="keywordflow">if</span> (CaseListIsErroneous)</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>   <span class="keywordflow">return</span> Owned(SS);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a878b174628a37e193f941aa282c540f5"> 1115</a></span> <a class="code" href="classclang_1_1Sema.html#a878b174628a37e193f941aa282c540f5">Sema::DiagnoseAssignmentEnum</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> DstType, <a class="code" href="classclang_1_1QualType.html">QualType</a> SrcType,</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>                              <a class="code" href="classclang_1_1Expr.html">Expr</a> *SrcExpr) {</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>   <span class="keywordflow">if</span> (Diags.getDiagnosticLevel(diag::warn_not_in_enum_assignment,</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>                                SrcExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>()) ==</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>       <a class="code" href="classclang_1_1DiagnosticsEngine.html#a94e5078973aa3a34432e91f3b26263e0a7576ca0c5417d008077e743b3d412234">DiagnosticsEngine::Ignored</a>)</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1EnumType.html">EnumType</a> *ET = DstType-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1EnumType.html">EnumType</a>>())</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>     <span class="keywordflow">if</span> (!<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a889b9d309fdc236f1eab037484f10f8a" title="Determine whether the given types T1 and T2 are equivalent.">hasSameType</a>(SrcType, DstType) &&</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         SrcType-><a class="code" href="classclang_1_1Type.html#a8bde7a56623fd89e9efafde792c56dac">isIntegerType</a>()) {</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>       <span class="keywordflow">if</span> (!SrcExpr-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() && !SrcExpr-><a class="code" href="classclang_1_1Expr.html#a34f1652a9072dfd3c7119d23e1a14fa5">isValueDependent</a>() &&</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>           SrcExpr-><a class="code" href="classclang_1_1Expr.html#a9c2d6a6def36088d32a4238a684f37be">isIntegerConstantExpr</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>)) {</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>         <span class="comment">// Get the bitwidth of the enum value before promotions.</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>         <span class="keywordtype">unsigned</span> DstWidth = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a80afaaf9a6583ac2fa33734057b8220b">getIntWidth</a>(DstType);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         <span class="keywordtype">bool</span> DstIsSigned = DstType-><a class="code" href="classclang_1_1Type.html#ac1a93888d84731955cd5e95d6510aea6">isSignedIntegerOrEnumerationType</a>();</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         llvm::APSInt RhsVal = SrcExpr-><a class="code" href="classclang_1_1Expr.html#a9a303252fadd3163f7349daa10955aa4">EvaluateKnownConstInt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         <a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">AdjustAPSInt</a>(RhsVal, DstWidth, DstIsSigned);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         <span class="keyword">const</span> <a class="code" href="classclang_1_1EnumDecl.html">EnumDecl</a> *ED = ET->getDecl();</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         <span class="keyword">typedef</span> <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::pair<llvm::APSInt, EnumConstantDecl *></a>, 64></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>             EnumValsTy;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>         EnumValsTy EnumVals;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         <span class="comment">// Gather all enum values, set their type and sort them,</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>         <span class="comment">// allowing easier comparison with rhs constant.</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>         <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1DeclContext_1_1specific__decl__iterator.html">EnumDecl::enumerator_iterator</a> EDI = ED-><a class="code" href="classclang_1_1EnumDecl.html#a558bb1c5fffa3e5e34fd8616180ac0c5">enumerator_begin</a>();</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>              EDI != ED-><a class="code" href="classclang_1_1EnumDecl.html#a76d27dc2664d7bad4544eb967f609135">enumerator_end</a>(); ++EDI) {</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>           llvm::APSInt Val = EDI->getInitVal();</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>           <a class="code" href="SemaStmt_8cpp.html#ad0cfba88ef21c5525440d85cb357bea6">AdjustAPSInt</a>(Val, DstWidth, DstIsSigned);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>           EnumVals.push_back(std::make_pair(Val, *EDI));</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>         }</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>         <span class="keywordflow">if</span> (EnumVals.empty())</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>           <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         std::stable_sort(EnumVals.begin(), EnumVals.end(), <a class="code" href="SemaStmt_8cpp.html#a02dace99092bb1d7a1aa59ff6bc353be">CmpEnumVals</a>);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         EnumValsTy::iterator EIend =</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>             std::unique(EnumVals.begin(), EnumVals.end(), <a class="code" href="SemaStmt_8cpp.html#a476f2e4ef0116ec6b6d9d1dd0bd78cbe">EqEnumVals</a>);</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>         <span class="comment">// See which values aren't in the enum.</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>         EnumValsTy::const_iterator EI = EnumVals.begin();</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>         <span class="keywordflow">while</span> (EI != EIend && EI->first < RhsVal)</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>           EI++;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>         <span class="keywordflow">if</span> (EI == EIend || EI->first != RhsVal) {</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(SrcExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), diag::warn_not_in_enum_assignment)</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>           << DstType;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>         }</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>       }</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     }</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l01165"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ac1ee46aa52d0d7332188e515de0d31a2"> 1165</a></span> <a class="code" href="classclang_1_1Sema.html#ac1ee46aa52d0d7332188e515de0d31a2">Sema::ActOnWhileStmt</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> WhileLoc, <a class="code" href="classclang_1_1Sema_1_1FullExprArg.html">FullExprArg</a> Cond,</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>                      <a class="code" href="classclang_1_1Decl.html">Decl</a> *CondVar, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> CondResult(Cond.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#a38c0bc42411ce4cbd001e69eb5abd810">release</a>());</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>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *ConditionVar = 0;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>   <span class="keywordflow">if</span> (CondVar) {</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     ConditionVar = cast<VarDecl>(CondVar);</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>     CondResult = CheckConditionVariable(ConditionVar, WhileLoc, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     <span class="keywordflow">if</span> (CondResult.isInvalid())</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>   }</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>   <a class="code" href="classclang_1_1Expr.html">Expr</a> *ConditionExpr = CondResult.take();</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>   <span class="keywordflow">if</span> (!ConditionExpr)</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>   DiagnoseUnusedExprResult(Body);</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="keywordflow">if</span> (isa<NullStmt>(Body))</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     getCurCompoundScope().setHasEmptyLoopBodies();</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1WhileStmt.html">WhileStmt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, ConditionVar, ConditionExpr,</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>                                        Body, WhileLoc));</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> </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l01190"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ab8473f45c15885087c448b72eb05ba93"> 1190</a></span> <a class="code" href="classclang_1_1Sema.html#ab8473f45c15885087c448b72eb05ba93">Sema::ActOnDoStmt</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> DoLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body,</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</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> WhileLoc, <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> CondLParen,</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>                   <a class="code" href="classclang_1_1Expr.html">Expr</a> *Cond, <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> CondRParen) {</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>   assert(Cond && <span class="stringliteral">"ActOnDoStmt(): missing expression"</span>);</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> CondResult = CheckBooleanCondition(Cond, DoLoc);</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>   <span class="keywordflow">if</span> (CondResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>   Cond = CondResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>   CondResult = ActOnFinishFullExpr(Cond, DoLoc);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>   <span class="keywordflow">if</span> (CondResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>   Cond = CondResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</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>   DiagnoseUnusedExprResult(Body);</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> </div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1DoStmt.html">DoStmt</a>(Body, Cond, DoLoc, WhileLoc, CondRParen));</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> }</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>   <span class="comment">// This visitor will traverse a conditional statement and store all</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>   <span class="comment">// the evaluated decls into a vector.  Simple is set to true if none</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>   <span class="comment">// of the excluded constructs are used.</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>   <span class="keyword">class </span>DeclExtractor : <span class="keyword">public</span> <a class="code" href="classclang_1_1EvaluatedExprVisitor.html" title="Given a potentially-evaluated expression, this visitor visits all of its potentially-evaluated subexp...">EvaluatedExprVisitor</a><DeclExtractor> {</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     llvm::SmallPtrSet<VarDecl*, 8> &Decls;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SourceRange></a> &<a class="code" href="Format_8cpp.html#aef493d34e5188d58ad804f7954a8ed5b">Ranges</a>;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     <span class="keywordtype">bool</span> Simple;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>     <span class="keyword">typedef</span> <a class="code" href="classclang_1_1EvaluatedExprVisitor.html" title="Given a potentially-evaluated expression, this visitor visits all of its potentially-evaluated subexp...">EvaluatedExprVisitor<DeclExtractor></a> Inherited;</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>     DeclExtractor(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>, llvm::SmallPtrSet<VarDecl*, 8> &Decls,</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>                   <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SourceRange></a> &<a class="code" href="Format_8cpp.html#aef493d34e5188d58ad804f7954a8ed5b">Ranges</a>) :</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>         Inherited(S.<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>),</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>         Decls(Decls),</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>         Ranges(Ranges),</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>         Simple(<a class="code" href="stdbool_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>) {}</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>     <span class="keywordtype">bool</span> isSimple() { <span class="keywordflow">return</span> Simple; }</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     <span class="comment">// Replaces the method in EvaluatedExprVisitor.</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     <span class="keywordtype">void</span> VisitMemberExpr(<a class="code" href="classclang_1_1MemberExpr.html">MemberExpr</a>* E) {</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>       Simple = <span class="keyword">false</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> </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="comment">// Any Stmt not whitelisted will cause the condition to be marked complex.</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     <span class="keywordtype">void</span> VisitStmt(<a class="code" href="classclang_1_1Stmt.html">Stmt</a> *<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>) {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>       Simple = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>     }</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>     <span class="keywordtype">void</span> VisitBinaryOperator(<a class="code" href="classclang_1_1BinaryOperator.html" title="A builtin binary operation expression such as "x + y" or "x <= y".">BinaryOperator</a> *E) {</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>       Visit(E-><a class="code" href="classclang_1_1BinaryOperator.html#ad8b108ac1a7795b9f388d8dece6b8924">getLHS</a>());</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>       Visit(E-><a class="code" href="classclang_1_1BinaryOperator.html#a1ab10aae0ffa01be5d1a979e6da285e6">getRHS</a>());</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> </div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     <span class="keywordtype">void</span> VisitCastExpr(<a class="code" href="classclang_1_1CastExpr.html">CastExpr</a> *E) {</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>       Visit(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     }</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     <span class="keywordtype">void</span> VisitUnaryOperator(<a class="code" href="classclang_1_1UnaryOperator.html">UnaryOperator</a> *E) {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>       <span class="comment">// Skip checking conditionals with derefernces.</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>       <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1UnaryOperator.html#a4fceff35ff6b7f186590155fa21df48b">getOpcode</a>() == <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa7fa8b49244d53a4c50b7d8e63257449e">UO_Deref</a>)</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>         Simple = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>         Visit(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>());</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> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     <span class="keywordtype">void</span> VisitConditionalOperator(<a class="code" href="classclang_1_1ConditionalOperator.html">ConditionalOperator</a> *E) {</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>       Visit(E-><a class="code" href="classclang_1_1ConditionalOperator.html#adde4b8e0f728e60640fe4401e3eac1d3">getCond</a>());</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>       Visit(E-><a class="code" href="classclang_1_1ConditionalOperator.html#ae3c023a9354513f08eca2810fad50fb5">getTrueExpr</a>());</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>       Visit(E-><a class="code" href="classclang_1_1ConditionalOperator.html#a496da4ba98b85ef8076e6bf675ffc6e9">getFalseExpr</a>());</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     }</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     <span class="keywordtype">void</span> VisitParenExpr(<a class="code" href="classclang_1_1ParenExpr.html">ParenExpr</a> *E) {</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>       Visit(E-><a class="code" href="classclang_1_1ParenExpr.html#afd9e25d5ae91df9ada9e26b74b60422b">getSubExpr</a>());</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     }</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>     <span class="keywordtype">void</span> VisitBinaryConditionalOperator(<a class="code" href="classclang_1_1BinaryConditionalOperator.html">BinaryConditionalOperator</a> *E) {</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>       Visit(E-><a class="code" href="classclang_1_1BinaryConditionalOperator.html#a4bc96fbd822603ed2d3de2a02d2313b6" title="getOpaqueValue - Return the opaque value placeholder.">getOpaqueValue</a>()-><a class="code" href="classclang_1_1OpaqueValueExpr.html#ab105e60e67105a6ea713896d632e9670">getSourceExpr</a>());</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>       Visit(E-><a class="code" href="classclang_1_1BinaryConditionalOperator.html#a6fed6d9bdd5ce0b16c014d82b708099c" title="getFalseExpr - Return the subexpression which will be evaluated if the condnition evaluates to false;...">getFalseExpr</a>());</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     <span class="keywordtype">void</span> VisitIntegerLiteral(<a class="code" href="classclang_1_1IntegerLiteral.html">IntegerLiteral</a> *E) { }</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     <span class="keywordtype">void</span> VisitFloatingLiteral(<a class="code" href="classclang_1_1FloatingLiteral.html">FloatingLiteral</a> *E) { }</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     <span class="keywordtype">void</span> VisitCXXBoolLiteralExpr(<a class="code" href="classclang_1_1CXXBoolLiteralExpr.html" title="A boolean literal, per ([C++ lex.bool] Boolean literals).">CXXBoolLiteralExpr</a> *E) { }</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     <span class="keywordtype">void</span> VisitCharacterLiteral(<a class="code" href="classclang_1_1CharacterLiteral.html">CharacterLiteral</a> *E) { }</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="keywordtype">void</span> VisitGNUNullExpr(<a class="code" href="classclang_1_1GNUNullExpr.html">GNUNullExpr</a> *E) { }</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>     <span class="keywordtype">void</span> VisitImaginaryLiteral(<a class="code" href="classclang_1_1ImaginaryLiteral.html">ImaginaryLiteral</a> *E) { }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     <span class="keywordtype">void</span> VisitDeclRefExpr(<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *E) {</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>       <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(E-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>());</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>       <span class="keywordflow">if</span> (!VD) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>       <a class="code" href="Format_8cpp.html#aef493d34e5188d58ad804f7954a8ed5b">Ranges</a>.push_back(E-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>());</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>       Decls.insert(VD);</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     }</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">// end class DeclExtractor</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>   <span class="comment">// DeclMatcher checks to see if the decls are used in a non-evauluated</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>   <span class="comment">// context.</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>   <span class="keyword">class </span>DeclMatcher : <span class="keyword">public</span> <a class="code" href="classclang_1_1EvaluatedExprVisitor.html" title="Given a potentially-evaluated expression, this visitor visits all of its potentially-evaluated subexp...">EvaluatedExprVisitor</a><DeclMatcher> {</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     llvm::SmallPtrSet<VarDecl*, 8> &Decls;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     <span class="keywordtype">bool</span> FoundDecl;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     <span class="keyword">typedef</span> <a class="code" href="classclang_1_1EvaluatedExprVisitor.html" title="Given a potentially-evaluated expression, this visitor visits all of its potentially-evaluated subexp...">EvaluatedExprVisitor<DeclMatcher></a> Inherited;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> </div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     DeclMatcher(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>, llvm::SmallPtrSet<VarDecl*, 8> &Decls,</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>                 <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Statement) :</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         Inherited(S.<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>), Decls(Decls), FoundDecl(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>) {</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>       <span class="keywordflow">if</span> (!Statement) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>       Visit(Statement);</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>     }</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     <span class="keywordtype">void</span> VisitReturnStmt(<a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a> *S) {</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>       FoundDecl = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     }</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>     <span class="keywordtype">void</span> VisitBreakStmt(<a class="code" href="classclang_1_1BreakStmt.html">BreakStmt</a> *S) {</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>       FoundDecl = <span class="keyword">true</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> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     <span class="keywordtype">void</span> VisitGotoStmt(<a class="code" href="classclang_1_1GotoStmt.html">GotoStmt</a> *S) {</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>       FoundDecl = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>     }</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>     <span class="keywordtype">void</span> VisitCastExpr(<a class="code" href="classclang_1_1CastExpr.html">CastExpr</a> *E) {</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>       <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1CastExpr.html#a9579ef9370fffd8c5e4bee485eac9265">getCastKind</a>() == <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca3b60e4a2d76963a5a2db0e0b720d8ce4">CK_LValueToRValue</a>)</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>         CheckLValueToRValueCast(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>         Visit(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>     }</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>     <span class="keywordtype">void</span> CheckLValueToRValueCast(<a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>       E = E-><a class="code" href="classclang_1_1Expr.html#a54036c75e73ecdf081729210fa53e582">IgnoreParenImpCasts</a>();</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>       <span class="keywordflow">if</span> (isa<DeclRefExpr>(E)) {</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>       }</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1ConditionalOperator.html">ConditionalOperator</a> *CO = dyn_cast<ConditionalOperator>(E)) {</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>         Visit(CO->getCond());</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>         CheckLValueToRValueCast(CO->getTrueExpr());</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>         CheckLValueToRValueCast(CO->getFalseExpr());</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</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>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1BinaryConditionalOperator.html">BinaryConditionalOperator</a> *BCO =</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>               dyn_cast<BinaryConditionalOperator>(E)) {</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>         CheckLValueToRValueCast(BCO->getOpaqueValue()->getSourceExpr());</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>         CheckLValueToRValueCast(BCO->getFalseExpr());</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>       }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>       Visit(E);</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>     }</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>     <span class="keywordtype">void</span> VisitDeclRefExpr(<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *E) {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<VarDecl>(E-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>()))</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>         <span class="keywordflow">if</span> (Decls.count(VD))</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>           FoundDecl = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</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="keywordtype">bool</span> FoundDeclInUse() { <span class="keywordflow">return</span> FoundDecl; }</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> </div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>   };  <span class="comment">// end class DeclMatcher</span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> </div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>   <span class="keywordtype">void</span> CheckForLoopConditionalStatement(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Second,</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>                                         <a class="code" href="classclang_1_1Expr.html">Expr</a> *Third, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>     <span class="comment">// Condition is empty</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     <span class="keywordflow">if</span> (!Second) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     <span class="keywordflow">if</span> (S.<a class="code" href="classclang_1_1Sema.html#ace9dfca18443fd122215c74657d33b53">Diags</a>.<a class="code" href="classclang_1_1DiagnosticsEngine.html#a1a9de9de7e5ad8218fa06ca8568aa52c" title="Based on the way the client configured the DiagnosticsEngine object, classify the specified diagnosti...">getDiagnosticLevel</a>(diag::warn_variables_not_in_loop_body,</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>                                    Second-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>())</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>         == <a class="code" href="classclang_1_1DiagnosticsEngine.html#a94e5078973aa3a34432e91f3b26263e0a7576ca0c5417d008077e743b3d412234">DiagnosticsEngine::Ignored</a>)</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>     <a class="code" href="classclang_1_1PartialDiagnostic.html">PartialDiagnostic</a> PDiag = S.<a class="code" href="classclang_1_1Sema.html#ac4e72de7865043558a71912b3bfd8f91" title="Build a partial diagnostic.">PDiag</a>(diag::warn_variables_not_in_loop_body);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>     llvm::SmallPtrSet<VarDecl*, 8> Decls;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SourceRange, 10></a> <a class="code" href="Format_8cpp.html#aef493d34e5188d58ad804f7954a8ed5b">Ranges</a>;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>     DeclExtractor DE(S, Decls, Ranges);</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     DE.Visit(Second);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>     <span class="comment">// Don't analyze complex conditionals.</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>     <span class="keywordflow">if</span> (!DE.isSimple()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> </div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     <span class="comment">// No decls found.</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     <span class="keywordflow">if</span> (Decls.size() == 0) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>     <span class="comment">// Don't warn on volatile, static, or global variables.</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>     <span class="keywordflow">for</span> (llvm::SmallPtrSet<VarDecl*, 8>::iterator I = Decls.begin(),</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>                                                   E = Decls.end();</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>          I != E; ++I)</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>       <span class="keywordflow">if</span> ((*I)->getType().isVolatileQualified() ||</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>           (*I)->hasGlobalStorage()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     <span class="keywordflow">if</span> (DeclMatcher(S, Decls, Second).FoundDeclInUse() ||</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>         DeclMatcher(S, Decls, Third).FoundDeclInUse() ||</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>         DeclMatcher(S, Decls, Body).FoundDeclInUse())</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> </div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     <span class="comment">// Load decl names into diagnostic.</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>     <span class="keywordflow">if</span> (Decls.size() > 4)</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>       PDiag << 0;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>     <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>       PDiag << Decls.size();</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>       <span class="keywordflow">for</span> (llvm::SmallPtrSet<VarDecl*, 8>::iterator I = Decls.begin(),</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>                                                     E = Decls.end();</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>            I != E; ++I)</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>         PDiag << (*I)->getDeclName();</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</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>     <span class="comment">// Load SourceRanges into diagnostic if there is room.</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="comment">// Otherwise, load the SourceRange of the conditional expression.</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keywordflow">if</span> (Ranges.size() <= <a class="code" href="classclang_1_1PartialDiagnostic.html#afcf062eefc50bd278dcfb4ff5190340aa6eadd6ad86373590a3d5ade3689d94cf">PartialDiagnostic::MaxArguments</a>)</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>       <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<SourceRange>::iterator</a> I = Ranges.begin(),</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>                                                   E = Ranges.end();</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>            I != E; ++I)</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>         PDiag << *I;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>       PDiag << Second-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Ranges.begin()->getBegin(), PDiag);</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>   }</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>   <span class="comment">// If Statement is an incemement or decrement, return true and sets the</span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>   <span class="comment">// variables Increment and DRE.</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>   <span class="keywordtype">bool</span> ProcessIterationStmt(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <a class="code" href="classclang_1_1Stmt.html">Stmt</a>* Statement, <span class="keywordtype">bool</span> &Increment,</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>                             <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *&DRE) {</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1UnaryOperator.html">UnaryOperator</a> *UO = dyn_cast<UnaryOperator>(Statement)) {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>       <span class="keywordflow">switch</span> (UO->getOpcode()) {</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>         <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa6d908d314a5f7c26833ffc0c453b9a40">UO_PostInc</a>:</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>         <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa8e13dc1c94cb3c4aec9526575bdd424d">UO_PreInc</a>:</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>           Increment = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>         <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa5cd3ab72d62411d215161f9f852cc589">UO_PostDec</a>:</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>         <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffade6bd9d0cc5c62a832da915f7e837562">UO_PreDec</a>:</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>           Increment = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>       }</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>       DRE = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(UO->getSubExpr());</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>       <span class="keywordflow">return</span> DRE;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>     }</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> </div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CXXOperatorCallExpr.html" title="A call to an overloaded operator written using operator syntax.">CXXOperatorCallExpr</a> *Call = dyn_cast<CXXOperatorCallExpr>(Statement)) {</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>       <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = Call->getDirectCallee();</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>       <span class="keywordflow">if</span> (!FD || !FD-><a class="code" href="classclang_1_1FunctionDecl.html#afc99ae5d71a822f99aeb93bfbae94b19">isOverloadedOperator</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>       <span class="keywordflow">switch</span> (FD-><a class="code" href="classclang_1_1FunctionDecl.html#add2961020f578864af81da463b72f5ae">getOverloadedOperator</a>()) {</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>         <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>         <span class="keywordflow">case</span> OO_PlusPlus:</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>           Increment = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>         <span class="keywordflow">case</span> OO_MinusMinus:</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>           Increment = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>           <span class="keywordflow">break</span>;</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>       DRE = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(Call->getArg(0));</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>       <span class="keywordflow">return</span> DRE;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     }</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">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>   }</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="comment">// A visitor to determine if a continue statement is a subexpression.</span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>   <span class="keyword">class </span>ContinueFinder : <span class="keyword">public</span> <a class="code" href="classclang_1_1EvaluatedExprVisitor.html" title="Given a potentially-evaluated expression, this visitor visits all of its potentially-evaluated subexp...">EvaluatedExprVisitor</a><ContinueFinder> {</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>     <span class="keywordtype">bool</span> Found;</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     ContinueFinder(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <a class="code" href="classclang_1_1Stmt.html">Stmt</a>* Body) :</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>         Inherited(S.<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>),</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>         Found(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>) {</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>       Visit(Body);</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     }</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> </div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     <span class="keyword">typedef</span> <a class="code" href="classclang_1_1EvaluatedExprVisitor.html" title="Given a potentially-evaluated expression, this visitor visits all of its potentially-evaluated subexp...">EvaluatedExprVisitor<ContinueFinder></a> Inherited;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordtype">void</span> VisitContinueStmt(<a class="code" href="classclang_1_1ContinueStmt.html">ContinueStmt</a>* E) {</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>       Found = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     }</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>     <span class="keywordtype">bool</span> ContinueFound() { <span class="keywordflow">return</span> Found; }</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> </div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>   };  <span class="comment">// end class ContinueFinder</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="comment">// Emit a warning when a loop increment/decrement appears twice per loop</span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>   <span class="comment">// iteration.  The conditions which trigger this warning are:</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>   <span class="comment">// 1) The last statement in the loop body and the third expression in the</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>   <span class="comment">//    for loop are both increment or both decrement of the same variable</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>   <span class="comment">// 2) No continue statements in the loop body.</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>   <span class="keywordtype">void</span> CheckForRedundantIteration(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &S, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Third, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>     <span class="comment">// Return when there is nothing to check.</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     <span class="keywordflow">if</span> (!Body || !Third) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> </div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     <span class="keywordflow">if</span> (S.<a class="code" href="classclang_1_1Sema.html#ace9dfca18443fd122215c74657d33b53">Diags</a>.<a class="code" href="classclang_1_1DiagnosticsEngine.html#a1a9de9de7e5ad8218fa06ca8568aa52c" title="Based on the way the client configured the DiagnosticsEngine object, classify the specified diagnosti...">getDiagnosticLevel</a>(diag::warn_redundant_loop_iteration,</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>                                    Third-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>())</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>         == <a class="code" href="classclang_1_1DiagnosticsEngine.html#a94e5078973aa3a34432e91f3b26263e0a7576ca0c5417d008077e743b3d412234">DiagnosticsEngine::Ignored</a>)</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>       <span class="keywordflow">return</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="comment">// Get the last statement from the loop body.</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     <a class="code" href="classclang_1_1CompoundStmt.html">CompoundStmt</a> *CS = dyn_cast<<a class="code" href="classclang_1_1CompoundStmt.html">CompoundStmt</a>>(Body);</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     <span class="keywordflow">if</span> (!CS || CS-><a class="code" href="classclang_1_1CompoundStmt.html#aaa6e2a814202be5f733f679565927819">body_empty</a>()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *LastStmt = CS-><a class="code" href="classclang_1_1CompoundStmt.html#a0e0462c6a95a6cfd54bf73d5cdfa9ba5">body_back</a>();</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>     <span class="keywordflow">if</span> (!LastStmt) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> </div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     <span class="keywordtype">bool</span> LoopIncrement, LastIncrement;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *LoopDRE, *LastDRE;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>     <span class="keywordflow">if</span> (!ProcessIterationStmt(S, Third, LoopIncrement, LoopDRE)) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="keywordflow">if</span> (!ProcessIterationStmt(S, LastStmt, LastIncrement, LastDRE)) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> </div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     <span class="comment">// Check that the two statements are both increments or both decrements</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     <span class="comment">// on the same varaible.</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     <span class="keywordflow">if</span> (LoopIncrement != LastIncrement ||</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>         LoopDRE-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>() != LastDRE-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> </div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>     <span class="keywordflow">if</span> (ContinueFinder(S, Body).ContinueFound()) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> </div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>     S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(LastDRE-><a class="code" href="classclang_1_1DeclRefExpr.html#ab4616545c45fc9569eb99471396361b9">getLocation</a>(), diag::warn_redundant_loop_iteration)</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>          << LastDRE-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>() << LastIncrement;</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     S.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(LoopDRE-><a class="code" href="classclang_1_1DeclRefExpr.html#ab4616545c45fc9569eb99471396361b9">getLocation</a>(), diag::note_loop_iteration_here)</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>          << LoopIncrement;</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> </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> } <span class="comment">// end namespace</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l01519"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#aa28983e04108d7e0ba686eba72aa3041"> 1519</a></span> <a class="code" href="classclang_1_1Sema.html#aa28983e04108d7e0ba686eba72aa3041">Sema::ActOnForStmt</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> ForLoc, <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,</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>                    <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *First, <a class="code" href="classclang_1_1Sema_1_1FullExprArg.html">FullExprArg</a> second, <a class="code" href="classclang_1_1Decl.html">Decl</a> *secondVar,</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>                    <a class="code" href="classclang_1_1Sema_1_1FullExprArg.html">FullExprArg</a> third,</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</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> RParenLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>   <span class="keywordflow">if</span> (!getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>) {</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a> *DS = dyn_cast_or_null<DeclStmt>(First)) {</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>       <span class="comment">// C99 6.8.5p3: The declaration part of a 'for' statement shall only</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>       <span class="comment">// declare identifiers for objects having storage class 'auto' or</span></div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>       <span class="comment">// 'register'.</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>       <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1Decl.html">DeclStmt::decl_iterator</a> DI=DS->decl_begin(), DE=DS->decl_end();</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>            DI!=DE; ++DI) {</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>         <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(*DI);</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>         <span class="keywordflow">if</span> (VD && VD-><a class="code" href="classclang_1_1VarDecl.html#ab3fc38243546c278bf42ea0deb0ed8e9">isLocalVarDecl</a>() && !VD-><a class="code" href="classclang_1_1VarDecl.html#a86bb48bd6ced47b79a59af7df7108184">hasLocalStorage</a>())</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>           VD = 0;</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>         <span class="keywordflow">if</span> (VD == 0) {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>((*DI)->getLocation(), diag::err_non_local_variable_decl_in_for);</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>           (*DI)->setInvalidDecl();</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>         }</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>       }</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>     }</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</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>   CheckForLoopConditionalStatement(*<span class="keyword">this</span>, second.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#ab95e0353173cad65a006440cf0555b2e">get</a>(), third.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#ab95e0353173cad65a006440cf0555b2e">get</a>(), Body);</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>   CheckForRedundantIteration(*<span class="keyword">this</span>, third.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#ab95e0353173cad65a006440cf0555b2e">get</a>(), Body);</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> </div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> SecondResult(second.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#a38c0bc42411ce4cbd001e69eb5abd810">release</a>());</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *ConditionVar = 0;</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>   <span class="keywordflow">if</span> (secondVar) {</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     ConditionVar = cast<VarDecl>(secondVar);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     SecondResult = CheckConditionVariable(ConditionVar, ForLoc, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>     <span class="keywordflow">if</span> (SecondResult.isInvalid())</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>   }</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>   <a class="code" href="classclang_1_1Expr.html">Expr</a> *Third  = third.<a class="code" href="classclang_1_1Sema_1_1FullExprArg.html#a38c0bc42411ce4cbd001e69eb5abd810">release</a>().<a class="code" href="classclang_1_1ActionResult.html#a144bc2f6c8a8090ba894cda5a5613361">takeAs</a><<a class="code" href="classclang_1_1Expr.html">Expr</a>>();</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> </div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>   DiagnoseUnusedExprResult(First);</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>   DiagnoseUnusedExprResult(Third);</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>   DiagnoseUnusedExprResult(Body);</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> </div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>   <span class="keywordflow">if</span> (isa<NullStmt>(Body))</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     getCurCompoundScope().setHasEmptyLoopBodies();</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> </div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ForStmt.html">ForStmt</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, First,</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>                                      SecondResult.take(), ConditionVar,</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>                                      Third, Body, ForLoc, LParenLoc,</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>                                      RParenLoc));</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="comment"></span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="comment">/// In an Objective C collection iteration statement:</span></div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="comment">///   for (x in y)</span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment">/// x can be an arbitrary l-value expression.  Bind it up as a</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <span class="comment">/// full-expression.</span></div>
+<div class="line"><a name="l01572"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a1c5881dd3c881e72bd34185846503d5f"> 1572</a></span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a1c5881dd3c881e72bd34185846503d5f">Sema::ActOnForEachLValueExpr</a>(<a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>   <span class="comment">// Reduce placeholder expressions here.  Note that this rejects the</span></div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>   <span class="comment">// use of pseudo-object l-values in this position.</span></div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> result = CheckPlaceholderExpr(E);</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>   <span class="keywordflow">if</span> (result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   E = result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> </div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> FullExpr = ActOnFinishFullExpr(E);</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>   <span class="keywordflow">if</span> (FullExpr.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>   <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a90866086cf9f548cb4d1acff399d32ed">StmtResult</a>(static_cast<Stmt*>(FullExpr.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>()));</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> }</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> </div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a></div>
+<div class="line"><a name="l01586"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a5b9ac5b2c46f3705de04a5309c4f4880"> 1586</a></span> <a class="code" href="classclang_1_1Sema.html#a5b9ac5b2c46f3705de04a5309c4f4880">Sema::CheckObjCForCollectionOperand</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> forLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *collection) {</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>   <span class="keywordflow">if</span> (!collection)</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a9ae224fb900de5598d2c22f31c0ccea7">ExprError</a>();</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   <span class="comment">// Bail out early if we've got a type-dependent expression.</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>   <span class="keywordflow">if</span> (collection-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()) <span class="keywordflow">return</span> Owned(collection);</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">// Perform normal l-value conversion.</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> result = DefaultFunctionArrayLvalueConversion(collection);</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>   <span class="keywordflow">if</span> (result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a9ae224fb900de5598d2c22f31c0ccea7">ExprError</a>();</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>   collection = result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>   <span class="comment">// The operand needs to have object-pointer type.</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>   <span class="comment">// TODO: should we do a contextual conversion?</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCObjectPointerType.html">ObjCObjectPointerType</a> *pointerType =</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     collection-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1ObjCObjectPointerType.html">ObjCObjectPointerType</a>>();</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>   <span class="keywordflow">if</span> (!pointerType)</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     <span class="keywordflow">return</span> <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(forLoc, diag::err_collection_expr_type)</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>              << collection-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() << collection-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</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="comment">// Check that the operand provides</span></div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>   <span class="comment">//   - countByEnumeratingWithState:objects:count:</span></div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCObjectType.html">ObjCObjectType</a> *objectType = pointerType-><a class="code" href="classclang_1_1ObjCObjectPointerType.html#abb391d91721464c0dc1eb15f333637a9">getObjectType</a>();</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>   <a class="code" href="classclang_1_1ObjCInterfaceDecl.html" title="Represents an ObjC class declaration.">ObjCInterfaceDecl</a> *iface = objectType-><a class="code" href="classclang_1_1ObjCObjectType.html#a768f52da9b3b79e70b48391b38388e40">getInterface</a>();</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">// If we have a forward-declared type, we can't do this check.</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>   <span class="comment">// Under ARC, it is an error not to have a forward-declared class.</span></div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>   <span class="keywordflow">if</span> (iface &&</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>       RequireCompleteType(forLoc, <a class="code" href="classclang_1_1QualType.html">QualType</a>(objectType, 0),</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>                           getLangOpts().ObjCAutoRefCount</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>                             ? diag::err_arc_collection_forward</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>                             : 0,</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>                           collection)) {</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>     <span class="comment">// Otherwise, if we have any useful type information, check that</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>     <span class="comment">// the type declares the appropriate method.</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iface || !objectType-><a class="code" href="classclang_1_1ObjCObjectType.html#a97eba4ff58c8f04f0cd59c183a76e1cd">qual_empty</a>()) {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *selectorIdents[] = {</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>       &<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a4f95adb9958e22fbe55212ae6482feb4">Idents</a>.<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(<span class="stringliteral">"countByEnumeratingWithState"</span>),</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>       &<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a4f95adb9958e22fbe55212ae6482feb4">Idents</a>.<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(<span class="stringliteral">"objects"</span>),</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>       &<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a4f95adb9958e22fbe55212ae6482feb4">Idents</a>.<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(<span class="stringliteral">"count"</span>)</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     };</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <a class="code" href="classclang_1_1Selector.html" title="Smart pointer class that efficiently represents Objective-C method names.">Selector</a> selector = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a544656d98576ff2c1adb3e61a038e5b2">Selectors</a>.<a class="code" href="classclang_1_1SelectorTable.html#aae4996e6370b3c39722a757eb37b38b8" title="Can create any sort of selector.">getSelector</a>(3, &selectorIdents[0]);</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> </div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     <a class="code" href="classclang_1_1ObjCMethodDecl.html">ObjCMethodDecl</a> *method = 0;</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="comment">// If there's an interface, look in both the public and private APIs.</span></div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>     <span class="keywordflow">if</span> (iface) {</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>       method = iface-><a class="code" href="classclang_1_1ObjCInterfaceDecl.html#a978054a968b81b37cf5601a8d6499a7c">lookupInstanceMethod</a>(selector);</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>       <span class="keywordflow">if</span> (!method) method = iface-><a class="code" href="classclang_1_1ObjCInterfaceDecl.html#ac1332a66d16b767c2ae573f7bd17d101" title="Lookup a method in the classes implementation hierarchy.">lookupPrivateMethod</a>(selector);</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>     <span class="comment">// Also check protocol qualifiers.</span></div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>     <span class="keywordflow">if</span> (!method)</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>       method = LookupMethodInQualifiedType(selector, pointerType,</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>                                            <span class="comment">/*instance*/</span> <span class="keyword">true</span>);</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">// If we didn't find it anywhere, give up.</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     <span class="keywordflow">if</span> (!method) {</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(forLoc, diag::warn_collection_expr_type)</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>         << collection-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() << selector << collection-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>     }</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> </div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>     <span class="comment">// TODO: check for an incompatible signature?</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>   }</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> </div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>   <span class="comment">// Wrap up any cleanups in the expression.</span></div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>   <span class="keywordflow">return</span> Owned(collection);</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> }</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l01657"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a1be4fc65ba13ec0d6e40797885d47796"> 1657</a></span> <a class="code" href="classclang_1_1Sema.html#a1be4fc65ba13ec0d6e40797885d47796">Sema::ActOnObjCForCollectionStmt</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> ForLoc,</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>                                  <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *First, <a class="code" href="classclang_1_1Expr.html">Expr</a> *collection,</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</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> RParenLoc) {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> CollectionExprResult =</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     CheckObjCForCollectionOperand(ForLoc, collection);</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> </div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>   <span class="keywordflow">if</span> (First) {</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> FirstType;</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a> *DS = dyn_cast<DeclStmt>(First)) {</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>       <span class="keywordflow">if</span> (!DS->isSingleDecl())</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>((*DS->decl_begin())->getLocation(),</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>                          diag::err_toomany_element_decls));</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> </div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>       <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *D = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(DS->getSingleDecl());</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>       <span class="keywordflow">if</span> (!D || D-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>())</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>       </div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>       FirstType = D-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>       <span class="comment">// C99 6.8.5p3: The declaration part of a 'for' statement shall only</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>       <span class="comment">// declare identifiers for objects having storage class 'auto' or</span></div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>       <span class="comment">// 'register'.</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>       <span class="keywordflow">if</span> (!D-><a class="code" href="classclang_1_1VarDecl.html#a86bb48bd6ced47b79a59af7df7108184">hasLocalStorage</a>())</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(D-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(),</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>                               diag::err_non_local_variable_decl_in_for));</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="comment">// If the type contained 'auto', deduce the 'auto' to 'id'.</span></div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>       <span class="keywordflow">if</span> (FirstType-><a class="code" href="classclang_1_1Type.html#a1cb680b9778b1825cf585afaf82bc1b8" title="Get the AutoType whose type will be deduced for a variable with an initializer of this type...">getContainedAutoType</a>()) {</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>         <a class="code" href="classclang_1_1OpaqueValueExpr.html">OpaqueValueExpr</a> OpaqueId(D-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a46cf0bb1b4e31396963afe4f98956273" title="Represents the Objective-CC id type.">getObjCIdType</a>(),</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>                                  <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340a7486248bcb086a1f969a9e138208dcd7" title="An r-value expression (a pr-value in the C++11 taxonomy) produces a temporary value.">VK_RValue</a>);</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>         <a class="code" href="classclang_1_1Expr.html">Expr</a> *DeducedInit = &OpaqueId;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>         <span class="keywordflow">if</span> (DeduceAutoType(D-><a class="code" href="classclang_1_1DeclaratorDecl.html#aa7d515eb57658519d6607f3ade08285f">getTypeSourceInfo</a>(), DeducedInit, FirstType) ==</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>                 DAR_Failed)</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>           DiagnoseAutoDeductionFailure(D, DeducedInit);</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>         <span class="keywordflow">if</span> (FirstType.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>()) {</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>           D-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>           <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>         }</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> </div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>         D-><a class="code" href="classclang_1_1ValueDecl.html#a3a82ca5762f3fb1c2d25d9cf63728cd2">setType</a>(FirstType);</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> </div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>         <span class="keywordflow">if</span> (ActiveTemplateInstantiations.empty()) {</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</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="l01700"></a><span class="lineno"> 1700</span>               D-><a class="code" href="classclang_1_1DeclaratorDecl.html#aa7d515eb57658519d6607f3ade08285f">getTypeSourceInfo</a>()-><a class="code" href="classclang_1_1TypeSourceInfo.html#a51bc61879d5926193a3bb3ee1a280fee" title="Return the TypeLoc wrapper for the type source info.">getTypeLoc</a>().<a class="code" href="classclang_1_1TypeLoc.html#ae2d52812c218de89646d554ea4fc69b8" title="Get the begin source location.">getBeginLoc</a>();</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Loc, diag::warn_auto_var_is_id)</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>             << D-><a class="code" href="classclang_1_1NamedDecl.html#a1e3e90455be89bb5c7c23640cbbd7153">getDeclName</a>();</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>         }</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>       }</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>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>       <a class="code" href="classclang_1_1Expr.html">Expr</a> *FirstE = cast<Expr>(First);</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>       <span class="keywordflow">if</span> (!FirstE-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() && !FirstE-><a class="code" href="classclang_1_1Expr.html#a6ef085b1e84bebe337c2a4ca4d1df5fd">isLValue</a>())</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(First-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(),</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>                    diag::err_selector_element_not_lvalue)</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>           << First-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>());</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>       FirstType = <span class="keyword">static_cast<</span><a class="code" href="classclang_1_1Expr.html">Expr</a>*<span class="keyword">></span>(First)->getType();</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>       <span class="keywordflow">if</span> (FirstType.<a class="code" href="classclang_1_1QualType.html#afea72c89b99446db779fcfb0ea257826" title="Determine whether this type is const-qualified.">isConstQualified</a>())</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ForLoc, diag::err_selector_element_const_type)</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>           << FirstType << First-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</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> (!FirstType-><a class="code" href="classclang_1_1Type.html#a7e475b7859ae970eb837da95e94ab26c">isDependentType</a>() &&</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>         !FirstType-><a class="code" href="classclang_1_1Type.html#aa9be9c3ceec53da8edbbb86bbf895fff">isObjCObjectPointerType</a>() &&</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>         !FirstType-><a class="code" href="classclang_1_1Type.html#ad6cd1a04cac76bfb304bbc02bf23a9bb">isBlockPointerType</a>())</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ForLoc, diag::err_selector_element_type)</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>                            << FirstType << First-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>());</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>   }</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>   <span class="keywordflow">if</span> (CollectionExprResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> </div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>   CollectionExprResult = ActOnFinishFullExpr(CollectionExprResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>());</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>   <span class="keywordflow">if</span> (CollectionExprResult.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</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> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ObjCForCollectionStmt.html" title="Represents Objective-C's collection statement.">ObjCForCollectionStmt</a>(First,</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>                                                    CollectionExprResult.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>(), 0,</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>                                                    ForLoc, RParenLoc));</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> }</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment"></span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="comment">/// Finish building a variable declaration for a for-range statement.</span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">/// \return true if an error occurs.</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463"> 1739</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463">FinishForRangeVarDecl</a>(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &<a class="code" href="SemaOverload_8cpp.html#a2143ac7d927afc9feb28c9270c7ed86d">SemaRef</a>, <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *<a class="code" href="classclang_1_1Decl.html">Decl</a>, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Init,</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, <span class="keywordtype">int</span> DiagID) {</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>   <span class="comment">// Deduce the type for the iterator variable now rather than leaving it to</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>   <span class="comment">// AddInitializerToDecl, so we can produce a more suitable diagnostic.</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> InitType;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>   <span class="keywordflow">if</span> ((!isa<InitListExpr>(Init) && Init-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>()) ||</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>       SemaRef.<a class="code" href="classclang_1_1Sema.html#a14a906e90cf51a402dda5e881d4210b3">DeduceAutoType</a>(Decl-><a class="code" href="classclang_1_1DeclaratorDecl.html#aa7d515eb57658519d6607f3ade08285f">getTypeSourceInfo</a>(), Init, InitType) ==</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>           <a class="code" href="classclang_1_1Sema.html#aef696f6ba42fd83ffbd15772629f4e13a4a45f9c5197abf622ec620cfebbda36a">Sema::DAR_Failed</a>)</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>     SemaRef.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, DiagID) << Init-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>   <span class="keywordflow">if</span> (InitType.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>()) {</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>     Decl-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>   }</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>   Decl-><a class="code" href="classclang_1_1ValueDecl.html#a3a82ca5762f3fb1c2d25d9cf63728cd2">setType</a>(InitType);</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">// In ARC, infer lifetime.</span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>   <span class="comment">// FIXME: ARC may want to turn this into 'const __unsafe_unretained' if</span></div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>   <span class="comment">// we're doing the equivalent of fast iteration.</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>   <span class="keywordflow">if</span> (SemaRef.<a class="code" href="classclang_1_1Sema.html#a5f632d714a520550786bde65d3771228">getLangOpts</a>().ObjCAutoRefCount &&</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>       SemaRef.<a class="code" href="classclang_1_1Sema.html#ac0ef35ff7706847015373b1e4513770b">inferObjCARCLifetime</a>(Decl))</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>     Decl-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> </div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>   SemaRef.<a class="code" href="classclang_1_1Sema.html#ac99888690fb1c9ed515c86f4ae7317ef">AddInitializerToDecl</a>(Decl, Init, <span class="comment">/*DirectInit=*/</span><span class="keyword">false</span>,</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>                                <span class="comment">/*TypeMayContainAuto=*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>   SemaRef.<a class="code" href="classclang_1_1Sema.html#a3db45d6f98392781ce2067bb271369cc">FinalizeDeclaration</a>(Decl);</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>   SemaRef.<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#ae6ca78c51f67fc605250953d2f5eb807" title="Add the declaration D to this context without modifying any lookup tables.">addHiddenDecl</a>(Decl);</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> }</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> </div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment"></span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="comment">/// Produce a note indicating which begin/end function was implicitly called</span></div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment">/// by a C++11 for-range statement. This is often not obvious from the code,</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment">/// nor from the diagnostics produced when analysing the implicit expressions</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment">/// required in a for-range statement.</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment"></span><span class="keywordtype">void</span> NoteForRangeBeginEndFunction(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &<a class="code" href="SemaOverload_8cpp.html#a2143ac7d927afc9feb28c9270c7ed86d">SemaRef</a>, <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>                                   <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346">Sema::BeginEndFunction</a> BEF) {</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>   <a class="code" href="classclang_1_1CallExpr.html">CallExpr</a> *CE = dyn_cast<<a class="code" href="classclang_1_1CallExpr.html">CallExpr</a>>(E);</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>   <span class="keywordflow">if</span> (!CE)</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>   <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *D = dyn_cast<<a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a>>(CE-><a class="code" href="classclang_1_1CallExpr.html#a68507440cf707685b486b1f446d28f53">getCalleeDecl</a>());</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>   <span class="keywordflow">if</span> (!D)</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</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_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>();</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>   std::string Description;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>   <span class="keywordtype">bool</span> IsTemplate = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1FunctionTemplateDecl.html" title="Declaration of a template function.">FunctionTemplateDecl</a> *FunTmpl = D-><a class="code" href="classclang_1_1FunctionDecl.html#aa80c92b0ca1b549276377865073b739a" title="Retrieve the primary template that this function template specialization either specializes or was in...">getPrimaryTemplate</a>()) {</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>     Description = SemaRef.<a class="code" href="classclang_1_1Sema.html#ae7b5253b2e4594ec08c9bbcf364ec97a" title="Produces a formatted string that describes the binding of template parameters to template arguments...">getTemplateArgumentBindingsText</a>(</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>       FunTmpl->getTemplateParameters(), *D-><a class="code" href="classclang_1_1FunctionDecl.html#a63ce991fd23d2836a87efc97d00e54ea" title="Retrieve the template arguments used to produce this function template specialization from the primar...">getTemplateSpecializationArgs</a>());</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>     IsTemplate = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>   }</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> </div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>   SemaRef.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(Loc, diag::note_for_range_begin_end)</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     << BEF << IsTemplate << Description << E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> }</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment"></span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">/// Build a variable declaration for a for-range statement.</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment"></span><a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *BuildForRangeVarDecl(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &SemaRef, <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="l01798"></a><span class="lineno"> 1798</span>                               <a class="code" href="classclang_1_1QualType.html">QualType</a> <a class="code" href="classclang_1_1Type.html">Type</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *Name) {</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>   <a class="code" href="classclang_1_1DeclContext.html">DeclContext</a> *DC = SemaRef.<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="l01800"></a><span class="lineno"> 1800</span>   <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *II = &SemaRef.<a class="code" href="classclang_1_1Sema.html#a6829f2b169c74ad544c53a8b1415061b">PP</a>.<a class="code" href="classclang_1_1Preprocessor.html#a7770871c2bdcd43cfa195d5936c8e268">getIdentifierTable</a>().<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(Name);</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>   <a class="code" href="classclang_1_1TypeSourceInfo.html" title="A container of type source information.">TypeSourceInfo</a> *TInfo = SemaRef.<a class="code" href="classclang_1_1Sema.html#a3ccddacb1f4f71b084296175cc9e5b0e">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#ab52efd4ef8c5cd4f78dbba824615caa2" title="Allocate a TypeSourceInfo where all locations have been initialized to a given location, which defaults to the empty location.">getTrivialTypeSourceInfo</a>(Type, Loc);</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *<a class="code" href="classclang_1_1Decl.html">Decl</a> = <a class="code" href="classclang_1_1VarDecl.html#a8e8dde8b700aeb918872f098a3b61103">VarDecl::Create</a>(SemaRef.<a class="code" href="classclang_1_1Sema.html#a3ccddacb1f4f71b084296175cc9e5b0e">Context</a>, DC, Loc, Loc, II, Type,</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>                                   TInfo, <a class="code" href="namespaceclang.html#a56dabc7d0ce7d72b9a35f6f5c3f89370aebf74ba707605e744f1303f997b2477f">SC_None</a>);</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>   Decl-><a class="code" href="classclang_1_1Decl.html#aa89b44dad7f4fd7e9c15129f8f0784e4">setImplicit</a>();</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>   <span class="keywordflow">return</span> Decl;</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> }</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> </div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> }</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> </div>
+<div class="line"><a name="l01810"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a6c06a4d34f6d4285fe5fa57a2860b53d"> 1810</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a6c06a4d34f6d4285fe5fa57a2860b53d">ObjCEnumerationCollection</a>(<a class="code" href="classclang_1_1Expr.html">Expr</a> *Collection) {</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>   <span class="keywordflow">return</span> !Collection-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>           && Collection-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1ObjCObjectPointerType.html">ObjCObjectPointerType</a>>() != 0;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> }</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment"></span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="comment">/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.</span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="comment">/// C++11 [stmt.ranged]:</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <span class="comment">///   A range-based for statement is equivalent to</span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <span class="comment">///   {</span></div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <span class="comment">///     auto && __range = range-init;</span></div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="comment">///     for ( auto __begin = begin-expr,</span></div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="comment">///           __end = end-expr;</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="comment">///           __begin != __end;</span></div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment">///           ++__begin ) {</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="comment">///       for-range-declaration = *__begin;</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="comment">///       statement</span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment">///     }</span></div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="comment">///   }</span></div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment">/// The body of the loop is not available yet, since it cannot be analysed until</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="comment">/// we have determined the type of the for-range-declaration.</span></div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l01834"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a3d88d57989138252b32558cdfb9701ff"> 1834</a></span> <a class="code" href="classclang_1_1Sema.html#a3d88d57989138252b32558cdfb9701ff">Sema::ActOnCXXForRangeStmt</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> ForLoc,</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>                            <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *First, <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> ColonLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Range,</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</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> RParenLoc, <a class="code" href="classclang_1_1Sema.html#adb27e0222703403e7383ad64df4266dc">BuildForRangeKind</a> <a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a>) {</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>   <span class="keywordflow">if</span> (!First)</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> </div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>   <span class="keywordflow">if</span> (Range && <a class="code" href="SemaStmt_8cpp.html#a6c06a4d34f6d4285fe5fa57a2860b53d">ObjCEnumerationCollection</a>(Range))</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>     <span class="keywordflow">return</span> ActOnObjCForCollectionStmt(ForLoc, First, Range, RParenLoc);</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> </div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>   <a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a> *DS = dyn_cast<<a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a>>(First);</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>   assert(DS && <span class="stringliteral">"first part of for range not a decl stmt"</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="keywordflow">if</span> (!DS-><a class="code" href="classclang_1_1DeclStmt.html#a3280ac0a91f46713e8c578aa50f6ac65">isSingleDecl</a>()) {</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(DS-><a class="code" href="classclang_1_1DeclStmt.html#ac09fbe4e859cf4e759412750adff1666">getStartLoc</a>(), diag::err_type_defined_in_for_range);</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>   }</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> </div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *LoopVar = DS-><a class="code" href="classclang_1_1DeclStmt.html#a7a3a8ab21cb320cd84c3dce1e678b0b3">getSingleDecl</a>();</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>   <span class="keywordflow">if</span> (LoopVar-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>() || !Range ||</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>       DiagnoseUnexpandedParameterPack(Range, UPPC_Expression)) {</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>     LoopVar-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>   }</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> </div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>   <span class="comment">// Build  auto && __range = range-init</span></div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</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> RangeLoc = Range-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>();</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *RangeVar = BuildForRangeVarDecl(*<span class="keyword">this</span>, RangeLoc,</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>                                            <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#afa417d5671f947912b893bde3d6f72b1" title="C++11 deduction pattern for 'auto &&' type.">getAutoRRefDeductType</a>(),</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>                                            <span class="stringliteral">"__range"</span>);</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>   <span class="keywordflow">if</span> (<a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463">FinishForRangeVarDecl</a>(*<span class="keyword">this</span>, RangeVar, Range, RangeLoc,</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>                             diag::err_for_range_deduction_failure)) {</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>     LoopVar-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>   }</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>   <span class="comment">// Claim the type doesn't contain auto: we've already done the checking.</span></div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>   <a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">DeclGroupPtrTy</a> RangeGroup =</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>       BuildDeclaratorGroup(llvm::MutableArrayRef<Decl *>((<a class="code" href="classclang_1_1Decl.html">Decl</a> **)&RangeVar, 1),</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>                            <span class="comment">/*TypeMayContainAuto=*/</span> <span class="keyword">false</span>);</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>   <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> RangeDecl = ActOnDeclStmt(RangeGroup, RangeLoc, RangeLoc);</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>   <span class="keywordflow">if</span> (RangeDecl.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>     LoopVar-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</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> </div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>   <span class="keywordflow">return</span> BuildCXXForRangeStmt(ForLoc, ColonLoc, RangeDecl.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(),</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>                               <span class="comment">/*BeginEndDecl=*/</span>0, <span class="comment">/*Cond=*/</span>0, <span class="comment">/*Inc=*/</span>0, DS,</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>                               RParenLoc, <a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a>);</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> }</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> <span class="comment"></span></div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <span class="comment">/// \brief Create the initialization, compare, and increment steps for</span></div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <span class="comment">/// the range-based for loop expression.</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="comment">/// This function does not handle array-based for loops,</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="comment">/// which are created in Sema::BuildCXXForRangeStmt.</span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="comment">///</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="comment">/// \returns a ForRangeStatus indicating success or what kind of error occurred.</span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="comment">/// BeginExpr and EndExpr are set and FRS_Success is returned on success;</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment">/// CandidateSet and BEF are set and some non-success value is returned on</span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="comment">/// failure.</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a75f90e77141a6f6e4808516d7c70ba56"> 1893</a></span> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6">Sema::ForRangeStatus</a> <a class="code" href="SemaStmt_8cpp.html#a75f90e77141a6f6e4808516d7c70ba56" title="Create the initialization, compare, and increment steps for the range-based for loop expression...">BuildNonArrayForRange</a>(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &SemaRef, <a class="code" href="classclang_1_1Scope.html">Scope</a> *S,</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>                                             <a class="code" href="classclang_1_1Expr.html">Expr</a> *BeginRange, <a class="code" href="classclang_1_1Expr.html">Expr</a> *EndRange,</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>                                             <a class="code" href="classclang_1_1QualType.html">QualType</a> RangeType,</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>                                             <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *BeginVar,</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>                                             <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *EndVar,</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</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> ColonLoc,</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>                                             <a class="code" href="classclang_1_1OverloadCandidateSet.html">OverloadCandidateSet</a> *<a class="code" href="SemaOverload_8cpp.html#abc89d2b7943972f58bc9ca9737021197">CandidateSet</a>,</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>                                             <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> *BeginExpr,</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>                                             <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> *EndExpr,</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>                                             <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346">Sema::BeginEndFunction</a> *BEF) {</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>   <a class="code" href="structclang_1_1DeclarationNameInfo.html">DeclarationNameInfo</a> BeginNameInfo(</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>       &SemaRef.<a class="code" href="classclang_1_1Sema.html#a6829f2b169c74ad544c53a8b1415061b">PP</a>.<a class="code" href="classclang_1_1Preprocessor.html#a7770871c2bdcd43cfa195d5936c8e268">getIdentifierTable</a>().<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(<span class="stringliteral">"begin"</span>), ColonLoc);</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>   <a class="code" href="structclang_1_1DeclarationNameInfo.html">DeclarationNameInfo</a> EndNameInfo(&SemaRef.<a class="code" href="classclang_1_1Sema.html#a6829f2b169c74ad544c53a8b1415061b">PP</a>.<a class="code" href="classclang_1_1Preprocessor.html#a7770871c2bdcd43cfa195d5936c8e268">getIdentifierTable</a>().<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(<span class="stringliteral">"end"</span>),</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>                                   ColonLoc);</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> </div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>   <a class="code" href="classclang_1_1LookupResult.html" title="Represents the results of name lookup.">LookupResult</a> BeginMemberLookup(SemaRef, BeginNameInfo,</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>                                  <a class="code" href="classclang_1_1Sema.html#a0c6e994c44767e74e2892aa0235efb1aa93f2be273881a14dc35b733bc8653dbc">Sema::LookupMemberName</a>);</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>   <a class="code" href="classclang_1_1LookupResult.html" title="Represents the results of name lookup.">LookupResult</a> EndMemberLookup(SemaRef, EndNameInfo, <a class="code" href="classclang_1_1Sema.html#a0c6e994c44767e74e2892aa0235efb1aa93f2be273881a14dc35b733bc8653dbc">Sema::LookupMemberName</a>);</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CXXRecordDecl.html" title="Represents a C++ struct/union/class.">CXXRecordDecl</a> *D = RangeType-><a class="code" href="classclang_1_1Type.html#a7dc6c3dbc192ad98871c3cc484376b9a" title="Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...">getAsCXXRecordDecl</a>()) {</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>     <span class="comment">// - if _RangeT is a class type, the unqualified-ids begin and end are</span></div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>     <span class="comment">//   looked up in the scope of class _RangeT as if by class member access</span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>     <span class="comment">//   lookup (3.4.5), and if either (or both) finds at least one</span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>     <span class="comment">//   declaration, begin-expr and end-expr are __range.begin() and</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>     <span class="comment">//   __range.end(), respectively;</span></div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>     SemaRef.<a class="code" href="classclang_1_1Sema.html#ac5f5d2a5b4d98cf9d59b45044b83fd53" title="Perform qualified name lookup into a given context.">LookupQualifiedName</a>(BeginMemberLookup, D);</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>     SemaRef.<a class="code" href="classclang_1_1Sema.html#ac5f5d2a5b4d98cf9d59b45044b83fd53" title="Perform qualified name lookup into a given context.">LookupQualifiedName</a>(EndMemberLookup, D);</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>     <span class="keywordflow">if</span> (BeginMemberLookup.empty() != EndMemberLookup.<a class="code" href="classclang_1_1LookupResult.html#a9f44c1cd9d9c7e84dd0202538dd72cd7" title="Return true if no decls were found.">empty</a>()) {</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</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> RangeLoc = BeginVar-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>();</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>       *BEF = BeginMemberLookup.empty() ? <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346abe5d5981839ecd4c226e8b2482d0a0f3">Sema::BEF_end</a> : <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346a6a86eb613dd274e3b8c82ca657500cd7">Sema::BEF_begin</a>;</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>       SemaRef.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(RangeLoc, diag::err_for_range_member_begin_end_mismatch)</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>           << RangeLoc << BeginRange-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() << *BEF;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6a24ef1f8da9af4afecaee0ee0cca18173">Sema::FRS_DiagnosticIssued</a>;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>     }</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     <span class="comment">// - otherwise, begin-expr and end-expr are begin(__range) and</span></div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     <span class="comment">//   end(__range), respectively, where begin and end are looked up with</span></div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     <span class="comment">//   argument-dependent lookup (3.4.2). For the purposes of this name</span></div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="comment">//   lookup, namespace std is an associated namespace.</span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> </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> </div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>   *BEF = <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346a6a86eb613dd274e3b8c82ca657500cd7">Sema::BEF_begin</a>;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>   <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6">Sema::ForRangeStatus</a> RangeStatus =</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>       SemaRef.<a class="code" href="classclang_1_1Sema.html#a8581e2c813c76748f90e8b997fb75e4d">BuildForRangeBeginEndCall</a>(S, ColonLoc, ColonLoc, BeginVar,</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>                                         <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346a6a86eb613dd274e3b8c82ca657500cd7">Sema::BEF_begin</a>, BeginNameInfo,</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>                                         BeginMemberLookup, CandidateSet,</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>                                         BeginRange, BeginExpr);</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> </div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>   <span class="keywordflow">if</span> (RangeStatus != <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6a2117cf772d7a7530ccfb952bfbb192a9">Sema::FRS_Success</a>)</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>     <span class="keywordflow">return</span> RangeStatus;</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>   <span class="keywordflow">if</span> (<a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463">FinishForRangeVarDecl</a>(SemaRef, BeginVar, BeginExpr-><a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), ColonLoc,</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>                             diag::err_for_range_iter_deduction_failure)) {</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     NoteForRangeBeginEndFunction(SemaRef, BeginExpr-><a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), *BEF);</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6a24ef1f8da9af4afecaee0ee0cca18173">Sema::FRS_DiagnosticIssued</a>;</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>   }</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> </div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>   *BEF = <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346abe5d5981839ecd4c226e8b2482d0a0f3">Sema::BEF_end</a>;</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>   RangeStatus =</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>       SemaRef.<a class="code" href="classclang_1_1Sema.html#a8581e2c813c76748f90e8b997fb75e4d">BuildForRangeBeginEndCall</a>(S, ColonLoc, ColonLoc, EndVar,</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>                                         <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346abe5d5981839ecd4c226e8b2482d0a0f3">Sema::BEF_end</a>, EndNameInfo,</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>                                         EndMemberLookup, CandidateSet,</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>                                         EndRange, EndExpr);</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>   <span class="keywordflow">if</span> (RangeStatus != <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6a2117cf772d7a7530ccfb952bfbb192a9">Sema::FRS_Success</a>)</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>     <span class="keywordflow">return</span> RangeStatus;</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>   <span class="keywordflow">if</span> (<a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463">FinishForRangeVarDecl</a>(SemaRef, EndVar, EndExpr-><a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), ColonLoc,</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>                             diag::err_for_range_iter_deduction_failure)) {</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>     NoteForRangeBeginEndFunction(SemaRef, EndExpr-><a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), *BEF);</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6a24ef1f8da9af4afecaee0ee0cca18173">Sema::FRS_DiagnosticIssued</a>;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>   }</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6a2117cf772d7a7530ccfb952bfbb192a9">Sema::FRS_Success</a>;</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> }</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment"></span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment">/// Speculatively attempt to dereference an invalid range expression.</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="comment">/// If the attempt fails, this function will return a valid, null StmtResult</span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment">/// and emit no diagnostics.</span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a2a51904bd3c22024958dff30d268fb16"> 1971</a></span> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="SemaStmt_8cpp.html#a2a51904bd3c22024958dff30d268fb16">RebuildForRangeWithDereference</a>(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &SemaRef, <a class="code" href="classclang_1_1Scope.html">Scope</a> *S,</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</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> ForLoc,</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>                                                  <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *LoopVarDecl,</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</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> ColonLoc,</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>                                                  <a class="code" href="classclang_1_1Expr.html">Expr</a> *Range,</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</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> RangeLoc,</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</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> RParenLoc) {</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>   <span class="comment">// Determine whether we can rebuild the for-range statement with a</span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>   <span class="comment">// dereferenced range expression.</span></div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> AdjustedRange;</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>   {</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>     <a class="code" href="classclang_1_1Sema_1_1SFINAETrap.html" title="RAII class used to determine whether SFINAE has trapped any errors that occur during template argumen...">Sema::SFINAETrap</a> Trap(SemaRef);</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> </div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>     AdjustedRange = SemaRef.<a class="code" href="classclang_1_1Sema.html#aa1b94b6fbf559f2ef2300f5ebad7ae86">BuildUnaryOp</a>(S, RangeLoc, <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa7fa8b49244d53a4c50b7d8e63257449e">UO_Deref</a>, Range);</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>     <span class="keywordflow">if</span> (AdjustedRange.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a90866086cf9f548cb4d1acff399d32ed">StmtResult</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>     <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> SR =</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>       SemaRef.<a class="code" href="classclang_1_1Sema.html#a3d88d57989138252b32558cdfb9701ff">ActOnCXXForRangeStmt</a>(ForLoc, LoopVarDecl, ColonLoc,</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>                                    AdjustedRange.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), RParenLoc,</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>                                    <a class="code" href="classclang_1_1Sema.html#adb27e0222703403e7383ad64df4266dca18f0ff15e9c0c815dd0f92017fe5ad0c">Sema::BFRK_Check</a>);</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>     <span class="keywordflow">if</span> (SR.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a90866086cf9f548cb4d1acff399d32ed">StmtResult</a>();</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>   }</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> </div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>   <span class="comment">// The attempt to dereference worked well enough that it could produce a valid</span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>   <span class="comment">// loop. Produce a fixit, and rebuild the loop with diagnostics enabled, in</span></div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>   <span class="comment">// case there are any other (non-fatal) problems with it.</span></div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>   SemaRef.<a class="code" href="classclang_1_1Sema.html#ad29dfd1f2677772bf6b1da186a7583c3" title="Emit a diagnostic.">Diag</a>(RangeLoc, diag::err_for_range_dereference)</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>     << Range-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() << <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>(RangeLoc, <span class="stringliteral">"*"</span>);</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>   <span class="keywordflow">return</span> SemaRef.<a class="code" href="classclang_1_1Sema.html#a3d88d57989138252b32558cdfb9701ff">ActOnCXXForRangeStmt</a>(ForLoc, LoopVarDecl, ColonLoc,</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>                                       AdjustedRange.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), RParenLoc,</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>                                       <a class="code" href="classclang_1_1Sema.html#adb27e0222703403e7383ad64df4266dcad6dadf2cc01dd2c9e2cb8b506a7f5862">Sema::BFRK_Rebuild</a>);</div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> }</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> </div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="keyword">namespace </span>{<span class="comment"></span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="comment">/// RAII object to automatically invalidate a declaration if an error occurs.</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="comment"></span><span class="keyword">struct </span>InvalidateOnErrorScope {</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>   InvalidateOnErrorScope(<a class="code" href="classclang_1_1Sema.html" title="Sema - This implements semantic analysis and AST building for C.">Sema</a> &SemaRef, <a class="code" href="classclang_1_1Decl.html">Decl</a> *D, <span class="keywordtype">bool</span> Enabled)</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>       : Trap(SemaRef.Diags), D(D), Enabled(Enabled) {}</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>   ~InvalidateOnErrorScope() {</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>     <span class="keywordflow">if</span> (Enabled && Trap.hasErrorOccurred())</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>       D-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</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>   <a class="code" href="classclang_1_1DiagnosticErrorTrap.html" title="RAII class that determines when any errors have occurred between the time the instance was created an...">DiagnosticErrorTrap</a> Trap;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>   <a class="code" href="classclang_1_1Decl.html">Decl</a> *D;</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>   <span class="keywordtype">bool</span> Enabled;</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> };</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> }</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="comment"></span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="comment">/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.</span></div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02024"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#aad0ea139d1e414d25cc6ad1b58ade126"> 2024</a></span> <a class="code" href="classclang_1_1Sema.html#aad0ea139d1e414d25cc6ad1b58ade126" title="BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.">Sema::BuildCXXForRangeStmt</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> ForLoc, <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> ColonLoc,</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>                            <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *RangeDecl, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *BeginEnd, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Cond,</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>                            <a class="code" href="classclang_1_1Expr.html">Expr</a> *Inc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *LoopVarDecl,</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</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> RParenLoc, <a class="code" href="classclang_1_1Sema.html#adb27e0222703403e7383ad64df4266dc">BuildForRangeKind</a> <a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a>) {</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>   <a class="code" href="classclang_1_1Scope.html">Scope</a> *S = getCurScope();</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> </div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>   <a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a> *RangeDS = cast<DeclStmt>(RangeDecl);</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *RangeVar = cast<VarDecl>(RangeDS-><a class="code" href="classclang_1_1DeclStmt.html#a7a3a8ab21cb320cd84c3dce1e678b0b3">getSingleDecl</a>());</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> RangeVarType = RangeVar->getType();</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> </div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>   <a class="code" href="classclang_1_1DeclStmt.html">DeclStmt</a> *LoopVarDS = cast<DeclStmt>(LoopVarDecl);</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *LoopVar = cast<VarDecl>(LoopVarDS-><a class="code" href="classclang_1_1DeclStmt.html#a7a3a8ab21cb320cd84c3dce1e678b0b3">getSingleDecl</a>());</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> </div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>   <span class="comment">// If we hit any errors, mark the loop variable as invalid if its type</span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>   <span class="comment">// contains 'auto'.</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>   InvalidateOnErrorScope Invalidate(*<span class="keyword">this</span>, LoopVar,</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>                                     LoopVar->getType()->isUndeducedType());</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> </div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>   <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> BeginEndDecl = BeginEnd;</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> NotEqExpr = Cond, IncrExpr = Inc;</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> </div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>   <span class="keywordflow">if</span> (RangeVarType->isDependentType()) {</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>     <span class="comment">// The range is implicitly used as a placeholder when it is dependent.</span></div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>     RangeVar->markUsed(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> </div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>     <span class="comment">// Deduce any 'auto's in the loop variable as 'DependentTy'. We'll fill</span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>     <span class="comment">// them in properly when we instantiate the loop.</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>     <span class="keywordflow">if</span> (!LoopVar->isInvalidDecl() && Kind != BFRK_Check)</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>       LoopVar-><a class="code" href="classclang_1_1Expr.html#a3b6971eecc3301041ba0d18a91fa1ceb">setType</a>(SubstAutoType(LoopVar->getType(), <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a4b9c29396317bed688dfe9d5b909f04f">DependentTy</a>));</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!BeginEndDecl.get()) {</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</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> RangeLoc = RangeVar->getLocation();</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> </div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1QualType.html">QualType</a> RangeVarNonRefType = RangeVarType.<a class="code" href="classclang_1_1QualType.html#ab6a2e89b5fcb1618aaef3a38563b10e4">getNonReferenceType</a>();</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> </div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> BeginRangeRef = BuildDeclRefExpr(RangeVar, RangeVarNonRefType,</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>                                                 <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340ab67545101f6b01efc1ecf6a0cefc7ee7" title="An l-value expression is a reference to an object with independent storage.">VK_LValue</a>, ColonLoc);</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     <span class="keywordflow">if</span> (BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> </div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> EndRangeRef = BuildDeclRefExpr(RangeVar, RangeVarNonRefType,</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>                                               <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340ab67545101f6b01efc1ecf6a0cefc7ee7" title="An l-value expression is a reference to an object with independent storage.">VK_LValue</a>, ColonLoc);</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>     <span class="keywordflow">if</span> (EndRangeRef.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> </div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> <a class="code" href="classclang_1_1AutoType.html" title="Represents a C++11 auto or C++1y decltype(auto) type.">AutoType</a> = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a68060612e7562d2637feed35a027a0be" title="C++11 deduction pattern for 'auto' type.">getAutoDeductType</a>();</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>     <a class="code" href="classclang_1_1Expr.html">Expr</a> *Range = RangeVar->getInit();</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>     <span class="keywordflow">if</span> (!Range)</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> RangeType = Range-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> </div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>     <span class="keywordflow">if</span> (RequireCompleteType(RangeLoc, RangeType,</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>                             diag::err_for_range_incomplete_type))</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> </div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>     <span class="comment">// Build auto __begin = begin-expr, __end = end-expr.</span></div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>     <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *BeginVar = BuildForRangeVarDecl(*<span class="keyword">this</span>, ColonLoc, AutoType,</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>                                              <span class="stringliteral">"__begin"</span>);</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>     <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *EndVar = BuildForRangeVarDecl(*<span class="keyword">this</span>, ColonLoc, AutoType,</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>                                            <span class="stringliteral">"__end"</span>);</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>     <span class="comment">// Build begin-expr and end-expr and attach to __begin and __end variables.</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> BeginExpr, EndExpr;</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ArrayType.html">ArrayType</a> *UnqAT = RangeType-><a class="code" href="classclang_1_1Type.html#ae2ffc12f9601382aa216450a2d33c823">getAsArrayTypeUnsafe</a>()) {</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>       <span class="comment">// - if _RangeT is an array type, begin-expr and end-expr are __range and</span></div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>       <span class="comment">//   __range + __bound, respectively, where __bound is the array bound. If</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>       <span class="comment">//   _RangeT is an array of unknown size or an array of incomplete type,</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>       <span class="comment">//   the program is ill-formed;</span></div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> </div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>       <span class="comment">// begin-expr is __range.</span></div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>       BeginExpr = BeginRangeRef;</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>       <span class="keywordflow">if</span> (<a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463">FinishForRangeVarDecl</a>(*<span class="keyword">this</span>, BeginVar, BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), ColonLoc,</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>                                 diag::err_for_range_iter_deduction_failure)) {</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>         NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_begin);</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>       }</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> </div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>       <span class="comment">// Find the array bound.</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> BoundExpr;</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>       <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ConstantArrayType.html">ConstantArrayType</a> *CAT = dyn_cast<ConstantArrayType>(UnqAT))</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>         BoundExpr = Owned(<a class="code" href="classclang_1_1IntegerLiteral.html#a68782c17506bd26183c21aa2bf9dc1d7" title="Returns a new integer literal with value 'V' and type 'type'.">IntegerLiteral::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, CAT->getSize(),</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>                                                  <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#abdf7588b14d9fa2a1ee40900a0253885" title="Return the unique type for "ptrdiff_t" (C99 7.17) defined in <stddef.h>. Pointer - pointer requires t...">getPointerDiffType</a>(),</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>                                                  RangeLoc));</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VariableArrayType.html">VariableArrayType</a> *VAT =</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>                dyn_cast<VariableArrayType>(UnqAT))</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>         BoundExpr = VAT->getSizeExpr();</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>         <span class="comment">// Can't be a DependentSizedArrayType or an IncompleteArrayType since</span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>         <span class="comment">// UnqAT is not incomplete and Range is not type-dependent.</span></div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>         llvm_unreachable(<span class="stringliteral">"Unexpected array type in for-range"</span>);</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>       }</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> </div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>       <span class="comment">// end-expr is __range + __bound.</span></div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>       EndExpr = ActOnBinOp(S, ColonLoc, tok::plus, EndRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(),</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>                            BoundExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>());</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>       <span class="keywordflow">if</span> (EndExpr.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>       <span class="keywordflow">if</span> (<a class="code" href="SemaStmt_8cpp.html#a0616b5b17d544b250c0782486e31b463">FinishForRangeVarDecl</a>(*<span class="keyword">this</span>, EndVar, EndExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), ColonLoc,</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>                                 diag::err_for_range_iter_deduction_failure)) {</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>         NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, EndExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_end);</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</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>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>       <a class="code" href="classclang_1_1OverloadCandidateSet.html">OverloadCandidateSet</a> <a class="code" href="SemaOverload_8cpp.html#abc89d2b7943972f58bc9ca9737021197">CandidateSet</a>(RangeLoc);</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>       <a class="code" href="classclang_1_1Sema.html#aca6a9a5408a655aad573d5012f056346">Sema::BeginEndFunction</a> BEFFailure;</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>       <a class="code" href="classclang_1_1Sema.html#a4ccac4b209caef8f2b9f04f85e1ea9a6">ForRangeStatus</a> RangeStatus =</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>           <a class="code" href="SemaStmt_8cpp.html#a75f90e77141a6f6e4808516d7c70ba56" title="Create the initialization, compare, and increment steps for the range-based for loop expression...">BuildNonArrayForRange</a>(*<span class="keyword">this</span>, S, BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(),</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>                                 EndRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), RangeType,</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>                                 BeginVar, EndVar, ColonLoc, &<a class="code" href="SemaOverload_8cpp.html#abc89d2b7943972f58bc9ca9737021197">CandidateSet</a>,</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>                                 &BeginExpr, &EndExpr, &BEFFailure);</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> </div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>       <span class="keywordflow">if</span> (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction &&</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>           BEFFailure == BEF_begin) {</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>         <span class="comment">// If the range is being built from an array parameter, emit a</span></div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>         <span class="comment">// a diagnostic that it is being treated as a pointer.</span></div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>         <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DRE = dyn_cast<DeclRefExpr>(Range)) {</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>           <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1ParmVarDecl.html" title="ParmVarDecl - Represents a parameter to a function.">ParmVarDecl</a> *PVD = dyn_cast<ParmVarDecl>(DRE-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>())) {</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>             <a class="code" href="classclang_1_1QualType.html">QualType</a> ArrayTy = PVD->getOriginalType();</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>             <a class="code" href="classclang_1_1QualType.html">QualType</a> PointerTy = PVD->getType();</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>             <span class="keywordflow">if</span> (PointerTy-><a class="code" href="classclang_1_1Type.html#a1c0038a55083ee0a292a020038ee04d8">isPointerType</a>() && ArrayTy-><a class="code" href="classclang_1_1Type.html#a53b83bd119ae77bc77e92dc69a8c8094">isArrayType</a>()) {</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>               <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Range-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(), diag::err_range_on_array_parameter)</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>                 << RangeLoc << PVD << ArrayTy << PointerTy;</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>               <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(PVD->getLocation(), diag::note_declared_at);</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>               <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>             }</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>           }</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>         }</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> </div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>         <span class="comment">// If building the range failed, try dereferencing the range expression</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>         <span class="comment">// unless a diagnostic was issued or the end function is problematic.</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>         <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> SR = <a class="code" href="SemaStmt_8cpp.html#a2a51904bd3c22024958dff30d268fb16">RebuildForRangeWithDereference</a>(*<span class="keyword">this</span>, S, ForLoc,</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>                                                        LoopVarDecl, ColonLoc,</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>                                                        Range, RangeLoc,</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>                                                        RParenLoc);</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>         <span class="keywordflow">if</span> (SR.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>() || SR.<a class="code" href="classclang_1_1ActionResult.html#ae70d0a2fa83269f71f1634cb9e0dc3d6">isUsable</a>())</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>           <span class="keywordflow">return</span> SR;</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>       }</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> </div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>       <span class="comment">// Otherwise, emit diagnostics if we haven't already.</span></div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>       <span class="keywordflow">if</span> (RangeStatus == FRS_NoViableFunction) {</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>         <a class="code" href="classclang_1_1Expr.html">Expr</a> *Range = BEFFailure ? EndRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>() : BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>();</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Range-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>(), diag::err_for_range_invalid)</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>             << RangeLoc << Range-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() << BEFFailure;</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>         CandidateSet.NoteCandidates(*<span class="keyword">this</span>, <a class="code" href="namespaceclang.html#a3ce3c6880778c7d92a230990a5f39611ad824b49b636dff38aed34f9bd438295c">OCD_AllCandidates</a>, Range);</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>       }</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>       <span class="comment">// Return an error if no fix was discovered.</span></div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>       <span class="keywordflow">if</span> (RangeStatus != FRS_Success)</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</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> </div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>     assert(!BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>() && !EndExpr.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>() &&</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>            <span class="stringliteral">"invalid range expression in for loop"</span>);</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> </div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>     <span class="comment">// C++11 [dcl.spec.auto]p7: BeginType and EndType must be the same.</span></div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> BeginType = BeginVar-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>(), EndType = EndVar-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>     <span class="keywordflow">if</span> (!<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a889b9d309fdc236f1eab037484f10f8a" title="Determine whether the given types T1 and T2 are equivalent.">hasSameType</a>(BeginType, EndType)) {</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RangeLoc, diag::err_for_range_begin_end_types_differ)</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>         << BeginType << EndType;</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>       NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_begin);</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>       NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, EndExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_end);</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</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>     <a class="code" href="classclang_1_1Decl.html">Decl</a> *BeginEndDecls[] = { BeginVar, EndVar };</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>     <span class="comment">// Claim the type doesn't contain auto: we've already done the checking.</span></div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>     <a class="code" href="classclang_1_1OpaquePtr.html" title="Wrapper for void* pointer.">DeclGroupPtrTy</a> BeginEndGroup =</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>         BuildDeclaratorGroup(llvm::MutableArrayRef<Decl *>(BeginEndDecls, 2),</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>                              <span class="comment">/*TypeMayContainAuto=*/</span> <span class="keyword">false</span>);</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     BeginEndDecl = ActOnDeclStmt(BeginEndGroup, ColonLoc, ColonLoc);</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> </div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1QualType.html">QualType</a> BeginRefNonRefType = BeginType.<a class="code" href="classclang_1_1QualType.html#ab6a2e89b5fcb1618aaef3a38563b10e4">getNonReferenceType</a>();</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> BeginRef = BuildDeclRefExpr(BeginVar, BeginRefNonRefType,</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>                                            <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340ab67545101f6b01efc1ecf6a0cefc7ee7" title="An l-value expression is a reference to an object with independent storage.">VK_LValue</a>, ColonLoc);</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>     <span class="keywordflow">if</span> (BeginRef.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> </div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> EndRef = BuildDeclRefExpr(EndVar, EndType.getNonReferenceType(),</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>                                          <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340ab67545101f6b01efc1ecf6a0cefc7ee7" title="An l-value expression is a reference to an object with independent storage.">VK_LValue</a>, ColonLoc);</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>     <span class="keywordflow">if</span> (EndRef.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</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>     <span class="comment">// Build and check __begin != __end expression.</span></div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>     NotEqExpr = ActOnBinOp(S, ColonLoc, tok::exclaimequal,</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>                            BeginRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), EndRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>());</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>     NotEqExpr = ActOnBooleanCondition(S, ColonLoc, NotEqExpr.get());</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>     NotEqExpr = ActOnFinishFullExpr(NotEqExpr.get());</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>     <span class="keywordflow">if</span> (NotEqExpr.isInvalid()) {</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RangeLoc, diag::note_for_range_invalid_iterator)</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>         << RangeLoc << 0 << BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>       NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_begin);</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>       <span class="keywordflow">if</span> (!<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a889b9d309fdc236f1eab037484f10f8a" title="Determine whether the given types T1 and T2 are equivalent.">hasSameType</a>(BeginType, EndType))</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>         NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, EndExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_end);</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>     }</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> </div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>     <span class="comment">// Build and check ++__begin expression.</span></div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>     BeginRef = BuildDeclRefExpr(BeginVar, BeginRefNonRefType,</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>                                 <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340ab67545101f6b01efc1ecf6a0cefc7ee7" title="An l-value expression is a reference to an object with independent storage.">VK_LValue</a>, ColonLoc);</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>     <span class="keywordflow">if</span> (BeginRef.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> </div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>     IncrExpr = ActOnUnaryOp(S, ColonLoc, tok::plusplus, BeginRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>());</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>     IncrExpr = ActOnFinishFullExpr(IncrExpr.get());</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>     <span class="keywordflow">if</span> (IncrExpr.isInvalid()) {</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RangeLoc, diag::note_for_range_invalid_iterator)</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>         << RangeLoc << 2 << BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() ;</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>       NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_begin);</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>     }</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> </div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>     <span class="comment">// Build and check *__begin  expression.</span></div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>     BeginRef = BuildDeclRefExpr(BeginVar, BeginRefNonRefType,</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>                                 <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340ab67545101f6b01efc1ecf6a0cefc7ee7" title="An l-value expression is a reference to an object with independent storage.">VK_LValue</a>, ColonLoc);</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>     <span class="keywordflow">if</span> (BeginRef.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> </div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> DerefExpr = ActOnUnaryOp(S, ColonLoc, tok::star, BeginRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>());</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>     <span class="keywordflow">if</span> (DerefExpr.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RangeLoc, diag::note_for_range_invalid_iterator)</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>         << RangeLoc << 1 << BeginRangeRef.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>       NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_begin);</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>     }</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> </div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>     <span class="comment">// Attach  *__begin  as initializer for VD. Don't touch it if we're just</span></div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>     <span class="comment">// trying to determine whether this would be a valid range.</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>     <span class="keywordflow">if</span> (!LoopVar->isInvalidDecl() && Kind != BFRK_Check) {</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>       AddInitializerToDecl(LoopVar, DerefExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), <span class="comment">/*DirectInit=*/</span><span class="keyword">false</span>,</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>                            <span class="comment">/*TypeMayContainAuto=*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>       <span class="keywordflow">if</span> (LoopVar->isInvalidDecl())</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>         NoteForRangeBeginEndFunction(*<span class="keyword">this</span>, BeginExpr.<a class="code" href="classclang_1_1ActionResult.html#a75d6bbdafaa638e85809e113629401ca">get</a>(), BEF_begin);</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>     }</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>   }</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> </div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>   <span class="comment">// Don't bother to actually allocate the result if we're just trying to</span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>   <span class="comment">// determine whether it would be valid.</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>   <span class="keywordflow">if</span> (Kind == BFRK_Check)</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a90866086cf9f548cb4d1acff399d32ed">StmtResult</a>();</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> </div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>(RangeDS,</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>                                      cast_or_null<DeclStmt>(BeginEndDecl.get()),</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>                                              NotEqExpr.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>(), IncrExpr.take(),</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>                                              LoopVarDS, <span class="comment">/*Body=*/</span>0, ForLoc,</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>                                              ColonLoc, RParenLoc));</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> }</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="comment"></span></div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="comment">/// FinishObjCForCollectionStmt - Attach the body to a objective-C foreach</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="comment">/// statement.</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a6da9e778b9ddf2b3afff1edee4066f35"> 2270</a></span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a6da9e778b9ddf2b3afff1edee4066f35">Sema::FinishObjCForCollectionStmt</a>(<a class="code" href="classclang_1_1Stmt.html">Stmt</a> *S, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *B) {</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>   <span class="keywordflow">if</span> (!S || !B)</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>   <a class="code" href="classclang_1_1ObjCForCollectionStmt.html" title="Represents Objective-C's collection statement.">ObjCForCollectionStmt</a> * <a class="code" href="classclang_1_1ForStmt.html">ForStmt</a> = cast<ObjCForCollectionStmt>(<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>);</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> </div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>   ForStmt-><a class="code" href="classclang_1_1ObjCForCollectionStmt.html#a6f354f82d5a9b0483181ab318c06364f">setBody</a>(B);</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>   <span class="keywordflow">return</span> <a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>;</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> }</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="comment"></span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="comment">/// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.</span></div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> <span class="comment">/// This is a separate step from ActOnCXXForRangeStmt because analysis of the</span></div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="comment">/// body cannot be performed until after the type of the range variable is</span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="comment">/// determined.</span></div>
+<div class="line"><a name="l02283"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#afe4e92e3b38eecb1e5389f68e20485c3"> 2283</a></span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#afe4e92e3b38eecb1e5389f68e20485c3">Sema::FinishCXXForRangeStmt</a>(<a class="code" href="classclang_1_1Stmt.html">Stmt</a> *S, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *B) {</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>   <span class="keywordflow">if</span> (!S || !B)</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> </div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>   <span class="keywordflow">if</span> (isa<ObjCForCollectionStmt>(S))</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>     <span class="keywordflow">return</span> FinishObjCForCollectionStmt(S, B);</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>   <a class="code" href="classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a> *<a class="code" href="classclang_1_1ForStmt.html">ForStmt</a> = cast<CXXForRangeStmt>(<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>);</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>   ForStmt-><a class="code" href="classclang_1_1CXXForRangeStmt.html#aae994a801e5c48892ffe51bf63979efe">setBody</a>(B);</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> </div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>   DiagnoseEmptyStmtBody(ForStmt-><a class="code" href="classclang_1_1CXXForRangeStmt.html#a5dd5c4fb2a21ffb4f79a5aaf1cfa8d7e">getRParenLoc</a>(), B,</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>                         diag::warn_empty_range_based_for_body);</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> </div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>   <span class="keywordflow">return</span> <a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>;</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> }</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> </div>
+<div class="line"><a name="l02299"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a28dee78d228fc2cb704014f226c0fbda"> 2299</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a28dee78d228fc2cb704014f226c0fbda">Sema::ActOnGotoStmt</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> GotoLoc,</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> LabelLoc,</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>                                <a class="code" href="classclang_1_1LabelDecl.html">LabelDecl</a> *TheDecl) {</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>   getCurFunction()->setHasBranchIntoScope();</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>   TheDecl-><a class="code" href="classclang_1_1Decl.html#a522f503bcbd588c251157ad20fe61362" title="Mark the declaration used, in the sense of odr-use.">markUsed</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>);</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1GotoStmt.html">GotoStmt</a>(TheDecl, GotoLoc, LabelLoc));</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> }</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_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02308"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a9c243576555f97e765584eda6323be2a"> 2308</a></span> <a class="code" href="classclang_1_1Sema.html#a9c243576555f97e765584eda6323be2a">Sema::ActOnIndirectGotoStmt</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> GotoLoc, <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> StarLoc,</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>                             <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>   <span class="comment">// Convert operand to void*</span></div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>   <span class="keywordflow">if</span> (!E-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()) {</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> ETy = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> DestTy = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a3574cad49cba0fc48ab7b4c953e7e31e" title="Return the uniqued reference to the type for a pointer to the specified type.">getPointerType</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#aaa9dd0ebd4ff2e55c572f5718b7af508">VoidTy</a>.<a class="code" href="classclang_1_1CanQual.html#a788438f6f48e273fe9d64ef4df9ff2fb" title="Retrieves a version of this type with const applied. Note that this does not always yield a canonical...">withConst</a>());</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ExprRes = Owned(E);</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>     <a class="code" href="classclang_1_1Sema.html#a989c30946e5cabc831bca08a8da4b3dd">AssignConvertType</a> ConvTy =</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>       CheckSingleAssignmentConstraints(DestTy, ExprRes);</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>     <span class="keywordflow">if</span> (ExprRes.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>     E = ExprRes.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>     <span class="keywordflow">if</span> (DiagnoseAssignmentResult(ConvTy, StarLoc, DestTy, ETy, E, AA_Passing))</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>   }</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> </div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ExprRes = ActOnFinishFullExpr(E);</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>   <span class="keywordflow">if</span> (ExprRes.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>   E = ExprRes.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> </div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>   getCurFunction()->setHasIndirectGoto();</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> </div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1IndirectGotoStmt.html">IndirectGotoStmt</a>(GotoLoc, StarLoc, E));</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> }</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> </div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02335"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ab6ea8d8cd18d692c85e4262033ca9614"> 2335</a></span> <a class="code" href="classclang_1_1Sema.html#ab6ea8d8cd18d692c85e4262033ca9614">Sema::ActOnContinueStmt</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> ContinueLoc, <a class="code" href="classclang_1_1Scope.html">Scope</a> *CurScope) {</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>   <a class="code" href="classclang_1_1Scope.html">Scope</a> *S = CurScope-><a class="code" href="classclang_1_1Scope.html#a6f82de1da79a515d1ea8f03710e04d82">getContinueParent</a>();</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>   <span class="keywordflow">if</span> (!S) {</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>     <span class="comment">// C99 6.8.6.2p1: A break shall appear only in or as a loop body.</span></div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ContinueLoc, diag::err_continue_not_in_loop));</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> </div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ContinueStmt.html">ContinueStmt</a>(ContinueLoc));</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> </div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02346"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#aced70ce29976fa85f487f6a25bfca9a7"> 2346</a></span> <a class="code" href="classclang_1_1Sema.html#aced70ce29976fa85f487f6a25bfca9a7">Sema::ActOnBreakStmt</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> BreakLoc, <a class="code" href="classclang_1_1Scope.html">Scope</a> *CurScope) {</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>   <a class="code" href="classclang_1_1Scope.html">Scope</a> *S = CurScope-><a class="code" href="classclang_1_1Scope.html#aa7d27f810754bc53d060f50b4595f29b">getBreakParent</a>();</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>   <span class="keywordflow">if</span> (!S) {</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>     <span class="comment">// C99 6.8.6.3p1: A break shall appear only in or as a switch/loop body.</span></div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(BreakLoc, diag::err_break_not_in_loop_or_switch));</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> </div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1BreakStmt.html">BreakStmt</a>(BreakLoc));</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> }</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="comment"></span></div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> <span class="comment">/// \brief Determine whether the given expression is a candidate for</span></div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> <span class="comment">/// copy elision in either a return statement or a throw expression.</span></div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> <span class="comment">/// \param ReturnType If we're determining the copy elision candidate for</span></div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> <span class="comment">/// a return statement, this is the return type of the function. If we're</span></div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> <span class="comment">/// determining the copy elision candidate for a throw expression, this will</span></div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="comment">/// be a NULL type.</span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> <span class="comment">/// \param E The expression being returned from the function or block, or</span></div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="comment">/// being thrown.</span></div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="comment">/// \param AllowFunctionParameter Whether we allow function parameters to</span></div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="comment">/// be considered NRVO candidates. C++ prohibits this for NRVO itself, but</span></div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> <span class="comment">/// we re-use this logic to determine whether we should try to move as part of</span></div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> <span class="comment">/// a return or throw (which does allow function parameters).</span></div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="comment">/// \returns The NRVO candidate variable, if the return statement may use the</span></div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> <span class="comment">/// NRVO, or NULL if there is no such candidate.</span></div>
+<div class="line"><a name="l02374"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a39c5fea68b8e3fa4460de45981b5d418"> 2374</a></span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *<a class="code" href="classclang_1_1Sema.html#a39c5fea68b8e3fa4460de45981b5d418" title="Determine whether the given expression is a candidate for copy elision in either a return statement o...">Sema::getCopyElisionCandidate</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> ReturnType,</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>                                              <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>                                              <span class="keywordtype">bool</span> AllowFunctionParameter) {</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> ExprType = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>   <span class="comment">// - in a return statement in a function with ...</span></div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>   <span class="comment">// ... a class return type ...</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>   <span class="keywordflow">if</span> (!ReturnType.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>()) {</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>     <span class="keywordflow">if</span> (!ReturnType-><a class="code" href="classclang_1_1Type.html#a6525adb10d549a7ee372424dcdb6b9bd">isRecordType</a>())</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>       <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>     <span class="comment">// ... the same cv-unqualified type as the function return type ...</span></div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>     <span class="keywordflow">if</span> (!<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a40efa7d4fe133c0a709f0df4b6fcc2bf" title="Determine whether the given types are equivalent after cvr-qualifiers have been removed.">hasSameUnqualifiedType</a>(ReturnType, ExprType))</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>       <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>   }</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> </div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>   <span class="comment">// ... the expression is the name of a non-volatile automatic object</span></div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>   <span class="comment">// (other than a function or catch-clause parameter)) ...</span></div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(E-><a class="code" href="classclang_1_1Expr.html#a6128786ad6c6ad61b66ad4ddf09b1bd8">IgnoreParens</a>());</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>   <span class="keywordflow">if</span> (!DR || DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a771346de459eacc4867cf6d6740c75b8">refersToEnclosingLocal</a>())</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>());</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>   <span class="keywordflow">if</span> (!VD)</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> </div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>   <span class="comment">// ...object (other than a function or catch-clause parameter)...</span></div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>   <span class="keywordflow">if</span> (VD-><a class="code" href="classclang_1_1Decl.html#a6c53e861dae5545e8f6974af04cb2986">getKind</a>() != Decl::Var &&</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>       !(AllowFunctionParameter && VD-><a class="code" href="classclang_1_1Decl.html#a6c53e861dae5545e8f6974af04cb2986">getKind</a>() == Decl::ParmVar))</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>   <span class="keywordflow">if</span> (VD-><a class="code" href="classclang_1_1VarDecl.html#a6f54f1f540dd93f3eb79c0c323a09615" title="Determine whether this variable is the exception variable in a C++ catch statememt or an Objective-C ...">isExceptionVariable</a>()) <span class="keywordflow">return</span> 0;</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="comment">// ...automatic...</span></div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>   <span class="keywordflow">if</span> (!VD-><a class="code" href="classclang_1_1VarDecl.html#a86bb48bd6ced47b79a59af7df7108184">hasLocalStorage</a>()) <span class="keywordflow">return</span> 0;</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>   <span class="comment">// ...non-volatile...</span></div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>   <span class="keywordflow">if</span> (VD-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>().<a class="code" href="classclang_1_1QualType.html#ace32f56eadc42b2bcf235fccd5a571af" title="Determine whether this type is volatile-qualified.">isVolatileQualified</a>()) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>   <span class="keywordflow">if</span> (VD-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>()-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>()) <span class="keywordflow">return</span> 0;</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">// __block variables can't be allocated in a way that permits NRVO.</span></div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>   <span class="keywordflow">if</span> (VD-><a class="code" href="classclang_1_1Decl.html#ac60cc8b34313e03a5c40277c5c5ad61b">hasAttr</a><<a class="code" href="classclang_1_1BlocksAttr.html">BlocksAttr</a>>()) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> </div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>   <span class="comment">// Variables with higher required alignment than their type's ABI</span></div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>   <span class="comment">// alignment cannot use NRVO.</span></div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>   <span class="keywordflow">if</span> (VD-><a class="code" href="classclang_1_1Decl.html#ac60cc8b34313e03a5c40277c5c5ad61b">hasAttr</a><<a class="code" href="classclang_1_1AlignedAttr.html">AlignedAttr</a>>() &&</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>       <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#addc194ad79f18e8de0cc0d34ab389eb6" title="Return a conservative estimate of the alignment of the specified decl D.">getDeclAlign</a>(VD) > <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a78053c06e4477f81b295cac200144fc4" title="Return the ABI-specified alignment of a (complete) type T, in characters.">getTypeAlignInChars</a>(VD-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>()))</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> </div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>   <span class="keywordflow">return</span> VD;</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> }</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> <span class="comment"></span></div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> <span class="comment">/// \brief Perform the initialization of a potentially-movable value, which</span></div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="comment">/// is the result of return value.</span></div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> <span class="comment">/// This routine implements C++0x [class.copy]p33, which attempts to treat</span></div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> <span class="comment">/// returned lvalues as rvalues in certain cases (to prefer move construction),</span></div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="comment">/// then falls back to treating them as lvalues if that failed.</span></div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">ExprResult</a></div>
+<div class="line"><a name="l02429"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a2409738f33f1090b0c54a253948cf90d"> 2429</a></span> <a class="code" href="classclang_1_1Sema.html#a2409738f33f1090b0c54a253948cf90d" title="Perform the initialization of a potentially-movable value, which is the result of return value...">Sema::PerformMoveOrCopyInitialization</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1InitializedEntity.html" title="Describes an entity that is being initialized.">InitializedEntity</a> &Entity,</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>                                       <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *NRVOCandidate,</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>                                       <a class="code" href="classclang_1_1QualType.html">QualType</a> ResultType,</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>                                       <a class="code" href="classclang_1_1Expr.html">Expr</a> *<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>,</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>                                       <span class="keywordtype">bool</span> AllowNRVO) {</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>   <span class="comment">// C++0x [class.copy]p33:</span></div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>   <span class="comment">//   When the criteria for elision of a copy operation are met or would</span></div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>   <span class="comment">//   be met save for the fact that the source object is a function</span></div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>   <span class="comment">//   parameter, and the object to be copied is designated by an lvalue,</span></div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>   <span class="comment">//   overload resolution to select the constructor for the copy is first</span></div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>   <span class="comment">//   performed as if the object were designated by an rvalue.</span></div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Res = <a class="code" href="namespaceclang.html#a9ae224fb900de5598d2c22f31c0ccea7">ExprError</a>();</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>   <span class="keywordflow">if</span> (AllowNRVO &&</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>       (NRVOCandidate || getCopyElisionCandidate(ResultType, Value, <span class="keyword">true</span>))) {</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>     <a class="code" href="classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a> AsRvalue(<a class="code" href="classclang_1_1ImplicitCastExpr.html#a717c235d4e3d794bb035b586f5b95e1fa0610e8a9e3d21423e2ee90a7cb120ee2">ImplicitCastExpr::OnStack</a>,</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>                               Value-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca534ff1b7708ce501d6f39f65d98ffdcb">CK_NoOp</a>, <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>, <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340a63fc11bfcee4743c02b72657c1adcf27" title="An x-value expression is a reference to an object with independent storage but which can be "moved"...">VK_XValue</a>);</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> </div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>     <a class="code" href="classclang_1_1Expr.html">Expr</a> *InitExpr = &AsRvalue;</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>     <a class="code" href="classclang_1_1InitializationKind.html" title="Describes the kind of initialization being performed, along with location information for tokens rela...">InitializationKind</a> <a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a></div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>       = <a class="code" href="classclang_1_1InitializationKind.html#aba2394b947c8e0a6bcc025ce89e1f0c4" title="Create a copy initialization.">InitializationKind::CreateCopy</a>(Value->getLocStart(),</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>                                        Value->getLocStart());</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>     <a class="code" href="classclang_1_1InitializationSequence.html" title="Describes the sequence of initializations required to initialize a given object or reference with a s...">InitializationSequence</a> Seq(*<span class="keyword">this</span>, Entity, Kind, InitExpr);</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> </div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>     <span class="comment">//   [...] If overload resolution fails, or if the type of the first</span></div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>     <span class="comment">//   parameter of the selected constructor is not an rvalue reference</span></div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>     <span class="comment">//   to the object's type (possibly cv-qualified), overload resolution</span></div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>     <span class="comment">//   is performed again, considering the object as an lvalue.</span></div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>     <span class="keywordflow">if</span> (Seq) {</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>       <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1InitializationSequence.html#af1bf276d51af355d17eefa01cfd21f28">InitializationSequence::step_iterator</a> Step = Seq.step_begin(),</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>            StepEnd = Seq.step_end();</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>            Step != StepEnd; ++Step) {</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>         <span class="keywordflow">if</span> (Step->Kind != <a class="code" href="classclang_1_1InitializationSequence.html#a2b616a44866d14510e819d4a331b2d43a51b1af70ad447635a534354269167655" title="Perform initialization via a constructor.">InitializationSequence::SK_ConstructorInitialization</a>)</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> </div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>         <a class="code" href="classclang_1_1CXXConstructorDecl.html" title="Represents a C++ constructor within a class.">CXXConstructorDecl</a> *Constructor</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>         = cast<CXXConstructorDecl>(Step->Function.Function);</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> </div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>         <span class="keyword">const</span> <a class="code" href="classclang_1_1RValueReferenceType.html">RValueReferenceType</a> *RRefType</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>           = Constructor-><a class="code" href="classclang_1_1FunctionDecl.html#ae9634725f4146974e541228f996a96cf">getParamDecl</a>(0)-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>()</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>                                                  -><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1RValueReferenceType.html">RValueReferenceType</a>>();</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> </div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>         <span class="comment">// If we don't meet the criteria, break out now.</span></div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>         <span class="keywordflow">if</span> (!RRefType ||</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>             !<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a40efa7d4fe133c0a709f0df4b6fcc2bf" title="Determine whether the given types are equivalent after cvr-qualifiers have been removed.">hasSameUnqualifiedType</a>(RRefType->getPointeeType(),</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>                             <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a028b11acbffc8c91facbab289df57771" title="Return the unique reference to the type for the specified type declaration.">getTypeDeclType</a>(Constructor-><a class="code" href="classclang_1_1CXXMethodDecl.html#a89937377c3cbaa960c0d35a2b0100071">getParent</a>())))</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> </div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>         <span class="comment">// Promote "AsRvalue" to the heap, since we now need this</span></div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>         <span class="comment">// expression node to persist.</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>         Value = <a class="code" href="classclang_1_1ImplicitCastExpr.html#a08f7e43e99be4593f4e430f88f2fafdf">ImplicitCastExpr::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, Value->getType(),</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>                                          <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca534ff1b7708ce501d6f39f65d98ffdcb">CK_NoOp</a>, <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>, 0, <a class="code" href="namespaceclang.html#ac7b1e4926b152c0385bc7ec72319a340a63fc11bfcee4743c02b72657c1adcf27" title="An x-value expression is a reference to an object with independent storage but which can be "moved"...">VK_XValue</a>);</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> </div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>         <span class="comment">// Complete type-checking the initialization of the return type</span></div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>         <span class="comment">// using the constructor we found.</span></div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>         Res = Seq.Perform(*<span class="keyword">this</span>, Entity, Kind, Value);</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>     }</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>   }</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> </div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>   <span class="comment">// Either we didn't meet the criteria for treating an lvalue as an rvalue,</span></div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>   <span class="comment">// above, or overload resolution failed. Either way, we need to try</span></div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>   <span class="comment">// (again) now with the return value expression as written.</span></div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>   <span class="keywordflow">if</span> (Res.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>     Res = PerformCopyInitialization(Entity, <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="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>);</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> </div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>   <span class="keywordflow">return</span> Res;</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> }</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> <span class="comment"></span></div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> <span class="comment">/// \brief Determine whether the declared return type of the specified function</span></div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="comment">/// contains 'auto'.</span></div>
+<div class="line"><a name="l02499"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a6ac9417985cdd4868e3e6227b9fadaea"> 2499</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="SemaStmt_8cpp.html#a6ac9417985cdd4868e3e6227b9fadaea" title="Determine whether the declared return type of the specified function contains 'auto'.">hasDeducedReturnType</a>(<a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD) {</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionProtoType.html">FunctionProtoType</a> *FPT =</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>       FD-><a class="code" href="classclang_1_1DeclaratorDecl.html#aa7d515eb57658519d6607f3ade08285f">getTypeSourceInfo</a>()-><a class="code" href="classclang_1_1TypeSourceInfo.html#affbab53588a16a2bc948f2493d93a4e2" title="Return the type wrapped by this type source info.">getType</a>()-><a class="code" href="classclang_1_1Type.html#ac4a3f2c505332c3c556bd20497d1a5c3">castAs</a><<a class="code" href="classclang_1_1FunctionProtoType.html">FunctionProtoType</a>>();</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>   <span class="keywordflow">return</span> FPT-><a class="code" href="classclang_1_1FunctionType.html#aafa453cd7e81a7c3d6c61f261e68afe8">getResultType</a>()-><a class="code" href="classclang_1_1Type.html#abb99c76a5b0e2ae4b05f6b0246c823cf" title="Determine whether this type is an undeduced type, meaning that it somehow involves a C++11 'auto' typ...">isUndeducedType</a>();</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> }</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> <span class="comment"></span></div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <span class="comment">/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements</span></div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="comment">/// for capturing scopes.</span></div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02509"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a7f927d67f24721671f19d4fdca8168e9"> 2509</a></span> <a class="code" href="classclang_1_1Sema.html#a7f927d67f24721671f19d4fdca8168e9">Sema::ActOnCapScopeReturnStmt</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> ReturnLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *RetValExp) {</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>   <span class="comment">// If this is the first return we've seen, infer the return type.</span></div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>   <span class="comment">// [expr.prim.lambda]p4 in C++11; block literals follow the same rules.</span></div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>   <a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html">CapturingScopeInfo</a> *CurCap = cast<CapturingScopeInfo>(getCurFunction());</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> FnRetType = CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a>;</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>   <a class="code" href="classclang_1_1sema_1_1LambdaScopeInfo.html">LambdaScopeInfo</a> *CurLambda = dyn_cast<<a class="code" href="classclang_1_1sema_1_1LambdaScopeInfo.html">LambdaScopeInfo</a>>(CurCap);</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> </div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>   <span class="keywordflow">if</span> (CurLambda && <a class="code" href="SemaStmt_8cpp.html#a6ac9417985cdd4868e3e6227b9fadaea" title="Determine whether the declared return type of the specified function contains 'auto'.">hasDeducedReturnType</a>(CurLambda-><a class="code" href="classclang_1_1sema_1_1LambdaScopeInfo.html#af2a1dec65e208a6f7f5f8ad0936d411a" title="The lambda's compiler-generated operator().">CallOperator</a>)) {</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>     <span class="comment">// In C++1y, the return type may involve 'auto'.</span></div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>     <span class="comment">// FIXME: Blocks might have a return type of 'auto' explicitly specified.</span></div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>     <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = CurLambda-><a class="code" href="classclang_1_1sema_1_1LambdaScopeInfo.html#af2a1dec65e208a6f7f5f8ad0936d411a" title="The lambda's compiler-generated operator().">CallOperator</a>;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>     <span class="keywordflow">if</span> (CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a>.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>())</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>       CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a> = FD-><a class="code" href="classclang_1_1FunctionDecl.html#a2a4fd00240b9b7552c4d2fbc90c71528">getResultType</a>();</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> </div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>     <a class="code" href="classclang_1_1AutoType.html" title="Represents a C++11 auto or C++1y decltype(auto) type.">AutoType</a> *AT = CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a>-><a class="code" href="classclang_1_1Type.html#a1cb680b9778b1825cf585afaf82bc1b8" title="Get the AutoType whose type will be deduced for a variable with an initializer of this type...">getContainedAutoType</a>();</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>     assert(AT && <span class="stringliteral">"lost auto type from lambda return type"</span>);</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>     <span class="keywordflow">if</span> (DeduceFunctionTypeFromReturnExpr(FD, ReturnLoc, RetValExp, AT)) {</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>       FD-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>     }</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>     CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a> = FnRetType = FD-><a class="code" href="classclang_1_1FunctionDecl.html#a2a4fd00240b9b7552c4d2fbc90c71528">getResultType</a>();</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a6cab1d4c1dd4a0f9da623dcd05d8d4ce" title="Whether the target type of return statements in this context is deduced (e.g. a lambda or block with ...">HasImplicitReturnType</a>) {</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>     <span class="comment">// For blocks/lambdas with implicit return types, we check each return</span></div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>     <span class="comment">// statement individually, and deduce the common return type when the block</span></div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>     <span class="comment">// or lambda is completed.</span></div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>     <span class="comment">// FIXME: Fold this into the 'auto' codepath above.</span></div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>     <span class="keywordflow">if</span> (RetValExp && !isa<InitListExpr>(RetValExp)) {</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Result = DefaultFunctionArrayLvalueConversion(RetValExp);</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>       <span class="keywordflow">if</span> (Result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>       RetValExp = Result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> </div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>       <span class="keywordflow">if</span> (!CurContext->isDependentContext())</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>         FnRetType = RetValExp-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>         FnRetType = CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a> = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a4b9c29396317bed688dfe9d5b909f04f">DependentTy</a>;</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>       <span class="keywordflow">if</span> (RetValExp) {</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>         <span class="comment">// C++11 [expr.lambda.prim]p4 bans inferring the result from an</span></div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>         <span class="comment">// initializer list, because it is not an expression (even</span></div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>         <span class="comment">// though we represent it as one). We still deduce 'void'.</span></div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_lambda_return_init_list)</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>           << RetValExp-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>       }</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>       FnRetType = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#aaa9dd0ebd4ff2e55c572f5718b7af508">VoidTy</a>;</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>     }</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> </div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>     <span class="comment">// Although we'll properly infer the type of the block once it's completed,</span></div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>     <span class="comment">// make sure we provide a return type now for better error recovery.</span></div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>     <span class="keywordflow">if</span> (CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a>.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>())</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>       CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a18433d69c691a34332429c1720dbcbe4">ReturnType</a> = FnRetType;</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>   }</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>   assert(!FnRetType.isNull());</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> </div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1sema_1_1BlockScopeInfo.html" title="Retains information about a block that is currently being parsed.">BlockScopeInfo</a> *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>     <span class="keywordflow">if</span> (CurBlock->FunctionType->getAs<<a class="code" href="classclang_1_1FunctionType.html">FunctionType</a>>()-><a class="code" href="classclang_1_1FunctionType.html#a297e5d2171219b65288d29c07276f6c5" title="Determine whether this function type includes the GNU noreturn attribute. The C++11 [[noreturn]] attr...">getNoReturnAttr</a>()) {</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_noreturn_block_has_return_expr);</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>     }</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html" title="Retains information about a captured region.">CapturedRegionScopeInfo</a> *CurRegion =</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>                  dyn_cast<CapturedRegionScopeInfo>(CurCap)) {</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>     assert(CurLambda && <span class="stringliteral">"unknown kind of captured scope"</span>);</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>     <span class="keywordflow">if</span> (CurLambda-><a class="code" href="classclang_1_1sema_1_1LambdaScopeInfo.html#af2a1dec65e208a6f7f5f8ad0936d411a" title="The lambda's compiler-generated operator().">CallOperator</a>-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1FunctionType.html">FunctionType</a>>()</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>             ->getNoReturnAttr()) {</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_noreturn_lambda_has_return_expr);</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>     }</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>   }</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> </div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>   <span class="comment">// Otherwise, verify that this result type matches the previous one.  We are</span></div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>   <span class="comment">// pickier with blocks than for normal functions because we don't have GCC</span></div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>   <span class="comment">// compatibility to worry about here.</span></div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *NRVOCandidate = 0;</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>   <span class="keywordflow">if</span> (FnRetType->isDependentType()) {</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>     <span class="comment">// Delay processing for now.  TODO: there are lots of dependent</span></div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>     <span class="comment">// types we can conclusively prove aren't void.</span></div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (FnRetType->isVoidType()) {</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>     <span class="keywordflow">if</span> (RetValExp && !isa<InitListExpr>(RetValExp) &&</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>         !(getLangOpts().CPlusPlus &&</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>           (RetValExp-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>() ||</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>            RetValExp-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>()))) {</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>       <span class="keywordflow">if</span> (!getLangOpts().CPlusPlus &&</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>           RetValExp-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>())</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::ext_return_has_void_expr) << <span class="stringliteral">"literal"</span> << 2;</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_return_block_has_expr);</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>         RetValExp = 0;</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>       }</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>     }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!RetValExp) {</div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_block_return_missing_expr));</div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!RetValExp-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()) {</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>     <span class="comment">// we have a non-void block with an expression, continue checking</span></div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> </div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>     <span class="comment">// C99 6.8.6.4p3(136): The return statement is not an assignment. The</span></div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>     <span class="comment">// overlap restriction of subclause 6.5.16.1 does not apply to the case of</span></div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>     <span class="comment">// function return.</span></div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> </div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>     <span class="comment">// In C++ the return statement is handled via a copy initialization.</span></div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>     <span class="comment">// the C version of which boils down to CheckSingleAssignmentConstraints.</span></div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>     NRVOCandidate = getCopyElisionCandidate(FnRetType, RetValExp, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>     <a class="code" href="classclang_1_1InitializedEntity.html" title="Describes an entity that is being initialized.">InitializedEntity</a> Entity = <a class="code" href="classclang_1_1InitializedEntity.html#a9b1551ab470ed6ec9768417f48d89e76" title="Create the initialization entity for the result of a function.">InitializedEntity::InitializeResult</a>(ReturnLoc,</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>                                                                    FnRetType,</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>                                                           NRVOCandidate != 0);</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Res = PerformMoveOrCopyInitialization(Entity, NRVOCandidate,</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>                                                      FnRetType, RetValExp);</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>     <span class="keywordflow">if</span> (Res.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>       <span class="comment">// FIXME: Cleanup temporaries here, anyway?</span></div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>     }</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>     RetValExp = Res.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>     CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc);</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>   }</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> </div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>   <span class="keywordflow">if</span> (RetValExp) {</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ER = ActOnFinishFullExpr(RetValExp, ReturnLoc);</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>     <span class="keywordflow">if</span> (ER.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>     RetValExp = ER.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>   }</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>   <a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a> *Result = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a>(ReturnLoc, RetValExp,</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>                                                 NRVOCandidate);</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> </div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>   <span class="comment">// If we need to check for the named return value optimization,</span></div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>   <span class="comment">// or if we need to infer the return type,</span></div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>   <span class="comment">// save the return statement in our scope for later processing.</span></div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>   <span class="keywordflow">if</span> (CurCap-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a6cab1d4c1dd4a0f9da623dcd05d8d4ce" title="Whether the target type of return statements in this context is deduced (e.g. a lambda or block with ...">HasImplicitReturnType</a> ||</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>       (getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a> && FnRetType->isRecordType() &&</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>        !CurContext->isDependentContext()))</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>     FunctionScopes.back()->Returns.push_back(Result);</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> </div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>   <span class="keywordflow">return</span> Owned(Result);</div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> }</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> <span class="comment"></span></div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> <span class="comment">/// Deduce the return type for a function from a returned expression, per</span></div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> <span class="comment">/// C++1y [dcl.spec.auto]p6.</span></div>
+<div class="line"><a name="l02649"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#aa06adc3570af4ce9e564d9287fd064db"> 2649</a></span> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classclang_1_1Sema.html#aa06adc3570af4ce9e564d9287fd064db">Sema::DeduceFunctionTypeFromReturnExpr</a>(<a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD,</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</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> ReturnLoc,</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>                                             <a class="code" href="classclang_1_1Expr.html">Expr</a> *&RetExpr,</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>                                             <a class="code" href="classclang_1_1AutoType.html" title="Represents a C++11 auto or C++1y decltype(auto) type.">AutoType</a> *AT) {</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>   <a class="code" href="classclang_1_1TypeLoc.html" title="Base wrapper for a particular "section" of type source info.">TypeLoc</a> OrigResultType = FD-><a class="code" href="classclang_1_1DeclaratorDecl.html#aa7d515eb57658519d6607f3ade08285f">getTypeSourceInfo</a>()-><a class="code" href="classclang_1_1TypeSourceInfo.html#a51bc61879d5926193a3bb3ee1a280fee" title="Return the TypeLoc wrapper for the type source info.">getTypeLoc</a>().</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>     IgnoreParens().<a class="code" href="classclang_1_1TypeLoc.html#a9418837bde8b3c515cc00ba5b2a9818f" title="Convert to the specified TypeLoc type, asserting that this TypeLoc is of the desired type...">castAs</a><<a class="code" href="classclang_1_1FunctionProtoTypeLoc.html">FunctionProtoTypeLoc</a>>().getResultLoc();</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> Deduced;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span> </div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>   <span class="keywordflow">if</span> (RetExpr && isa<InitListExpr>(RetExpr)) {</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>     <span class="comment">//  If the deduction is for a return statement and the initializer is</span></div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>     <span class="comment">//  a braced-init-list, the program is ill-formed.</span></div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RetExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(),</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>          getCurLambda() ? diag::err_lambda_return_init_list</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>                         : diag::err_auto_fn_return_init_list)</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>         << RetExpr-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>   }</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span> </div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>   <span class="keywordflow">if</span> (FD-><a class="code" href="classclang_1_1DeclContext.html#a0d06ccd1db1b1f60e91d95d50aeae75d" title="Determines whether this context is dependent on a template parameter.">isDependentContext</a>()) {</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>     <span class="comment">// C++1y [dcl.spec.auto]p12:</span></div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>     <span class="comment">//   Return type deduction [...] occurs when the definition is</span></div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>     <span class="comment">//   instantiated even if the function body contains a return</span></div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>     <span class="comment">//   statement with a non-type-dependent operand.</span></div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>     assert(AT-><a class="code" href="classclang_1_1AutoType.html#a6753b6773c1982dd0116e6012b825c46">isDeduced</a>() && <span class="stringliteral">"should have deduced to dependent type"</span>);</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (RetExpr) {</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>     <span class="comment">//  If the deduction is for a return statement and the initializer is</span></div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>     <span class="comment">//  a braced-init-list, the program is ill-formed.</span></div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>     <span class="keywordflow">if</span> (isa<InitListExpr>(RetExpr)) {</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RetExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), diag::err_auto_fn_return_init_list);</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>     }</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span> </div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>     <span class="comment">//  Otherwise, [...] deduce a value for U using the rules of template</span></div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>     <span class="comment">//  argument deduction.</span></div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>     <a class="code" href="classclang_1_1Sema.html#aef696f6ba42fd83ffbd15772629f4e13" title="Result type of DeduceAutoType.">DeduceAutoResult</a> DAR = DeduceAutoType(OrigResultType, RetExpr, Deduced);</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> </div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>     <span class="keywordflow">if</span> (DAR == DAR_Failed && !FD-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>())</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(RetExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), diag::err_auto_fn_deduction_failure)</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>         << OrigResultType.<a class="code" href="classclang_1_1TypeLoc.html#a1361c17e38e48fd90275784b051db591" title="Get the type for which this source info wrapper provides information.">getType</a>() << RetExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</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">if</span> (DAR != DAR_Succeeded)</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>     <span class="comment">//  In the case of a return with no operand, the initializer is considered</span></div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>     <span class="comment">//  to be void().</span></div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>     <span class="comment">//</span></div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>     <span class="comment">// Deduction here can only succeed if the return type is exactly 'cv auto'</span></div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     <span class="comment">// or 'decltype(auto)', so just check for that case directly.</span></div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     <span class="keywordflow">if</span> (!OrigResultType.<a class="code" href="classclang_1_1TypeLoc.html#a1361c17e38e48fd90275784b051db591" title="Get the type for which this source info wrapper provides information.">getType</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1AutoType.html" title="Represents a C++11 auto or C++1y decltype(auto) type.">AutoType</a>>()) {</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_auto_fn_return_void_but_not_auto)</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>         << OrigResultType.<a class="code" href="classclang_1_1TypeLoc.html#a1361c17e38e48fd90275784b051db591" title="Get the type for which this source info wrapper provides information.">getType</a>();</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="comment">// We always deduce U = void in this case.</span></div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>     Deduced = SubstAutoType(OrigResultType.<a class="code" href="classclang_1_1TypeLoc.html#a1361c17e38e48fd90275784b051db591" title="Get the type for which this source info wrapper provides information.">getType</a>(), <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#aaa9dd0ebd4ff2e55c572f5718b7af508">VoidTy</a>);</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>     <span class="keywordflow">if</span> (Deduced.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>())</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</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">//  If a function with a declared return type that contains a placeholder type</span></div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>   <span class="comment">//  has multiple return statements, the return type is deduced for each return</span></div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>   <span class="comment">//  statement. [...] if the type deduced is not the same in each deduction,</span></div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>   <span class="comment">//  the program is ill-formed.</span></div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>   <span class="keywordflow">if</span> (AT-><a class="code" href="classclang_1_1AutoType.html#a6753b6773c1982dd0116e6012b825c46">isDeduced</a>() && !FD-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>()) {</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>     <a class="code" href="classclang_1_1AutoType.html" title="Represents a C++11 auto or C++1y decltype(auto) type.">AutoType</a> *NewAT = Deduced-><a class="code" href="classclang_1_1Type.html#a1cb680b9778b1825cf585afaf82bc1b8" title="Get the AutoType whose type will be deduced for a variable with an initializer of this type...">getContainedAutoType</a>();</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>     <span class="keywordflow">if</span> (!FD-><a class="code" href="classclang_1_1DeclContext.html#a0d06ccd1db1b1f60e91d95d50aeae75d" title="Determines whether this context is dependent on a template parameter.">isDependentContext</a>() &&</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>         !<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a889b9d309fdc236f1eab037484f10f8a" title="Determine whether the given types T1 and T2 are equivalent.">hasSameType</a>(AT-><a class="code" href="classclang_1_1AutoType.html#a6520b95aa8eea7dd2818c5ee865be68f" title="Get the type deduced for this auto type, or null if it's either not been deduced or was deduced to a ...">getDeducedType</a>(), NewAT-><a class="code" href="classclang_1_1AutoType.html#a6520b95aa8eea7dd2818c5ee865be68f" title="Get the type deduced for this auto type, or null if it's either not been deduced or was deduced to a ...">getDeducedType</a>())) {</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1sema_1_1LambdaScopeInfo.html">LambdaScopeInfo</a> *LambdaSI = getCurLambda();</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>       <span class="keywordflow">if</span> (LambdaSI && LambdaSI-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a6cab1d4c1dd4a0f9da623dcd05d8d4ce" title="Whether the target type of return statements in this context is deduced (e.g. a lambda or block with ...">HasImplicitReturnType</a>) {</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible)</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>           << NewAT-><a class="code" href="classclang_1_1AutoType.html#a6520b95aa8eea7dd2818c5ee865be68f" title="Get the type deduced for this auto type, or null if it's either not been deduced or was deduced to a ...">getDeducedType</a>() << AT-><a class="code" href="classclang_1_1AutoType.html#a6520b95aa8eea7dd2818c5ee865be68f" title="Get the type deduced for this auto type, or null if it's either not been deduced or was deduced to a ...">getDeducedType</a>()</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>           << <span class="keyword">true</span> <span class="comment">/*IsLambda*/</span>;</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_auto_fn_different_deductions)</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>           << (AT-><a class="code" href="classclang_1_1AutoType.html#a5d7b865788a4281765a8ff354346573d">isDecltypeAuto</a>() ? 1 : 0)</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>           << NewAT-><a class="code" href="classclang_1_1AutoType.html#a6520b95aa8eea7dd2818c5ee865be68f" title="Get the type deduced for this auto type, or null if it's either not been deduced or was deduced to a ...">getDeducedType</a>() << AT-><a class="code" href="classclang_1_1AutoType.html#a6520b95aa8eea7dd2818c5ee865be68f" title="Get the type deduced for this auto type, or null if it's either not been deduced or was deduced to a ...">getDeducedType</a>();</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>       }</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>     }</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!FD-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>()) {</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>     <span class="comment">// Update all declarations of the function to have the deduced return type.</span></div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>     <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#ae313abb0169ff3afef235461848062fd" title="Change the result type of a function type once it is deduced.">adjustDeducedFunctionResultType</a>(FD, Deduced);</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>   }</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="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span> }</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span> </div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02738"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a76f9238657f938cb4aba3a4bb77298d9"> 2738</a></span> <a class="code" href="classclang_1_1Sema.html#a76f9238657f938cb4aba3a4bb77298d9">Sema::ActOnReturnStmt</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> ReturnLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *RetValExp) {</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>   <span class="comment">// Check for unexpanded parameter packs.</span></div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>   <span class="keywordflow">if</span> (RetValExp && DiagnoseUnexpandedParameterPack(RetValExp))</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> </div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>   <span class="keywordflow">if</span> (isa<CapturingScopeInfo>(getCurFunction()))</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>     <span class="keywordflow">return</span> ActOnCapScopeReturnStmt(ReturnLoc, RetValExp);</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> </div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> FnRetType;</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> RelatedRetType;</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = getCurFunctionDecl()) {</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>     FnRetType = FD-><a class="code" href="classclang_1_1FunctionDecl.html#a2a4fd00240b9b7552c4d2fbc90c71528">getResultType</a>();</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>     <span class="keywordflow">if</span> (FD-><a class="code" href="classclang_1_1FunctionDecl.html#ad1b4fe48bf645a904cc086f2d62f2dbe" title="Determines whether this function is known to be 'noreturn', through an attribute on its declaration o...">isNoReturn</a>())</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::warn_noreturn_function_has_return_expr)</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>         << FD-><a class="code" href="classclang_1_1NamedDecl.html#a1e3e90455be89bb5c7c23640cbbd7153">getDeclName</a>();</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1ObjCMethodDecl.html">ObjCMethodDecl</a> *MD = getCurMethodDecl()) {</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>     FnRetType = MD->getResultType();</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>     <span class="keywordflow">if</span> (MD->hasRelatedResultType() && MD->getClassInterface()) {</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>       <span class="comment">// In the implementation of a method with a related return type, the</span></div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>       <span class="comment">// type used to type-check the validity of return statements within the</span></div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>       <span class="comment">// method body is a pointer to the type of the class being implemented.</span></div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>       RelatedRetType = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#ae498c138a079e26fa0b2ebcb11d9136b">getObjCInterfaceType</a>(MD->getClassInterface());</div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>       RelatedRetType = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a5c1abc77f994ace61ebfd7c864b64244" title="Return a ObjCObjectPointerType type for the given ObjCObjectType.">getObjCObjectPointerType</a>(RelatedRetType);</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>     }</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>   } <span class="keywordflow">else</span> <span class="comment">// If we don't have a function/method context, bail.</span></div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> </div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>   <span class="comment">// FIXME: Add a flag to the ScopeInfo to indicate whether we're performing</span></div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>   <span class="comment">// deduction.</span></div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>   <span class="keywordflow">if</span> (getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bba4803e9efe1f7b6b5b9fdc9fc86bc0957">CPlusPlus1y</a>) {</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1AutoType.html" title="Represents a C++11 auto or C++1y decltype(auto) type.">AutoType</a> *AT = FnRetType-><a class="code" href="classclang_1_1Type.html#a1cb680b9778b1825cf585afaf82bc1b8" title="Get the AutoType whose type will be deduced for a variable with an initializer of this type...">getContainedAutoType</a>()) {</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>       <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = cast<FunctionDecl>(CurContext);</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>       <span class="keywordflow">if</span> (DeduceFunctionTypeFromReturnExpr(FD, ReturnLoc, RetValExp, AT)) {</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>         FD-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>         FnRetType = FD-><a class="code" href="classclang_1_1FunctionDecl.html#a2a4fd00240b9b7552c4d2fbc90c71528">getResultType</a>();</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>       }</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>   }</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="keywordtype">bool</span> HasDependentReturnType = FnRetType-><a class="code" href="classclang_1_1Type.html#a7e475b7859ae970eb837da95e94ab26c">isDependentType</a>();</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>   <a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a> *Result = 0;</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>   <span class="keywordflow">if</span> (FnRetType-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>()) {</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>     <span class="keywordflow">if</span> (RetValExp) {</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>       <span class="keywordflow">if</span> (isa<InitListExpr>(RetValExp)) {</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>         <span class="comment">// We simply never allow init lists as the return value of void</span></div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>         <span class="comment">// functions. This is compatible because this was never allowed before,</span></div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>         <span class="comment">// so there's no legacy code to deal with.</span></div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>         <a class="code" href="classclang_1_1NamedDecl.html">NamedDecl</a> *CurDecl = getCurFunctionOrMethodDecl();</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>         <span class="keywordtype">int</span> FunctionKind = 0;</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>         <span class="keywordflow">if</span> (isa<ObjCMethodDecl>(CurDecl))</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>           FunctionKind = 1;</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<CXXConstructorDecl>(CurDecl))</div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>           FunctionKind = 2;</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<CXXDestructorDecl>(CurDecl))</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>           FunctionKind = 3;</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>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, diag::err_return_init_list)</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>           << CurDecl-><a class="code" href="classclang_1_1NamedDecl.html#a1e3e90455be89bb5c7c23640cbbd7153">getDeclName</a>() << FunctionKind</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>           << RetValExp-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> </div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>         <span class="comment">// Drop the expression.</span></div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>         RetValExp = 0;</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!RetValExp-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()) {</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>         <span class="comment">// C99 6.8.6.4p1 (ext_ since GCC warns)</span></div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>         <span class="keywordtype">unsigned</span> D = diag::ext_return_has_expr;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>         <span class="keywordflow">if</span> (RetValExp-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>())</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>           D = diag::ext_return_has_void_expr;</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>         <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>           <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Result = Owned(RetValExp);</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>           Result = IgnoredValueConversions(Result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>());</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>           <span class="keywordflow">if</span> (Result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>             <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>           RetValExp = Result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>           RetValExp = ImpCastExprToType(RetValExp,</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>                                         <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#aaa9dd0ebd4ff2e55c572f5718b7af508">VoidTy</a>, <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cac5d34b62fbc611f2f762ff5c72845fa5">CK_ToVoid</a>).take();</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> </div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>         <span class="comment">// return (some void expression); is legal in C++.</span></div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>         <span class="keywordflow">if</span> (D != diag::ext_return_has_void_expr ||</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>             !getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>) {</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>           <a class="code" href="classclang_1_1NamedDecl.html">NamedDecl</a> *CurDecl = getCurFunctionOrMethodDecl();</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span> </div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>           <span class="keywordtype">int</span> FunctionKind = 0;</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>           <span class="keywordflow">if</span> (isa<ObjCMethodDecl>(CurDecl))</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>             FunctionKind = 1;</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<CXXConstructorDecl>(CurDecl))</div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>             FunctionKind = 2;</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<CXXDestructorDecl>(CurDecl))</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>             FunctionKind = 3;</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>           <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, D)</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>             << CurDecl-><a class="code" href="classclang_1_1NamedDecl.html#a1e3e90455be89bb5c7c23640cbbd7153">getDeclName</a>() << FunctionKind</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>             << RetValExp-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</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> </div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>       <span class="keywordflow">if</span> (RetValExp) {</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>         <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ER = ActOnFinishFullExpr(RetValExp, ReturnLoc);</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>         <span class="keywordflow">if</span> (ER.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>           <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>         RetValExp = ER.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>       }</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>     }</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> </div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>     Result = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a>(ReturnLoc, RetValExp, 0);</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!RetValExp && !HasDependentReturnType) {</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>     <span class="keywordtype">unsigned</span> DiagID = diag::warn_return_missing_expr;  <span class="comment">// C90 6.6.6.4p4</span></div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>     <span class="comment">// C99 6.8.6.4p1 (ext_ since GCC warns)</span></div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>     <span class="keywordflow">if</span> (getLangOpts().C99) DiagID = diag::ext_return_missing_expr;</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span> </div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = getCurFunctionDecl())</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, DiagID) << FD-><a class="code" href="classclang_1_1NamedDecl.html#a554752f8f43eea0e6288da7205167fe2">getIdentifier</a>() << 0<span class="comment">/*fn*/</span>;</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(ReturnLoc, DiagID) << getCurMethodDecl()->getDeclName() << 1<span class="comment">/*meth*/</span>;</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>     Result = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a>(ReturnLoc);</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>     assert(RetValExp || HasDependentReturnType);</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *NRVOCandidate = 0;</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>     <span class="keywordflow">if</span> (!HasDependentReturnType && !RetValExp-><a class="code" href="classclang_1_1Expr.html#a48cd7038510f42d44e314d1b8d294824">isTypeDependent</a>()) {</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>       <span class="comment">// we have a non-void function with an expression, continue checking</span></div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span> </div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>       <a class="code" href="classclang_1_1QualType.html">QualType</a> RetType = (RelatedRetType.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>() ? FnRetType : RelatedRetType);</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> </div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>       <span class="comment">// C99 6.8.6.4p3(136): The return statement is not an assignment. The</span></div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>       <span class="comment">// overlap restriction of subclause 6.5.16.1 does not apply to the case of</span></div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>       <span class="comment">// function return.</span></div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span> </div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>       <span class="comment">// In C++ the return statement is handled via a copy initialization,</span></div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>       <span class="comment">// the C version of which boils down to CheckSingleAssignmentConstraints.</span></div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>       NRVOCandidate = getCopyElisionCandidate(FnRetType, RetValExp, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>       <a class="code" href="classclang_1_1InitializedEntity.html" title="Describes an entity that is being initialized.">InitializedEntity</a> Entity = <a class="code" href="classclang_1_1InitializedEntity.html#a9b1551ab470ed6ec9768417f48d89e76" title="Create the initialization entity for the result of a function.">InitializedEntity::InitializeResult</a>(ReturnLoc,</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>                                                                      RetType,</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>                                                             NRVOCandidate != 0);</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Res = PerformMoveOrCopyInitialization(Entity, NRVOCandidate,</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>                                                        RetType, RetValExp);</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>       <span class="keywordflow">if</span> (Res.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>         <span class="comment">// FIXME: Clean up temporaries here anyway?</span></div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>       }</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>       RetValExp = Res.<a class="code" href="classclang_1_1ActionResult.html#a144bc2f6c8a8090ba894cda5a5613361">takeAs</a><<a class="code" href="classclang_1_1Expr.html">Expr</a>>();</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span> </div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>       <span class="comment">// If we have a related result type, we need to implicitly</span></div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>       <span class="comment">// convert back to the formal result type.  We can't pretend to</span></div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>       <span class="comment">// initialize the result again --- we might end double-retaining</span></div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>       <span class="comment">// --- so instead we initialize a notional temporary.</span></div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>       <span class="keywordflow">if</span> (!RelatedRetType.<a class="code" href="classclang_1_1QualType.html#a8f87f58000490ad01cd09add1f27d7ac" title="isNull - Return true if this QualType doesn't point to a type yet.">isNull</a>()) {</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>         Entity = <a class="code" href="classclang_1_1InitializedEntity.html#a1986403ce8b40bf465e73c1c5737dcab" title="Create the initialization entity for a related result.">InitializedEntity::InitializeRelatedResult</a>(getCurMethodDecl(),</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>                                                             FnRetType);</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>         Res = PerformCopyInitialization(Entity, ReturnLoc, RetValExp);</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>         <span class="keywordflow">if</span> (Res.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>()) {</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>           <span class="comment">// FIXME: Clean up temporaries here anyway?</span></div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>           <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>         }</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>         RetValExp = Res.<a class="code" href="classclang_1_1ActionResult.html#a144bc2f6c8a8090ba894cda5a5613361">takeAs</a><<a class="code" href="classclang_1_1Expr.html">Expr</a>>();</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>       }</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span> </div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>       CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc);</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>     }</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span> </div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>     <span class="keywordflow">if</span> (RetValExp) {</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>       <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> ER = ActOnFinishFullExpr(RetValExp, ReturnLoc);</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>       <span class="keywordflow">if</span> (ER.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>       RetValExp = ER.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>     }</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>     Result = <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ReturnStmt.html">ReturnStmt</a>(ReturnLoc, RetValExp, NRVOCandidate);</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>   }</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span> </div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>   <span class="comment">// If we need to check for the named return value optimization, save the</span></div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>   <span class="comment">// return statement in our scope for later processing.</span></div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>   <span class="keywordflow">if</span> (getLangOpts().CPlusPlus && FnRetType-><a class="code" href="classclang_1_1Type.html#a6525adb10d549a7ee372424dcdb6b9bd">isRecordType</a>() &&</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>       !CurContext->isDependentContext())</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>     FunctionScopes.back()->Returns.push_back(Result);</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span> </div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>   <span class="keywordflow">return</span> Owned(Result);</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> }</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span> </div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02919"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ae5a2564e7718665f5c8b8eabd5294e6c"> 2919</a></span> <a class="code" href="classclang_1_1Sema.html#ae5a2564e7718665f5c8b8eabd5294e6c">Sema::ActOnObjCAtCatchStmt</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> AtLoc,</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</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, <a class="code" href="classclang_1_1Decl.html">Decl</a> *Parm,</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>                            <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>   <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *Var = cast_or_null<VarDecl>(Parm);</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>   <span class="keywordflow">if</span> (Var && Var-><a class="code" href="classclang_1_1Decl.html#a17ec912fd67469eea51741d45eb0c800">isInvalidDecl</a>())</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span> </div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ObjCAtCatchStmt.html" title="Represents Objective-C's @catch statement.">ObjCAtCatchStmt</a>(AtLoc, RParen, Var, Body));</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span> }</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span> </div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02930"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ab05b1d333d6687f6fb13982e772868c9"> 2930</a></span> <a class="code" href="classclang_1_1Sema.html#ab05b1d333d6687f6fb13982e772868c9">Sema::ActOnObjCAtFinallyStmt</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> AtLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ObjCAtFinallyStmt.html" title="Represents Objective-C's @finally statement.">ObjCAtFinallyStmt</a>(AtLoc, Body));</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> </div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02935"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a6002d9a468c20e290e2c8e2cb0434433"> 2935</a></span> <a class="code" href="classclang_1_1Sema.html#a6002d9a468c20e290e2c8e2cb0434433">Sema::ActOnObjCAtTryStmt</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> AtLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Try,</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>                          <a class="code" href="namespaceclang.html#a5ef9d80939fd671df6fac5590038b346">MultiStmtArg</a> CatchStmts, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Finally) {</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>   <span class="keywordflow">if</span> (!getLangOpts().ObjCExceptions)</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(AtLoc, diag::err_objc_exceptions_disabled) << <span class="stringliteral">"@try"</span>;</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span> </div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>   getCurFunction()->setHasBranchProtectedScope();</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>   <span class="keywordtype">unsigned</span> NumCatchStmts = CatchStmts.size();</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>   <span class="keywordflow">return</span> Owned(<a class="code" href="classclang_1_1ObjCAtTryStmt.html#a2c4d8fa20b8432da9e0e4ce6f66ea67e">ObjCAtTryStmt::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, AtLoc, Try,</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>                                      CatchStmts.data(),</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>                                      NumCatchStmts,</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>                                      Finally));</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> }</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> </div>
+<div class="line"><a name="l02948"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a3773ce3d86d7b87220f720ce378403ae"> 2948</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a3773ce3d86d7b87220f720ce378403ae">Sema::BuildObjCAtThrowStmt</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> AtLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Throw) {</div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>   <span class="keywordflow">if</span> (Throw) {</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>     <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> Result = DefaultLvalueConversion(Throw);</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>     <span class="keywordflow">if</span> (Result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> </div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>     Result = ActOnFinishFullExpr(Result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>());</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>     <span class="keywordflow">if</span> (Result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>();</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>     Throw = Result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> </div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> ThrowType = Throw-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>     <span class="comment">// Make sure the expression type is an ObjC pointer or "void *".</span></div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>     <span class="keywordflow">if</span> (!ThrowType-><a class="code" href="classclang_1_1Type.html#a7e475b7859ae970eb837da95e94ab26c">isDependentType</a>() &&</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>         !ThrowType-><a class="code" href="classclang_1_1Type.html#aa9be9c3ceec53da8edbbb86bbf895fff">isObjCObjectPointerType</a>()) {</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1PointerType.html">PointerType</a> *PT = ThrowType-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1PointerType.html">PointerType</a>>();</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>       <span class="keywordflow">if</span> (!PT || !PT-><a class="code" href="classclang_1_1PointerType.html#a3d0af079431148f7da7e2c400052cc66">getPointeeType</a>()-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>())</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(AtLoc, diag::error_objc_throw_expects_object)</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>                          << Throw-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>() << Throw-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>());</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>     }</div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>   }</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span> </div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ObjCAtThrowStmt.html" title="Represents Objective-C's @throw statement.">ObjCAtThrowStmt</a>(AtLoc, Throw));</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> </div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l02974"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#aa2cf26645cd239962f7f9e3f4af6a671"> 2974</a></span> <a class="code" href="classclang_1_1Sema.html#aa2cf26645cd239962f7f9e3f4af6a671">Sema::ActOnObjCAtThrowStmt</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> AtLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *Throw,</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>                            <a class="code" href="classclang_1_1Scope.html">Scope</a> *CurScope) {</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>   <span class="keywordflow">if</span> (!getLangOpts().ObjCExceptions)</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>     <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(AtLoc, diag::err_objc_exceptions_disabled) << <span class="stringliteral">"@throw"</span>;</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> </div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>   <span class="keywordflow">if</span> (!Throw) {</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>     <span class="comment">// @throw without an expression designates a rethrow (which much occur</span></div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>     <span class="comment">// in the context of an @catch clause).</span></div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>     <a class="code" href="classclang_1_1Scope.html">Scope</a> *AtCatchParent = CurScope;</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>     <span class="keywordflow">while</span> (AtCatchParent && !AtCatchParent-><a class="code" href="classclang_1_1Scope.html#a472b683be018e416b1d15f245de4108b" title="isAtCatchScope - Return true if this scope is @catch.">isAtCatchScope</a>())</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>       AtCatchParent = AtCatchParent-><a class="code" href="classclang_1_1Scope.html#a41a39e012b966ffcb2f05d41f4bdbb4b">getParent</a>();</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>     <span class="keywordflow">if</span> (!AtCatchParent)</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>       <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(AtLoc, diag::error_rethrow_used_outside_catch));</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>   }</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>   <span class="keywordflow">return</span> BuildObjCAtThrowStmt(AtLoc, Throw);</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> }</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> </div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a></div>
+<div class="line"><a name="l02992"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a148d6d6d95e005bc600ea46c29e43bac"> 2992</a></span> <a class="code" href="classclang_1_1Sema.html#a148d6d6d95e005bc600ea46c29e43bac">Sema::ActOnObjCAtSynchronizedOperand</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> atLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *operand) {</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>   <a class="code" href="classclang_1_1ActionResult.html">ExprResult</a> result = DefaultLvalueConversion(operand);</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>   <span class="keywordflow">if</span> (result.<a class="code" href="classclang_1_1ActionResult.html#ac9ac9ca2df07fbb1931300e2a926351a">isInvalid</a>())</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a9ae224fb900de5598d2c22f31c0ccea7">ExprError</a>();</div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>   operand = result.<a class="code" href="classclang_1_1ActionResult.html#a938165c101b60e87ee1956ed4950fd9a">take</a>();</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span> </div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>   <span class="comment">// Make sure the expression type is an ObjC pointer or "void *".</span></div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> <a class="code" href="namespaceclang_1_1ast__matchers.html#a82efb51f28681d561f9ce42fecf09d4b" title="Matches Types in the clang AST.">type</a> = operand-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>   <span class="keywordflow">if</span> (!type-><a class="code" href="classclang_1_1Type.html#a7e475b7859ae970eb837da95e94ab26c">isDependentType</a>() &&</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>       !type-><a class="code" href="classclang_1_1Type.html#aa9be9c3ceec53da8edbbb86bbf895fff">isObjCObjectPointerType</a>()) {</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1PointerType.html">PointerType</a> *pointerType = type-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1PointerType.html">PointerType</a>>();</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>     <span class="keywordflow">if</span> (!pointerType || !pointerType-><a class="code" href="classclang_1_1PointerType.html#a3d0af079431148f7da7e2c400052cc66">getPointeeType</a>()-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>())</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>       <span class="keywordflow">return</span> <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(atLoc, diag::error_objc_synchronized_expects_object)</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>                << type << operand-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>();</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>   }</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> </div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>   <span class="comment">// The operand to @synchronized is a full-expression.</span></div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>   <span class="keywordflow">return</span> ActOnFinishFullExpr(operand);</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span> }</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span> </div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l03013"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af4f670e273a32ed5f1a2d931d2a67e74"> 3013</a></span> <a class="code" href="classclang_1_1Sema.html#af4f670e273a32ed5f1a2d931d2a67e74">Sema::ActOnObjCAtSynchronizedStmt</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> AtLoc, <a class="code" href="classclang_1_1Expr.html">Expr</a> *SyncExpr,</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>                                   <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *SyncBody) {</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>   <span class="comment">// We can't jump into or indirect-jump out of a @synchronized block.</span></div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>   getCurFunction()->setHasBranchProtectedScope();</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ObjCAtSynchronizedStmt.html" title="Represents Objective-C's @synchronized statement.">ObjCAtSynchronizedStmt</a>(AtLoc, SyncExpr, SyncBody));</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span> }</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span> <span class="comment"></span></div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> <span class="comment">/// ActOnCXXCatchBlock - Takes an exception declaration and a handler block</span></div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> <span class="comment">/// and creates a proper catch handler from them.</span></div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l03023"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#adbbda132aecfa58877e896239a58c3ec"> 3023</a></span> <a class="code" href="classclang_1_1Sema.html#adbbda132aecfa58877e896239a58c3ec">Sema::ActOnCXXCatchBlock</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> CatchLoc, <a class="code" href="classclang_1_1Decl.html">Decl</a> *ExDecl,</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>                          <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *HandlerBlock) {</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>   <span class="comment">// There's nothing to test that ActOnExceptionDecl didn't already test.</span></div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a>(CatchLoc,</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>                                           cast_or_null<VarDecl>(ExDecl),</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>                                           HandlerBlock));</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span> }</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> </div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l03032"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a4274cf462c45a9c3f17eae731df6f5c5"> 3032</a></span> <a class="code" href="classclang_1_1Sema.html#a4274cf462c45a9c3f17eae731df6f5c5">Sema::ActOnObjCAutoreleasePoolStmt</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> AtLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Body) {</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>   getCurFunction()->setHasBranchProtectedScope();</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>   <span class="keywordflow">return</span> Owned(<span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1ObjCAutoreleasePoolStmt.html" title="Represents Objective-C's @autoreleasepool Statement.">ObjCAutoreleasePoolStmt</a>(AtLoc, Body));</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span> }</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span> </div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> <span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> </div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> <span class="keyword">class </span>TypeWithHandler {</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> t;</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>   <a class="code" href="classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a> *<a class="code" href="namespaceclang_1_1ast__matchers.html#afb4ea98cfdb46fdfbea24fd10b8926e7" title="Matches statements.">stmt</a>;</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>   TypeWithHandler(<span class="keyword">const</span> <a class="code" href="classclang_1_1QualType.html">QualType</a> &<a class="code" href="namespaceclang_1_1ast__matchers.html#a82efb51f28681d561f9ce42fecf09d4b" title="Matches Types in the clang AST.">type</a>, <a class="code" href="classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a> *statement)</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>   : t(type), <a class="code" href="namespaceclang_1_1ast__matchers.html#afb4ea98cfdb46fdfbea24fd10b8926e7" title="Matches statements.">stmt</a>(statement) {}</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> </div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>   <span class="comment">// An arbitrary order is fine as long as it places identical</span></div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>   <span class="comment">// types next to each other.</span></div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>   <span class="keywordtype">bool</span> <a class="code" href="namespaceclang.html#a51e572049a11fe5cf42e8da840bf69af">operator<</a>(<span class="keyword">const</span> TypeWithHandler &y)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>     <span class="keywordflow">if</span> (t.getAsOpaquePtr() < y.t.getAsOpaquePtr())</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>     <span class="keywordflow">if</span> (t.getAsOpaquePtr() > y.t.getAsOpaquePtr())</div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>       <span class="keywordflow">return</span> getTypeSpecStartLoc() < y.getTypeSpecStartLoc();</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>   }</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> </div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>   <span class="keywordtype">bool</span> <a class="code" href="namespaceclang.html#a291d36360b70f878533d50fde94b1465">operator==</a>(<span class="keyword">const</span> TypeWithHandler& other)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>     <span class="keywordflow">return</span> t == other.t;</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>   }</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> </div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>   <a class="code" href="classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a> *getCatchStmt()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceclang_1_1ast__matchers.html#afb4ea98cfdb46fdfbea24fd10b8926e7" title="Matches statements.">stmt</a>; }</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</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> getTypeSpecStartLoc()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang_1_1ast__matchers.html#afb4ea98cfdb46fdfbea24fd10b8926e7" title="Matches statements.">stmt</a>->getExceptionDecl()->getTypeSpecStartLoc();</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>   }</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> };</div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span> </div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span> }</div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> <span class="comment"></span></div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span> <span class="comment">/// ActOnCXXTryBlock - Takes a try compound-statement and a number of</span></div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> <span class="comment">/// handlers and creates a try statement from them.</span></div>
+<div class="line"><a name="l03071"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#af683ad5f34501466b5ec8f1f5e63fa6e"> 3071</a></span> <span class="comment"></span><a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#af683ad5f34501466b5ec8f1f5e63fa6e">Sema::ActOnCXXTryBlock</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> TryLoc, <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *TryBlock,</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>                                   <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<Stmt *></a> Handlers) {</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>   <span class="comment">// Don't report an error if 'try' is used in system headers.</span></div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>   <span class="keywordflow">if</span> (!getLangOpts().CXXExceptions &&</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>       !getSourceManager().isInSystemHeader(TryLoc))</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>       <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(TryLoc, diag::err_exceptions_disabled) << <span class="stringliteral">"try"</span>;</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span> </div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> NumHandlers = Handlers.size();</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>   assert(NumHandlers > 0 &&</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>          <span class="stringliteral">"The parser shouldn't call this if there are no handlers."</span>);</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span> </div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<TypeWithHandler, 8></a> TypesWithHandlers;</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span> </div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < NumHandlers; ++i) {</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>     <a class="code" href="classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a> *Handler = cast<CXXCatchStmt>(Handlers[i]);</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>     <span class="keywordflow">if</span> (!Handler-><a class="code" href="classclang_1_1CXXCatchStmt.html#a7eb78e2e8fd238befe06fb565f443d82">getExceptionDecl</a>()) {</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>       <span class="keywordflow">if</span> (i < NumHandlers - 1)</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>         <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(Handler-><a class="code" href="classclang_1_1CXXCatchStmt.html#aef68f2f5bb259cbd19997c0dfaeb0c7c">getLocStart</a>(),</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>                               diag::err_early_catch_all));</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span> </div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>     }</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span> </div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1QualType.html">QualType</a> CaughtType = Handler-><a class="code" href="classclang_1_1CXXCatchStmt.html#a42eec328f3a31da59c17605300101186">getCaughtType</a>();</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1QualType.html">QualType</a> CanonicalCaughtType = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a7e70bb7eebf01548a0cab752e390ba37" title="Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...">getCanonicalType</a>(CaughtType);</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>     TypesWithHandlers.push_back(TypeWithHandler(CanonicalCaughtType, Handler));</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>   }</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span> </div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>   <span class="comment">// Detect handlers for the same type as an earlier one.</span></div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>   <span class="keywordflow">if</span> (NumHandlers > 1) {</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>     llvm::array_pod_sort(TypesWithHandlers.begin(), TypesWithHandlers.end());</div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span> </div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>     TypeWithHandler prev = TypesWithHandlers[0];</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i < TypesWithHandlers.size(); ++i) {</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>       TypeWithHandler curr = TypesWithHandlers[i];</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span> </div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>       <span class="keywordflow">if</span> (curr == prev) {</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(curr.getTypeSpecStartLoc(),</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>              diag::warn_exception_caught_by_earlier_handler)</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>           << curr.getCatchStmt()->getCaughtType().getAsString();</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>         <a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(prev.getTypeSpecStartLoc(),</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>              diag::note_previous_exception_handler)</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>           << prev.getCatchStmt()->getCaughtType().getAsString();</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>       }</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span> </div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>       prev = curr;</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>     }</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</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>   getCurFunction()->setHasBranchProtectedScope();</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span> </div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>   <span class="comment">// FIXME: We should detect handlers that cannot catch anything because an</span></div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>   <span class="comment">// earlier handler catches a superclass. Need to find a method that is not</span></div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>   <span class="comment">// quadratic for this.</span></div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>   <span class="comment">// Neither of these are explicitly forbidden, but every compiler detects them</span></div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>   <span class="comment">// and warns.</span></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="keywordflow">return</span> Owned(<a class="code" href="classclang_1_1CXXTryStmt.html#a4395e2405f2e82a40380c5290bad44cd">CXXTryStmt::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, TryLoc, TryBlock, Handlers));</div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span> }</div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> </div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l03132"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a4b75897f8bdac667dc68787982141d0f"> 3132</a></span> <a class="code" href="classclang_1_1Sema.html#a4b75897f8bdac667dc68787982141d0f">Sema::ActOnSEHTryBlock</a>(<span class="keywordtype">bool</span> IsCXXTry,</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</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> TryLoc,</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>                        <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *TryBlock,</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>                        <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Handler) {</div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>   assert(TryBlock && Handler);</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span> </div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>   getCurFunction()->setHasBranchProtectedScope();</div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span> </div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>   <span class="keywordflow">return</span> Owned(<a class="code" href="classclang_1_1SEHTryStmt.html#aceaeb6d0a7fcf8d37dd52624aad7cf90">SEHTryStmt::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,IsCXXTry,TryLoc,TryBlock,Handler));</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</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> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l03144"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ac215c569d5b0e0203052ee85fc992e4c"> 3144</a></span> <a class="code" href="classclang_1_1Sema.html#ac215c569d5b0e0203052ee85fc992e4c">Sema::ActOnSEHExceptBlock</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> Loc,</div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>                           <a class="code" href="classclang_1_1Expr.html">Expr</a> *FilterExpr,</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>                           <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Block) {</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>   assert(FilterExpr && Block);</div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span> </div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>   <span class="keywordflow">if</span>(!FilterExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a8bde7a56623fd89e9efafde792c56dac">isIntegerType</a>()) {</div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>     <span class="keywordflow">return</span> <a class="code" href="namespaceclang.html#a72e08dd7978003227c1191013023a22d">StmtError</a>(<a class="code" href="LiteralSupport_8cpp.html#a5f4a4a29292c4a1697226abf1d22b9dd" title="Produce a diagnostic highlighting some portion of a literal.">Diag</a>(FilterExpr-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(),</div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>                      diag::err_filter_expression_integral)</div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>                      << FilterExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>   }</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span> </div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>   <span class="keywordflow">return</span> Owned(<a class="code" href="classclang_1_1SEHExceptStmt.html#a9498782af69e8deabc0aa9cd0609eda5">SEHExceptStmt::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,Loc,FilterExpr,Block));</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span> }</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span> </div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a></div>
+<div class="line"><a name="l03159"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#ab87c92a4b77d8ce7cb3238d50d7425d9"> 3159</a></span> <a class="code" href="classclang_1_1Sema.html#ab87c92a4b77d8ce7cb3238d50d7425d9">Sema::ActOnSEHFinallyBlock</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> Loc,</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>                            <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Block) {</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>   assert(Block);</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>   <span class="keywordflow">return</span> Owned(<a class="code" href="classclang_1_1SEHFinallyStmt.html#ab35627b0ccbffcc4826c2fca2316d7a0">SEHFinallyStmt::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,Loc,Block));</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> </div>
+<div class="line"><a name="l03165"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a0afed821d460dead45f84142bc485248"> 3165</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a0afed821d460dead45f84142bc485248">Sema::BuildMSDependentExistsStmt</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> KeywordLoc,</div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>                                             <span class="keywordtype">bool</span> IsIfExists,</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>                                             <a class="code" href="classclang_1_1NestedNameSpecifierLoc.html" title="A C++ nested-name-specifier augmented with source location information.">NestedNameSpecifierLoc</a> QualifierLoc,</div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>                                             <a class="code" href="structclang_1_1DeclarationNameInfo.html">DeclarationNameInfo</a> NameInfo,</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>                                             <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Nested)</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span> {</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>   <span class="keywordflow">return</span> <span class="keyword">new</span> (<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>) <a class="code" href="classclang_1_1MSDependentExistsStmt.html" title="Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name...">MSDependentExistsStmt</a>(KeywordLoc, IsIfExists,</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>                                              QualifierLoc, NameInfo,</div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>                                              cast<CompoundStmt>(Nested));</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span> }</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span> </div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> </div>
+<div class="line"><a name="l03177"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#abf7274b5e023f6adb4775227fd59ce52"> 3177</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#abf7274b5e023f6adb4775227fd59ce52">Sema::ActOnMSDependentExistsStmt</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> KeywordLoc,</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>                                             <span class="keywordtype">bool</span> IsIfExists,</div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</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="l03180"></a><span class="lineno"> 3180</span>                                             <a class="code" href="classclang_1_1UnqualifiedId.html" title="Represents a C++ unqualified-id that has been parsed.">UnqualifiedId</a> &Name,</div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>                                             <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *Nested) {</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>   <span class="keywordflow">return</span> BuildMSDependentExistsStmt(KeywordLoc, IsIfExists,</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>                                     SS.<a class="code" href="classclang_1_1CXXScopeSpec.html#a39276dfded0dab7f252f05c9f643996f" title="Retrieve a nested-name-specifier with location information, copied into the given AST context...">getWithLocInContext</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>),</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>                                     GetNameFromUnqualifiedId(Name),</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>                                     Nested);</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> </div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span> <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a>*</div>
+<div class="line"><a name="l03189"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a80b05c7f5da7e65b4f55c417bde7b167"> 3189</a></span> <a class="code" href="classclang_1_1Sema.html#a80b05c7f5da7e65b4f55c417bde7b167">Sema::CreateCapturedStmtRecordDecl</a>(<a class="code" href="classclang_1_1CapturedDecl.html" title="This represents the body of a CapturedStmt, and serves as its DeclContext.">CapturedDecl</a> *&CD, <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="l03190"></a><span class="lineno"> 3190</span>                                    <span class="keywordtype">unsigned</span> NumParams) {</div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>   <a class="code" href="classclang_1_1DeclContext.html">DeclContext</a> *DC = CurContext;</div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>   <span class="keywordflow">while</span> (!(DC-><a class="code" href="classclang_1_1DeclContext.html#a05b966b6459e1d11c317f8abe3e2d66f">isFunctionOrMethod</a>() || DC-><a class="code" href="classclang_1_1DeclContext.html#a85027c592c0fa8ffa83e2570089217a7">isRecord</a>() || DC-><a class="code" href="classclang_1_1DeclContext.html#ac33a346d4e8db5e892aba87393f4e8e4">isFileContext</a>()))</div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>     DC = DC-><a class="code" href="classclang_1_1DeclContext.html#a31c99b38017e8d702fda9c0f1d021186" title="getParent - Returns the containing DeclContext.">getParent</a>();</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span> </div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>   <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a> *RD = 0;</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>   <span class="keywordflow">if</span> (getLangOpts().<a class="code" href="namespaceclang_1_1frontend.html#a09dfa01c4e997a3794d80922c5e853bbaf89a7ac6211aecefb5f7ecc17d3ebed4">CPlusPlus</a>)</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>     RD = <a class="code" href="classclang_1_1CXXRecordDecl.html#a5fd9b830edb5b3b128e9eebc1bb2d6d2">CXXRecordDecl::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, <a class="code" href="namespaceclang.html#a9237bdb3cf715b9bff8bcb3172635548ac341a3cfc4dae72e09e2348561fffc12" title="The "struct" keyword.">TTK_Struct</a>, DC, Loc, Loc, <span class="comment">/*Id=*/</span>0);</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>     RD = <a class="code" href="classclang_1_1RecordDecl.html#a0e802209d6f62075ebaf1712f3ac0ef6">RecordDecl::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, <a class="code" href="namespaceclang.html#a9237bdb3cf715b9bff8bcb3172635548ac341a3cfc4dae72e09e2348561fffc12" title="The "struct" keyword.">TTK_Struct</a>, DC, Loc, Loc, <span class="comment">/*Id=*/</span>0);</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span> </div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>   DC-><a class="code" href="classclang_1_1DeclContext.html#a86d2d92d17fbed1a41461bef1ec5cef8" title="Add the declaration D into this context.">addDecl</a>(RD);</div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>   RD-><a class="code" href="classclang_1_1Decl.html#aa89b44dad7f4fd7e9c15129f8f0784e4">setImplicit</a>();</div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>   RD-><a class="code" href="classclang_1_1TagDecl.html#a5a54066831bd4af8a720ca33d3fc46da" title="Starts the definition of this tag declaration.">startDefinition</a>();</div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> </div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>   CD = <a class="code" href="classclang_1_1CapturedDecl.html#abe250938064b025b3cd689665b53cc12">CapturedDecl::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, CurContext, NumParams);</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>   DC-><a class="code" href="classclang_1_1DeclContext.html#a86d2d92d17fbed1a41461bef1ec5cef8" title="Add the declaration D into this context.">addDecl</a>(CD);</div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span> </div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>   <span class="comment">// Build the context parameter</span></div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>   assert(NumParams > 0 && <span class="stringliteral">"CapturedStmt requires context parameter"</span>);</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>   DC = <a class="code" href="classclang_1_1CapturedDecl.html#a8d856a26ff98ec8d63bcb8f737812a9f">CapturedDecl::castToDeclContext</a>(CD);</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>   <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *VarName = &<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a4f95adb9958e22fbe55212ae6482feb4">Idents</a>.<a class="code" href="classclang_1_1IdentifierTable.html#aea14376d325400caa8a8183d14a02f39" title="Return the identifier token info for the specified named identifier.">get</a>(<span class="stringliteral">"__context"</span>);</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> ParamType = <a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a3574cad49cba0fc48ab7b4c953e7e31e" title="Return the uniqued reference to the type for a pointer to the specified type.">getPointerType</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>.<a class="code" href="classclang_1_1ASTContext.html#a92752b8dd75428a63b2e787642db884a" title="Return the unique reference to the type for the specified TagDecl (struct/union/class/enum) decl...">getTagDeclType</a>(RD));</div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>   <a class="code" href="classclang_1_1ImplicitParamDecl.html">ImplicitParamDecl</a> *<a class="code" href="SemaOverload_8cpp.html#af465899bf43044df83229078154bc2ed">Param</a></div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>     = <a class="code" href="classclang_1_1ImplicitParamDecl.html#add66002b6973118b8203af49374faf84">ImplicitParamDecl::Create</a>(<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>, DC, Loc, VarName, ParamType);</div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>   DC-><a class="code" href="classclang_1_1DeclContext.html#a86d2d92d17fbed1a41461bef1ec5cef8" title="Add the declaration D into this context.">addDecl</a>(Param);</div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span> </div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>   CD-><a class="code" href="classclang_1_1CapturedDecl.html#a9f6a9c6dd692891fc4e90e36fa6010dd">setContextParam</a>(Param);</div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span> </div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>   <span class="keywordflow">return</span> RD;</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> </div>
+<div class="line"><a name="l03222"></a><span class="lineno"><a class="code" href="SemaStmt_8cpp.html#a7d433c9372caf546f41533354d22e19b"> 3222</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SemaStmt_8cpp.html#a7d433c9372caf546f41533354d22e19b">buildCapturedStmtCaptureList</a>(</div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<CapturedStmt::Capture></a> &Captures,</div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Expr *></a> &CaptureInits,</div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>     <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<CapturingScopeInfo::Capture></a> Candidates) {</div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span> </div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>   <span class="keyword">typedef</span> <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<CapturingScopeInfo::Capture>::const_iterator</a> CaptureIter;</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>   <span class="keywordflow">for</span> (CaptureIter Cap = Candidates.begin(); Cap != Candidates.end(); ++Cap) {</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="keywordflow">if</span> (Cap->isThisCapture()) {</div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>       Captures.push_back(<a class="code" href="classclang_1_1CapturedStmt_1_1Capture.html" title="Describes the capture of either a variable or 'this'.">CapturedStmt::Capture</a>(Cap->getLocation(),</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>                                                <a class="code" href="classclang_1_1CapturedStmt.html#afb747ec45133369cb19bdfa42d05b681a9b3af94196bbfd960c48ad3a3ae50fbd">CapturedStmt::VCK_This</a>));</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>       CaptureInits.push_back(Cap->getInitExpr());</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>     }</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span> </div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>     assert(Cap->isReferenceCapture() &&</div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>            <span class="stringliteral">"non-reference capture not yet implemented"</span>);</div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span> </div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>     Captures.push_back(<a class="code" href="classclang_1_1CapturedStmt_1_1Capture.html" title="Describes the capture of either a variable or 'this'.">CapturedStmt::Capture</a>(Cap->getLocation(),</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>                                              <a class="code" href="classclang_1_1CapturedStmt.html#afb747ec45133369cb19bdfa42d05b681a9a062a93945b17ad9e1f18d28301a1d2">CapturedStmt::VCK_ByRef</a>,</div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>                                              Cap->getVariable()));</div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>     CaptureInits.push_back(Cap->getInitExpr());</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>   }</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> </div>
+<div class="line"><a name="l03247"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a82042f2c18c3c1f53135a8e1295a2094"> 3247</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#a82042f2c18c3c1f53135a8e1295a2094">Sema::ActOnCapturedRegionStart</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> Loc, <a class="code" href="classclang_1_1Scope.html">Scope</a> *CurScope,</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>                                     <a class="code" href="namespaceclang.html#a52df778f2a9b540afde2bc183e9c2075" title="The different kinds of captured statement.">CapturedRegionKind</a> <a class="code" href="ChrootChecker_8cpp.html#aa10c9e8951b8ccf714a59ec321bdac5b">Kind</a>,</div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>                                     <span class="keywordtype">unsigned</span> NumParams) {</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>   <a class="code" href="classclang_1_1CapturedDecl.html" title="This represents the body of a CapturedStmt, and serves as its DeclContext.">CapturedDecl</a> *CD = 0;</div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>   <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a> *RD = CreateCapturedStmtRecordDecl(CD, Loc, NumParams);</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span> </div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>   <span class="comment">// Enter the capturing scope for this captured region.</span></div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>   PushCapturedRegionScope(CurScope, CD, RD, Kind);</div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> </div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>   <span class="keywordflow">if</span> (CurScope)</div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>     PushDeclContext(CurScope, CD);</div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>     CurContext = CD;</div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span> </div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>   PushExpressionEvaluationContext(PotentiallyEvaluated);</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> }</div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> </div>
+<div class="line"><a name="l03264"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a3e4203e229d85e21bbaf6c90b4010f54"> 3264</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1Sema.html#a3e4203e229d85e21bbaf6c90b4010f54">Sema::ActOnCapturedRegionError</a>() {</div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>   DiscardCleanupsInEvaluationContext();</div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>   PopExpressionEvaluationContext();</div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> </div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>   <a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html" title="Retains information about a captured region.">CapturedRegionScopeInfo</a> *RSI = getCurCapturedRegion();</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>   <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a> *Record = RSI-><a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html#ac2220a625eccb44c52b73e4194454ddb" title="The captured record type.">TheRecordDecl</a>;</div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>   Record-><a class="code" href="classclang_1_1Decl.html#a46b92fa90488bdc219831b05cd858c0b">setInvalidDecl</a>();</div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> </div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Decl*, 4></a> Fields;</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>   <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1DeclContext_1_1specific__decl__iterator.html">RecordDecl::field_iterator</a> I = Record-><a class="code" href="classclang_1_1RecordDecl.html#a723c70951c30c075e7a516d1933683e4">field_begin</a>(),</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>                                   E = Record-><a class="code" href="classclang_1_1RecordDecl.html#a118f17574e4199f2d26cd20902dc88ca">field_end</a>(); I != E; ++I)</div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>     Fields.push_back(*I);</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>   ActOnFields(<span class="comment">/*Scope=*/</span>0, Record-><a class="code" href="classclang_1_1Decl.html#a2348196ac4e0b1d5ebb1859c31b99eac">getLocation</a>(), Record, Fields,</div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</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_1SourceLocation.html" title="Encodes a location in the source. The SourceManager can decode this to get at the full include stack...">SourceLocation</a>(), <span class="comment">/*AttributeList=*/</span>0);</div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span> </div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>   PopDeclContext();</div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>   PopFunctionScopeInfo();</div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span> }</div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span> </div>
+<div class="line"><a name="l03283"></a><span class="lineno"><a class="code" href="classclang_1_1Sema.html#a9a2378528bb29eadf2fe2bdb90384fc0"> 3283</a></span> <a class="code" href="classclang_1_1ActionResult.html">StmtResult</a> <a class="code" href="classclang_1_1Sema.html#a9a2378528bb29eadf2fe2bdb90384fc0">Sema::ActOnCapturedRegionEnd</a>(<a class="code" href="classclang_1_1Stmt.html">Stmt</a> *S) {</div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>   <a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html" title="Retains information about a captured region.">CapturedRegionScopeInfo</a> *RSI = getCurCapturedRegion();</div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> </div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<CapturedStmt::Capture, 4></a> Captures;</div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<Expr *, 4></a> CaptureInits;</div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>   <a class="code" href="SemaStmt_8cpp.html#a7d433c9372caf546f41533354d22e19b">buildCapturedStmtCaptureList</a>(Captures, CaptureInits, RSI-><a class="code" href="classclang_1_1sema_1_1CapturingScopeInfo.html#a574ca54c992d9b583ff3637675d808aa" title="Captures - The captures.">Captures</a>);</div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span> </div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>   <a class="code" href="classclang_1_1CapturedDecl.html" title="This represents the body of a CapturedStmt, and serves as its DeclContext.">CapturedDecl</a> *CD = RSI-><a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html#af923560c2beac1d9ff0f9dc2f5ba0247" title="The CapturedDecl for this statement.">TheCapturedDecl</a>;</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>   <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a> *RD = RSI-><a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html#ac2220a625eccb44c52b73e4194454ddb" title="The captured record type.">TheRecordDecl</a>;</div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> </div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>   <a class="code" href="classclang_1_1CapturedStmt.html" title="This captures a statement into a function. For example, the following pragma annotated compound state...">CapturedStmt</a> *Res = <a class="code" href="classclang_1_1CapturedStmt.html#abb6962831b28edf01967311a9ec524e9">CapturedStmt::Create</a>(getASTContext(), S,</div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>                                            RSI-><a class="code" href="classclang_1_1sema_1_1CapturedRegionScopeInfo.html#aa2608ba35253b1bb0b44dfaf6d8ad21d" title="The kind of captured region.">CapRegionKind</a>, Captures,</div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>                                            CaptureInits, CD, RD);</div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span> </div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>   CD-><a class="code" href="classclang_1_1CapturedDecl.html#af6e71d3e745970e7f283db7a4b8bb08b">setBody</a>(Res-><a class="code" href="classclang_1_1CapturedStmt.html#ae8ade9cc59759ca1e39d7bb9d0a76f9f" title="Retrieve the statement being captured.">getCapturedStmt</a>());</div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>   RD-><a class="code" href="classclang_1_1RecordDecl.html#acc8668f235e310c30c64285c46c640be">completeDefinition</a>();</div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> </div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>   DiscardCleanupsInEvaluationContext();</div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>   PopExpressionEvaluationContext();</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> </div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>   PopDeclContext();</div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>   PopFunctionScopeInfo();</div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span> </div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>   <span class="keywordflow">return</span> Owned(Res);</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:14:08 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8d_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8d_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8d_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/SemaStmt_8d_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,619 @@
+<!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: SemaStmt.d 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_0c3cadfa2fbef89a3b8f57073e8a31f9.html">Sema</a></li><li class="navelem"><a class="el" href="dir_eb0099ce9b4bd055698282f76081f892.html">Release+Asserts</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">SemaStmt.d</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="SemaStmt_8d.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> /home/tstellar/llvm/tools/clang/lib/Sema/Release+Asserts/SemaStmt.o \</div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>  /home/tstellar/llvm/tools/clang/lib/Sema/Release+Asserts/SemaStmt.d: \</div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>  SemaStmt.cpp \</div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/SemaInternal.h \</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTContext.h \</div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTTypeTraits.h \</div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTFwd.h \</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclNodes.inc \</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtNodes.inc \</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/TypeNodes.def \</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Decl.h \</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/APValue.h \</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/LLVM.h \</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>  /home/tstellar/llvm/include/llvm/Support/Casting.h \</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>  /home/tstellar/llvm/include/llvm/Support/type_traits.h \</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>  /home/tstellar/llvm/include/llvm/Support/DataTypes.h \</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>  /home/tstellar/llvm/include/llvm/ADT/None.h \</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>  /home/tstellar/llvm/include/llvm/ADT/APFloat.h \</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>  /home/tstellar/llvm/include/llvm/ADT/APInt.h \</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>  /home/tstellar/llvm/include/llvm/ADT/ArrayRef.h \</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>  /home/tstellar/llvm/include/llvm/ADT/SmallVector.h \</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>  /home/tstellar/llvm/include/llvm/Support/AlignOf.h \</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>  /home/tstellar/llvm/include/llvm/Support/Compiler.h \</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>  /home/tstellar/llvm/include/llvm/Config/llvm-config.h \</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>  /home/tstellar/llvm/include/llvm/Support/MathExtras.h \</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>  /home/tstellar/llvm/include/llvm/Support/SwapByteOrder.h \</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  /home/tstellar/llvm/include/llvm/ADT/APSInt.h \</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  /home/tstellar/llvm/include/llvm/ADT/PointerIntPair.h \</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>  /home/tstellar/llvm/include/llvm/Support/PointerLikeTypeTraits.h \</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>  /home/tstellar/llvm/include/llvm/ADT/PointerUnion.h \</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclBase.h \</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/AttrIterator.h \</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclarationName.h \</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/IdentifierTable.h \</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OperatorKinds.h \</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OperatorKinds.def \</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/TokenKinds.h \</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/TokenKinds.def \</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>  /home/tstellar/llvm/include/llvm/ADT/SmallString.h \</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>  /home/tstellar/llvm/include/llvm/ADT/StringRef.h \</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>  /home/tstellar/llvm/include/llvm/ADT/StringMap.h \</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>  /home/tstellar/llvm/include/llvm/Support/<a class="code" href="Format_8cpp.html#a0805f884ee63233d49322f71926371de">Allocator</a>.h \</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/PartialDiagnostic.h \</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Diagnostic.h \</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticIDs.h \</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>  /home/tstellar/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h \</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticCommonKinds.inc \</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticOptions.h \</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticOptions.def \</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/SourceLocation.h \</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>  /home/tstellar/llvm/include/llvm/ADT/DenseMap.h \</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>  /home/tstellar/llvm/include/llvm/ADT/DenseMapInfo.h \</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>  /home/tstellar/llvm/include/llvm/ADT/STLExtras.h \</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/<a class="code" href="namespaceclang.html#a78aadfeaf316ded55fdd2d1a9c8815b6" title="Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have...">Linkage</a>.h \</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Specifiers.h \</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>  /home/tstellar/llvm/include/llvm/Support/PrettyStackTrace.h \</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ExternalASTSource.h \</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/CharUnits.h \</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Redeclarable.h \</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Type.h \</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/NestedNameSpecifier.h \</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>  /home/tstellar/llvm/include/llvm/ADT/FoldingSet.h \</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/TemplateName.h \</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/<a class="code" href="namespaceclang.html#af8a91eed04532d5da41ef08e7c9c081e" title="The various types of exception specifications that exist in C++11.">ExceptionSpecificationType</a>.h \</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/<a class="code" href="namespaceclang.html#afbab15cd4aa598c4e6d9192f7ac4f102" title="Describes the different kinds of visibility that a declaration may have.">Visibility</a>.h \</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>  /home/tstellar/llvm/include/llvm/ADT/Optional.h \</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>  /home/tstellar/llvm/include/llvm/ADT/Twine.h \</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>  /home/tstellar/llvm/include/llvm/Support/ErrorHandling.h \</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/BuiltinTypes.def \</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>  /home/tstellar/llvm/include/llvm/Support/raw_ostream.h \</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>  /home/tstellar/llvm/include/llvm/Support/FileSystem.h \</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>  /home/tstellar/llvm/include/llvm/ADT/OwningPtr.h \</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>  /home/tstellar/llvm/include/llvm/Support/TimeValue.h \</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>  /home/tstellar/llvm/include/llvm/Support/system_error.h \</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Stmt.h \</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclGroup.h \</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtIterator.h \</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/CapturedStmt.h \</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/TemplateBase.h \</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/TypeLoc.h \</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/TypeLocNodes.def \</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/CanonicalType.h \</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/CommentCommandTraits.h \</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/CommentOptions.h \</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/CommentCommandList.inc \</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/PrettyPrinter.h \</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/LangOptions.h \</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/ObjCRuntime.h \</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/VersionTuple.h \</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>  /home/tstellar/llvm/include/llvm/ADT/Triple.h \</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Sanitizers.def \</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/LangOptions.def \</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OpenCLExtensions.def \</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/RawCommentList.h \</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/SourceManager.h \</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/FileManager.h \</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/FileSystemOptions.h \</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>  /home/tstellar/llvm/include/llvm/ADT/DenseSet.h \</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>  /home/tstellar/llvm/include/llvm/Support/MemoryBuffer.h \</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>  /home/tstellar/llvm/include/llvm/Support/CBindingWrapping.h \</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>  /home/tstellar/llvm/include/llvm-c/Core.h \</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/AddressSpaces.h \</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>  /home/tstellar/llvm/include/llvm/ADT/SmallPtrSet.h \</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>  /home/tstellar/llvm/include/llvm/ADT/TinyPtrVector.h \</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Sema.h \</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Attr.h \</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/AttrKinds.h \</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/AttrList.inc \</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>  /home/tstellar/llvm/include/llvm/ADT/StringSwitch.h \</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Attrs.inc \</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Expr.h \</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTVector.h \</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclAccessPair.h \</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/OperationKinds.h \</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/CharInfo.h \</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/TypeTraits.h \</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Builtins.def \</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ExprObjC.h \</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclObjC.h \</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/<a class="code" href="namespaceclang.html#a0bca8d4a06a5e7175d2177c94788c9b4" title="Whether all locations of the selector identifiers are in a "standard" position.">SelectorLocationsKind</a>.h \</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/MangleNumberingContext.h \</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/NSAPI.h \</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/ExpressionTraits.h \</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OpenMPKinds.h \</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OpenMPKinds.def \</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/TemplateKinds.h \</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/ModuleLoader.h \</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Module.h \</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>  /home/tstellar/llvm/include/llvm/ADT/SetVector.h \</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>  /home/tstellar/llvm/include/llvm/ADT/SmallSet.h \</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/AnalysisBasedWarnings.h \</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/DeclSpec.h \</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Lambda.h \</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/<a class="code" href="UnwrappedLineParser_8cpp.html#ac39165965ffcb0218343355d1f482d64">Token</a>.h \</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/AttributeList.h \</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Ownership.h \</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/AttrParsedAttrList.inc \</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/ExternalSemaSource.h \</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/TypoCorrection.h \</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclCXX.h \</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTUnresolvedSet.h \</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/UnresolvedSet.h \</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ExprCXX.h \</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Weak.h \</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>  /home/tstellar/llvm/include/llvm/ADT/MapVector.h \</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/IdentifierResolver.h \</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/LocInfoType.h \</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/ObjCMethodList.h \</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/ScopeInfo.h \</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>  /home/tstellar/llvm/include/llvm/MC/MCParser/MCAsmParser.h \</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>  /home/tstellar/llvm/include/llvm/MC/MCParser/AsmLexer.h \</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>  /home/tstellar/llvm/include/llvm/MC/MCParser/MCAsmLexer.h \</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>  /home/tstellar/llvm/include/llvm/Support/SMLoc.h \</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/SemaDiagnostic.h \</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticSemaKinds.inc \</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTDiagnostic.h \</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticASTKinds.inc \</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/EvaluatedExprVisitor.h \</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtVisitor.h \</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtCXX.h \</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtObjC.h \</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtOpenMP.h \</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Preprocessor.h \</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Builtins.h \</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Lexer.h \</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/PreprocessorLexer.h \</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/MultipleIncludeOpt.h \</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/MacroInfo.h \</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/ModuleMap.h \</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/PPCallbacks.h \</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/DirectoryLookup.h \</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Pragma.h \</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/PTHLexer.h \</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/PTHManager.h \</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/TokenLexer.h \</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Initialization.h \</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Overload.h \</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclTemplate.h \</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/SemaFixItUtils.h \</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/TemplateDeduction.h \</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Lookup.h \</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>  /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/Scope.h</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Sema/SemaInternal.h:</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTContext.h:</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTTypeTraits.h:</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> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ASTFwd.h:</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclNodes.inc:</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/StmtNodes.inc:</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/TypeNodes.def:</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Decl.h:</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/APValue.h:</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/LLVM.h:</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> /home/tstellar/llvm/include/llvm/Support/Casting.h:</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> /home/tstellar/llvm/include/llvm/Support/type_traits.h:</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> /home/tstellar/llvm/include/llvm/Support/DataTypes.h:</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> /home/tstellar/llvm/include/llvm/ADT/None.h:</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> /home/tstellar/llvm/include/llvm/ADT/APFloat.h:</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> /home/tstellar/llvm/include/llvm/ADT/APInt.h:</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> /home/tstellar/llvm/include/llvm/ADT/ArrayRef.h:</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> /home/tstellar/llvm/include/llvm/ADT/SmallVector.h:</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> /home/tstellar/llvm/include/llvm/Support/AlignOf.h:</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> /home/tstellar/llvm/include/llvm/Support/Compiler.h:</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> /home/tstellar/llvm/include/llvm/Config/llvm-config.h:</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> /home/tstellar/llvm/include/llvm/Support/MathExtras.h:</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> /home/tstellar/llvm/include/llvm/Support/SwapByteOrder.h:</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> /home/tstellar/llvm/include/llvm/ADT/APSInt.h:</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> /home/tstellar/llvm/include/llvm/ADT/PointerIntPair.h:</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> /home/tstellar/llvm/include/llvm/Support/PointerLikeTypeTraits.h:</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> /home/tstellar/llvm/include/llvm/ADT/PointerUnion.h:</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclBase.h:</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/AttrIterator.h:</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/DeclarationName.h:</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/IdentifierTable.h:</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OperatorKinds.h:</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/OperatorKinds.def:</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> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/TokenKinds.h:</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> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/TokenKinds.def:</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> /home/tstellar/llvm/include/llvm/ADT/SmallString.h:</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> /home/tstellar/llvm/include/llvm/ADT/StringRef.h:</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> /home/tstellar/llvm/include/llvm/ADT/StringMap.h:</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> /home/tstellar/llvm/include/llvm/Support/<a class="code" href="Format_8cpp.html#a0805f884ee63233d49322f71926371de">Allocator</a>.h:</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> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/PartialDiagnostic.h:</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Diagnostic.h:</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticIDs.h:</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> /home/tstellar/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticCommonKinds.inc:</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticOptions.h:</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> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/DiagnosticOptions.def:</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/SourceLocation.h:</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> /home/tstellar/llvm/include/llvm/ADT/DenseMap.h:</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> /home/tstellar/llvm/include/llvm/ADT/DenseMapInfo.h:</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> /home/tstellar/llvm/include/llvm/ADT/STLExtras.h:</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/<a class="code" href="namespaceclang.html#a78aadfeaf316ded55fdd2d1a9c8815b6" title="Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have...">Linkage</a>.h:</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/Basic/Specifiers.h:</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> /home/tstellar/llvm/include/llvm/Support/PrettyStackTrace.h:</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/ExternalASTSource.h:</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/CharUnits.h:</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> /home/tstellar/llvm/tools/clang/lib/Sema/../../include/clang/AST/Redeclarable.h:</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>