[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/CGExpr_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/CGExpr_8cpp_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/CGExpr_8cpp_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/CGExpr_8cpp_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,3427 @@
+<!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: CGExpr.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_373837989a1dc63be881832a195d38c3.html">CodeGen</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">CGExpr.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="CGExpr_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">//===--- CGExpr.cpp - Emit LLVM Code from Expressions ---------------------===//</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 contains code to emit Expr nodes as LLVM code.</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="CodeGenFunction_8h.html">CodeGenFunction.h</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor">#include "<a class="code" href="CGCXXABI_8h.html">CGCXXABI.h</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor">#include "<a class="code" href="CGCall_8h.html">CGCall.h</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "<a class="code" href="CGDebugInfo_8h.html">CGDebugInfo.h</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "<a class="code" href="CGObjCRuntime_8h.html">CGObjCRuntime.h</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include "<a class="code" href="CGRecordLayout_8h.html">CGRecordLayout.h</a>"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "<a class="code" href="CodeGenModule_8h.html">CodeGenModule.h</a>"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "<a class="code" href="lib_2CodeGen_2TargetInfo_8h.html">TargetInfo.h</a>"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</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="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "<a class="code" href="DeclObjC_8h.html">clang/AST/DeclObjC.h</a>"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "<a class="code" href="CodeGenOptions_8h.html">clang/Frontend/CodeGenOptions.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "llvm/ADT/Hashing.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "llvm/IR/DataLayout.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "llvm/IR/Intrinsics.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "llvm/IR/LLVMContext.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "llvm/IR/MDBuilder.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "llvm/Support/ConvertUTF.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keyword">using namespace </span>clang;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keyword">using namespace </span>CodeGen;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">//===--------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">//                        Miscellaneous Helper Methods</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">//===--------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa21b88eb12dee547d5a0919e7ff6b5e2">   39</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa21b88eb12dee547d5a0919e7ff6b5e2" title="Emit a cast to void* in the appropriate address space.">CodeGenFunction::EmitCastToVoidPtr</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *value) {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">unsigned</span> addressSpace =</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>     cast<llvm::PointerType>(value->getType())->getAddressSpace();</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   llvm::PointerType *destType = <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">if</span> (addressSpace)</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     destType = llvm::Type::getInt8PtrTy(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), addressSpace);</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="keywordflow">if</span> (value->getType() == destType) <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(value, destType);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> }</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/// CreateTempAlloca - This creates a alloca and inserts it into the entry</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/// block.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1c72e741c84049695bde11b7df94c332">   53</a></span> <span class="comment"></span>llvm::AllocaInst *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1c72e741c84049695bde11b7df94c332">CodeGenFunction::CreateTempAlloca</a>(llvm::Type *Ty,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                                                     <span class="keyword">const</span> Twine &Name) {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.isNamePreserving())</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span> <span class="keyword">new</span> llvm::AllocaInst(Ty, 0, <span class="stringliteral">""</span>, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5830e2deea009172af48e6a26ca6e417">AllocaInsertPt</a>);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordflow">return</span> <span class="keyword">new</span> llvm::AllocaInst(Ty, 0, Name, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5830e2deea009172af48e6a26ca6e417">AllocaInsertPt</a>);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdb7d67ade68a70b496dfd593730fe69">   60</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdb7d67ade68a70b496dfd593730fe69" title="InitTempAlloca - Provide an initial value for the given alloca.">CodeGenFunction::InitTempAlloca</a>(llvm::AllocaInst *Var,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                                      <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Init) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   llvm::StoreInst *<a class="code" href="namespaceclang_1_1ento.html#ae512ebf5e0e9f696142c92f5b771ef39">Store</a> = <span class="keyword">new</span> llvm::StoreInst(Init, Var);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   llvm::BasicBlock *Block = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5830e2deea009172af48e6a26ca6e417">AllocaInsertPt</a>->getParent();</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   Block->getInstList().insertAfter(&*<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5830e2deea009172af48e6a26ca6e417">AllocaInsertPt</a>, Store);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c9212e4c0e921d5b429b4155eddc2f9">   67</a></span> llvm::AllocaInst *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c9212e4c0e921d5b429b4155eddc2f9">CodeGenFunction::CreateIRTemp</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> Ty,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                                 <span class="keyword">const</span> Twine &Name) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   llvm::AllocaInst *Alloc = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1c72e741c84049695bde11b7df94c332">CreateTempAlloca</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(Ty), Name);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="comment">// FIXME: Should we prefer the preferred type alignment here?</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Align = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(Ty);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   Alloc->setAlignment(Align.<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">return</span> Alloc;</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_1CodeGen_1_1CodeGenFunction.html#a47e5345241bbd0554790bef95ea40f46">   76</a></span> llvm::AllocaInst *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a47e5345241bbd0554790bef95ea40f46">CodeGenFunction::CreateMemTemp</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> Ty,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                                  <span class="keyword">const</span> Twine &Name) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   llvm::AllocaInst *Alloc = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1c72e741c84049695bde11b7df94c332">CreateTempAlloca</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab96689ae1b68ca38dd3c382f54bcbcd7">ConvertTypeForMem</a>(Ty), Name);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">// FIXME: Should we prefer the preferred type alignment here?</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Align = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(Ty);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   Alloc->setAlignment(Align.<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordflow">return</span> Alloc;</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> <span class="comment"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/// EvaluateExprAsBool - Perform the usual unary conversions on the specified</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/// expression and compare the result against zero, returning an Int1Ty value.</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7b8c7e5a5818ebcdea197df5db92153c">   87</a></span> <span class="comment"></span><a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7b8c7e5a5818ebcdea197df5db92153c">CodeGenFunction::EvaluateExprAsBool</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1MemberPointerType.html">MemberPointerType</a> *MPT = E-><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_1MemberPointerType.html">MemberPointerType</a>>()) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MemPtr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abcced6119cfc90ff6332ec96766ff70a">getCXXABI</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGCXXABI.html#a5b2f0e940cd2093383b78dda6bb83c80" title="Determine if a member pointer is non-null. Returns an i1.">EmitMemberPointerIsNotNull</a>(*<span class="keyword">this</span>, MemPtr, MPT);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> BoolTy = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a699510ff594ec09506e02c3ec68e4ff5">BoolTy</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordflow">if</span> (!E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a292ac10726adf5426212b5c6ee14d9bb">isAnyComplexType</a>())</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a743572fc8d88150cac9bd1fdd1947bc5">EmitScalarConversion</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), BoolTy);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a80412f84a0612b17b641b15a8959988a">EmitComplexToScalarConversion</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a92660b9969aa3da022a8381e6debb48b">EmitComplexExpr</a>(E), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(),BoolTy);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/// EmitIgnoredExpr - Emit code to compute the specified expression,</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">/// ignoring the result.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6d658adb4ef629c25cc3821f5a3e01ec">  102</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6d658adb4ef629c25cc3821f5a3e01ec" title="EmitIgnoredExpr - Emit an expression in a context which ignores the result.">CodeGenFunction::EmitIgnoredExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1Expr.html#a4cd56ea13000be78c5459f10df89e84a">isRValue</a>())</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordflow">return</span> (<span class="keywordtype">void</span>) <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab55962fe5983453b24c64f76125c760c">EmitAnyExpr</a>(E, <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a0ebd86a7559fbac9e6da46663ecc1e78">AggValueSlot::ignored</a>(), <span class="keyword">true</span>);</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">// Just emit it as an l-value and drop the result.</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment"></span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">/// EmitAnyExpr - Emit code to compute the specified expression which</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">/// can have any type.  The result is returned as an RValue struct.</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/// If this is an aggregate expression, AggSlot indicates where the</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/// result should be returned.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab55962fe5983453b24c64f76125c760c">  114</a></span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab55962fe5983453b24c64f76125c760c">CodeGenFunction::EmitAnyExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                                     <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html" title="An aggregate value slot.">AggValueSlot</a> aggSlot,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                                     <span class="keywordtype">bool</span> ignoreResult) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac1be3afe566ffd19818efe9f6b07a8ea">getEvaluationKind</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>())) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9aa4a7b0b5cf5c3854e35ca0c172e93269">TEK_Scalar</a>:</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E, ignoreResult));</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9ad0c74fbe072df321c2078f52f052d07c">TEK_Complex</a>:</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a7e337836177fcde90cd36b8a241ab510">RValue::getComplex</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a92660b9969aa3da022a8381e6debb48b">EmitComplexExpr</a>(E, ignoreResult, ignoreResult));</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9a6bdd6972cc7f7a6326c359a2a07df29a">TEK_Aggregate</a>:</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordflow">if</span> (!ignoreResult && aggSlot.<a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#abd0f8b9466eed06c860ebb8a02d33990">isIgnored</a>())</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       aggSlot = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a28025dd0dfd2cde1cde5445690301c92">CreateAggTemp</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <span class="stringliteral">"agg-temp"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad58a7f0f413e2aea5174df10adc6d1b5">EmitAggExpr</a>(E, aggSlot);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">return</span> aggSlot.<a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a7db14eb5994ec93ea9206e82777cc6de">asRValue</a>();</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   llvm_unreachable(<span class="stringliteral">"bad evaluation kind"</span>);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment"></span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/// always be accessible even if no aggregate location is provided.</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9fdb742155a07d24c1070a5c558fdf9d">  133</a></span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9fdb742155a07d24c1070a5c558fdf9d">CodeGenFunction::EmitAnyExprToTemp</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html" title="An aggregate value slot.">AggValueSlot</a> AggSlot = <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a0ebd86a7559fbac9e6da46663ecc1e78">AggValueSlot::ignored</a>();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adb210db7ab6920236d4403eaca7d663b">hasAggregateEvaluationKind</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()))</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     AggSlot = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a28025dd0dfd2cde1cde5445690301c92">CreateAggTemp</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <span class="stringliteral">"agg.tmp"</span>);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab55962fe5983453b24c64f76125c760c">EmitAnyExpr</a>(E, AggSlot);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment"></span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">/// EmitAnyExprToMem - Evaluate an expression into a given memory</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">/// location.</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af69d1d3fe662be6786b76104985ed2ea">  143</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af69d1d3fe662be6786b76104985ed2ea">CodeGenFunction::EmitAnyExprToMem</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                        <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Location,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                                        <a class="code" href="classclang_1_1Qualifiers.html">Qualifiers</a> Quals,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                                        <span class="keywordtype">bool</span> IsInit) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="comment">// FIXME: This function should take an LValue as an argument.</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac1be3afe566ffd19818efe9f6b07a8ea">getEvaluationKind</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>())) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9ad0c74fbe072df321c2078f52f052d07c">TEK_Complex</a>:</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1bd5d8252eada9df4a531d3ca8bf6500">EmitComplexExprIntoLValue</a>(E,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                          <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(Location, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()),</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                               <span class="comment">/*isInit*/</span> <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9a6bdd6972cc7f7a6326c359a2a07df29a">TEK_Aggregate</a>: {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Alignment = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad58a7f0f413e2aea5174df10adc6d1b5">EmitAggExpr</a>(E, <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a64e50a62672b895e0e40f2a3390a175f">AggValueSlot::forAddr</a>(Location, Alignment, Quals,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                          <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a6d84e167770e22bc451368b9a91ca431">AggValueSlot::IsDestructed_t</a>(IsInit),</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                          <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#abe9f62d142350d6acdcfde4704f3b3f6acbe806e6b4a058a90fec01ddd6e4107f">AggValueSlot::DoesNotNeedGCBarriers</a>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                                          <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a5c9c197ce5564bb19209233a7004db7f">AggValueSlot::IsAliased_t</a>(!IsInit)));</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">return</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">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9aa4a7b0b5cf5c3854e35ca0c172e93269">TEK_Scalar</a>: {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> RV = <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E, <span class="comment">/*Ignore*/</span> <span class="keyword">false</span>));</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Location, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aab00f3161bf4956de6c490615544a734">EmitStoreThroughLValue</a>(RV, LV);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   }</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>   llvm_unreachable(<span class="stringliteral">"bad evaluation kind"</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a5695f680f5323cc0e4b578611b8670cc">  175</a></span> <a class="code" href="CGExpr_8cpp.html#a5695f680f5323cc0e4b578611b8670cc">pushTemporaryCleanup</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF, <span class="keyword">const</span> <a class="code" href="classclang_1_1MaterializeTemporaryExpr.html" title="Represents a prvalue temporary that is written into memory so that a reference can bind to it...">MaterializeTemporaryExpr</a> *M,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                      <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E, <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *ReferenceTemporary) {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">// Objective-C++ ARC:</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="comment">//   If we are binding a reference to a temporary that has ownership, we</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="comment">//   need to perform retain/release operations on the temporary.</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="comment">// FIXME: This should be looking at E, not M.</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keywordflow">if</span> (CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().ObjCAutoRefCount &&</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a51d4c15edd09e2d58c0a5342abd06307">isObjCLifetimeType</a>()) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> ObjCARCReferenceLifetimeType = M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300">Qualifiers::ObjCLifetime</a> Lifetime =</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                 ObjCARCReferenceLifetimeType.<a class="code" href="classclang_1_1QualType.html#abf2b347a1ba0ed6b4fad08600273324f" title="getObjCLifetime - Returns lifetime attribute of this type.">getObjCLifetime</a>()) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a29b319bca942e44bf183ca2749b072b3" title="There is no lifetime qualification on this type.">Qualifiers::OCL_None</a>:</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a1868aff47acf923ca643cb6950363615">Qualifiers::OCL_ExplicitNone</a>:</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       <span class="comment">// Carry on to normal cleanup handling.</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       <span class="keywordflow">break</span>;</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>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300afd7d211973aef2cc5945b96a963f0e4f" title="Assigning into this object requires a lifetime extension.">Qualifiers::OCL_Autoreleasing</a>:</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       <span class="comment">// Nothing to do; cleaned up by an autorelease pool.</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       <span class="keywordflow">return</span>;</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>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a>:</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300ad62a7a19d7027c37d407d2ca7638a89c" title="Reading or writing from this object requires a barrier call.">Qualifiers::OCL_Weak</a>:</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       <span class="keywordflow">switch</span> (<a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554" title="The storage duration for an object (per C++ [basic.stc]).">StorageDuration</a> Duration = M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a0ea2768a1fdcf2045facd45195914ec9" title="Retrieve the storage duration for the materialized temporary.">getStorageDuration</a>()) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a7495dcf7f33e44049d18217454dba7c0" title="Static storage duration.">SD_Static</a>:</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="comment">// Note: we intentionally do not register a cleanup to release</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         <span class="comment">// the object on program termination.</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a2ecb65725835b618ecc18f8dfb75b4c3" title="Thread storage duration.">SD_Thread</a>:</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="comment">// FIXME: We should probably register a cleanup in this case.</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         <span class="keywordflow">return</span>;</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>       <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554acf9a137faaa271043c56f0008325ecbf" title="Automatic storage duration (most local variables).">SD_Automatic</a>:</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a9de5208d645503542b04e9c3f8392420" title="Full-expression storage duration (for temporaries).">SD_FullExpression</a>:</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         assert(!ObjCARCReferenceLifetimeType-><a class="code" href="classclang_1_1Type.html#a53b83bd119ae77bc77e92dc69a8c8094">isArrayType</a>());</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a84d444e891ff658b166431b6ffe97aa1">CodeGenFunction::Destroyer</a> *Destroy;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>         <a class="code" href="namespaceclang_1_1CodeGen.html#a2186970022771224a80dc9baa7d8ba6f">CleanupKind</a> <a class="code" href="namespaceclang_1_1CodeGen.html#a2186970022771224a80dc9baa7d8ba6f">CleanupKind</a>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         <span class="keywordflow">if</span> (Lifetime == <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a>) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>           <span class="keyword">const</span> <a class="code" href="classclang_1_1ValueDecl.html">ValueDecl</a> *VD = M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a6bb602a3bf28791e92120f3d6d8d95cf" title="Get the declaration which triggered the lifetime-extension of this temporary, if any.">getExtendingDecl</a>();</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>           <span class="keywordtype">bool</span> Precise =</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>               VD && isa<VarDecl>(VD) && VD-><a class="code" href="classclang_1_1Decl.html#ac60cc8b34313e03a5c40277c5c5ad61b">hasAttr</a><<a class="code" href="classclang_1_1ObjCPreciseLifetimeAttr.html">ObjCPreciseLifetimeAttr</a>>();</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>           CleanupKind = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2accba30944ea68f763f67e3d31baa0a">getARCCleanupKind</a>();</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>           Destroy = Precise ? &<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aed2746a127c4a525fffc41bee41b0476">CodeGenFunction::destroyARCStrongPrecise</a></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                             : &<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a763a89a99e4b6b63fedbccd55a1a90e9">CodeGenFunction::destroyARCStrongImprecise</a>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>           <span class="comment">// __weak objects always get EH cleanups; otherwise, exceptions</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>           <span class="comment">// could cause really nasty crashes instead of mere leaks.</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>           CleanupKind = <a class="code" href="namespaceclang_1_1CodeGen.html#a2186970022771224a80dc9baa7d8ba6fa142bdd64990b3ca421f185b630db66c8">NormalAndEHCleanup</a>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>           Destroy = &<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1faef89e589b0be992e3ac6f6d76c468">CodeGenFunction::destroyARCWeak</a>;</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>         <span class="keywordflow">if</span> (Duration == <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a9de5208d645503542b04e9c3f8392420" title="Full-expression storage duration (for temporaries).">SD_FullExpression</a>)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>           CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a642101502fd1205cd71b9f365695d0fb">pushDestroy</a>(CleanupKind, ReferenceTemporary,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                           ObjCARCReferenceLifetimeType, *Destroy,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                           CleanupKind & <a class="code" href="namespaceclang_1_1CodeGen.html#a2186970022771224a80dc9baa7d8ba6fa2a393433bdad04753d5b3b39597b2e90">EHCleanup</a>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>           CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acaa9ec18a2b1a90ccb07a5f379b5b9d8">pushLifetimeExtendedDestroy</a>(CleanupKind, ReferenceTemporary,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                                           ObjCARCReferenceLifetimeType,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                                           *Destroy, CleanupKind & EHCleanup);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keywordflow">return</span>;</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>       <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554af68b8cebf6abb3c5b3467aed22ae9d13" title="Dynamic storage duration.">SD_Dynamic</a>:</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         llvm_unreachable(<span class="stringliteral">"temporary cannot have dynamic storage duration"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       llvm_unreachable(<span class="stringliteral">"unknown storage duration"</span>);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</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> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <a class="code" href="classclang_1_1CXXDestructorDecl.html" title="Represents a C++ destructor within a class.">CXXDestructorDecl</a> *ReferenceTemporaryDtor = 0;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1RecordType.html">RecordType</a> *RT =</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>           E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#aaf341a9ef2797f73d9cb091c6712242c">getBaseElementTypeUnsafe</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1RecordType.html">RecordType</a>>()) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="comment">// Get the destructor for the reference temporary.</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <a class="code" href="classclang_1_1CXXRecordDecl.html" title="Represents a C++ struct/union/class.">CXXRecordDecl</a> *ClassDecl = cast<CXXRecordDecl>(RT->getDecl());</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordflow">if</span> (!ClassDecl-><a class="code" href="classclang_1_1CXXRecordDecl.html#a5ba24967342c02411fb14790a24b8a8a" title="Determine whether this class has a trivial destructor (C++ [class.dtor]p3)">hasTrivialDestructor</a>())</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       ReferenceTemporaryDtor = ClassDecl-><a class="code" href="classclang_1_1CXXRecordDecl.html#a69a4522df480ad34e4846b08856a57b4" title="Returns the destructor decl for this class.">getDestructor</a>();</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordflow">if</span> (!ReferenceTemporaryDtor)</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="comment">// Call the destructor for the temporary.</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">switch</span> (M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a0ea2768a1fdcf2045facd45195914ec9" title="Retrieve the storage duration for the materialized temporary.">getStorageDuration</a>()) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a7495dcf7f33e44049d18217454dba7c0" title="Static storage duration.">SD_Static</a>:</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a2ecb65725835b618ecc18f8dfb75b4c3" title="Thread storage duration.">SD_Thread</a>: {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     llvm::Constant *CleanupFn;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     llvm::Constant *CleanupArg;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a53b83bd119ae77bc77e92dc69a8c8094">isArrayType</a>()) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       CleanupFn = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a>(CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>).<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a19d2aef354fb23c99bc5dfb9c3aa8b10">generateDestroyHelper</a>(</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>           cast<llvm::Constant>(ReferenceTemporary), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(),</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>           <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4be898907517e22404c9140827358d90">CodeGenFunction::destroyCXXObject</a>, CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().Exceptions,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>           dyn_cast_or_null<VarDecl>(M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a6bb602a3bf28791e92120f3d6d8d95cf" title="Get the declaration which triggered the lifetime-extension of this temporary, if any.">getExtendingDecl</a>()));</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       CleanupArg = llvm::Constant::getNullValue(CGF.<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a>);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       CleanupFn =</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a153ebb1fd646f579b8116dbb76473c22">GetAddrOfCXXDestructor</a>(ReferenceTemporaryDtor, <a class="code" href="namespaceclang.html#a8ce1c62f474552f6cfc7c340e573e157a69f2551f9ca0f302deef31de0695976c" title="Complete object dtor.">Dtor_Complete</a>);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       CleanupArg = cast<llvm::Constant>(ReferenceTemporary);</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>     CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abcced6119cfc90ff6332ec96766ff70a">getCXXABI</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGCXXABI.html#a77b6406d51f6ef462634bc11451249a2">registerGlobalDtor</a>(</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         CGF, *cast<VarDecl>(M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a6bb602a3bf28791e92120f3d6d8d95cf" title="Get the declaration which triggered the lifetime-extension of this temporary, if any.">getExtendingDecl</a>()), CleanupFn, CleanupArg);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">break</span>;</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> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a9de5208d645503542b04e9c3f8392420" title="Full-expression storage duration (for temporaries).">SD_FullExpression</a>:</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a642101502fd1205cd71b9f365695d0fb">pushDestroy</a>(<a class="code" href="namespaceclang_1_1CodeGen.html#a2186970022771224a80dc9baa7d8ba6fa142bdd64990b3ca421f185b630db66c8">NormalAndEHCleanup</a>, ReferenceTemporary, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(),</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4be898907517e22404c9140827358d90">CodeGenFunction::destroyCXXObject</a>,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                     CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().Exceptions);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554acf9a137faaa271043c56f0008325ecbf" title="Automatic storage duration (most local variables).">SD_Automatic</a>:</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acaa9ec18a2b1a90ccb07a5f379b5b9d8">pushLifetimeExtendedDestroy</a>(<a class="code" href="namespaceclang_1_1CodeGen.html#a2186970022771224a80dc9baa7d8ba6fa142bdd64990b3ca421f185b630db66c8">NormalAndEHCleanup</a>,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                                     ReferenceTemporary, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(),</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                                     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4be898907517e22404c9140827358d90">CodeGenFunction::destroyCXXObject</a>,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                                     CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().Exceptions);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">break</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">  290</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554af68b8cebf6abb3c5b3467aed22ae9d13" title="Dynamic storage duration.">SD_Dynamic</a>:</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     llvm_unreachable(<span class="stringliteral">"temporary cannot have dynamic storage duration"</span>);</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">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="keyword">static</span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *</div>
+<div class="line"><a name="l00296"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a1089597d007cb14e338c41ba84386b0a">  296</a></span> <a class="code" href="CGExpr_8cpp.html#a1089597d007cb14e338c41ba84386b0a">createReferenceTemporary</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                          <span class="keyword">const</span> <a class="code" href="classclang_1_1MaterializeTemporaryExpr.html" title="Represents a prvalue temporary that is written into memory so that a reference can bind to it...">MaterializeTemporaryExpr</a> *M, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *Inner) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="keywordflow">switch</span> (M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a0ea2768a1fdcf2045facd45195914ec9" title="Retrieve the storage duration for the materialized temporary.">getStorageDuration</a>()) {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a9de5208d645503542b04e9c3f8392420" title="Full-expression storage duration (for temporaries).">SD_FullExpression</a>:</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554acf9a137faaa271043c56f0008325ecbf" title="Automatic storage duration (most local variables).">SD_Automatic</a>:</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a47e5345241bbd0554790bef95ea40f46">CreateMemTemp</a>(Inner-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <span class="stringliteral">"ref.tmp"</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a2ecb65725835b618ecc18f8dfb75b4c3" title="Thread storage duration.">SD_Thread</a>:</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554a7495dcf7f33e44049d18217454dba7c0" title="Static storage duration.">SD_Static</a>:</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a74cee3ccbf44fbf4d39fe591ed867164" title="Returns a pointer to a global variable representing a temporary with static or thread storage duratio...">GetAddrOfGlobalTemporary</a>(M, Inner);</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="keywordflow">case</span> <a class="code" href="namespaceclang.html#a73616c07a633e772603049315dc55554af68b8cebf6abb3c5b3467aed22ae9d13" title="Dynamic storage duration.">SD_Dynamic</a>:</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     llvm_unreachable(<span class="stringliteral">"temporary can't have dynamic storage duration"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   llvm_unreachable(<span class="stringliteral">"unknown storage duration"</span>);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab0974e6777685d412dc2bf43b305492c">  313</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab0974e6777685d412dc2bf43b305492c">CodeGenFunction::EmitMaterializeTemporaryExpr</a>(</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                                            <span class="keyword">const</span> <a class="code" href="classclang_1_1MaterializeTemporaryExpr.html" title="Represents a prvalue temporary that is written into memory so that a reference can bind to it...">MaterializeTemporaryExpr</a> *M) {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E = M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a5dd4b02d9bf3c32392d3e99355165fc1" title="Retrieve the temporary-generating subexpression whose value will be materialized into a glvalue...">GetTemporaryExpr</a>();</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().ObjCAutoRefCount &&</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>       M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a51d4c15edd09e2d58c0a5342abd06307">isObjCLifetimeType</a>() &&</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#abf2b347a1ba0ed6b4fad08600273324f" title="getObjCLifetime - Returns lifetime attribute of this type.">getObjCLifetime</a>() != <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a29b319bca942e44bf183ca2749b072b3" title="There is no lifetime qualification on this type.">Qualifiers::OCL_None</a> &&</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#abf2b347a1ba0ed6b4fad08600273324f" title="getObjCLifetime - Returns lifetime attribute of this type.">getObjCLifetime</a>() != <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a1868aff47acf923ca643cb6950363615">Qualifiers::OCL_ExplicitNone</a>) {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="comment">// FIXME: Fold this into the general case below.</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Object = <a class="code" href="CGExpr_8cpp.html#a1089597d007cb14e338c41ba84386b0a">createReferenceTemporary</a>(*<span class="keyword">this</span>, M, E);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> RefTempDst = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Object, M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</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="keywordflow">if</span> (llvm::GlobalVariable *Var = dyn_cast<llvm::GlobalVariable>(Object)) {</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       <span class="comment">// We should not have emitted the initializer for this temporary as a</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       <span class="comment">// constant.</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       assert(!Var->hasInitializer());</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       Var->setInitializer(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#adb80a01436354fb32cedf9a6d639d48c">EmitNullConstant</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()));</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4957380d06be8ac67e51f46d96830788">EmitScalarInit</a>(E, M-><a class="code" href="classclang_1_1MaterializeTemporaryExpr.html#a6bb602a3bf28791e92120f3d6d8d95cf" title="Get the declaration which triggered the lifetime-extension of this temporary, if any.">getExtendingDecl</a>(), RefTempDst, <span class="keyword">false</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>     <a class="code" href="CGExpr_8cpp.html#a5695f680f5323cc0e4b578611b8670cc">pushTemporaryCleanup</a>(*<span class="keyword">this</span>, M, E, Object);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="keywordflow">return</span> RefTempDst;</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> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const Expr *, 2></a> CommaLHSs;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<SubobjectAdjustment, 2></a> Adjustments;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   E = E-><a class="code" href="classclang_1_1Expr.html#ab68ef9ee6af809f73ba54a9db42e8a72">skipRValueSubobjectAdjustments</a>(CommaLHSs, Adjustments);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> I = 0, N = CommaLHSs.size(); I != N; ++I)</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6d658adb4ef629c25cc3821f5a3e01ec" title="EmitIgnoredExpr - Emit an expression in a context which ignores the result.">EmitIgnoredExpr</a>(CommaLHSs[I]);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1OpaqueValueExpr.html">OpaqueValueExpr</a> *opaque = dyn_cast<OpaqueValueExpr>(E)) {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">if</span> (opaque->getType()->isRecordType()) {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>       assert(Adjustments.empty());</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5e77606a3b6a435cd98855df6ef64d50">EmitOpaqueValueLValue</a>(opaque);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     }</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   }</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="comment">// Create and initialize the reference temporary.</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Object = <a class="code" href="CGExpr_8cpp.html#a1089597d007cb14e338c41ba84386b0a">createReferenceTemporary</a>(*<span class="keyword">this</span>, M, E);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   <span class="keywordflow">if</span> (llvm::GlobalVariable *Var = dyn_cast<llvm::GlobalVariable>(Object)) {</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="comment">// If the temporary is a global and has a constant initializer, we may</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="comment">// have already initialized it.</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordflow">if</span> (!Var->hasInitializer()) {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       Var->setInitializer(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#adb80a01436354fb32cedf9a6d639d48c">EmitNullConstant</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af69d1d3fe662be6786b76104985ed2ea">EmitAnyExprToMem</a>(E, Object, <a class="code" href="classclang_1_1Qualifiers.html">Qualifiers</a>(), <span class="comment">/*IsInit*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af69d1d3fe662be6786b76104985ed2ea">EmitAnyExprToMem</a>(E, Object, <a class="code" href="classclang_1_1Qualifiers.html">Qualifiers</a>(), <span class="comment">/*IsInit*/</span><span class="keyword">true</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>   <a class="code" href="CGExpr_8cpp.html#a5695f680f5323cc0e4b578611b8670cc">pushTemporaryCleanup</a>(*<span class="keyword">this</span>, M, E, Object);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="comment">// Perform derived-to-base casts and/or field accesses, to get from the</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <span class="comment">// temporary object we created (and, potentially, for which we extended</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="comment">// the lifetime) to the subobject we're binding the reference to.</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> I = Adjustments.size(); I != 0; --I) {</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <a class="code" href="structclang_1_1SubobjectAdjustment.html" title="An adjustment to be made to the temporary created when emitting a reference binding, which accesses a particular subobject of that temporary.">SubobjectAdjustment</a> &Adjustment = Adjustments[I-1];</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     <span class="keywordflow">switch</span> (Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#a7a815aabbbe7d379c5e76508078e6d9b">Kind</a>) {</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     <span class="keywordflow">case</span> <a class="code" href="structclang_1_1SubobjectAdjustment.html#a1cb81fe2c3446af8b620df662ca3e185abd4f1ff8b2fcfd790bd28bb66cac74fc">SubobjectAdjustment::DerivedToBaseAdjustment</a>:</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       Object =</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>           <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a75da1a9b3eb8a6aaeda1c075563021b3">GetAddressOfBaseClass</a>(Object, Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#ab27288fe4267193d7adcee74952a36b0">DerivedToBase</a>.<a class="code" href="structclang_1_1SubobjectAdjustment_1_1DTB.html#a4eabe0c26b5d01c0badbfac0c5093930">DerivedClass</a>,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                                 Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#ab27288fe4267193d7adcee74952a36b0">DerivedToBase</a>.<a class="code" href="structclang_1_1SubobjectAdjustment_1_1DTB.html#a2b0c8b11e188bb9f4e0619d536ac3ea8">BasePath</a>-><a class="code" href="classclang_1_1CastExpr.html#a0b21e5af1691cff3b580f3c5f35fe459">path_begin</a>(),</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                                 Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#ab27288fe4267193d7adcee74952a36b0">DerivedToBase</a>.<a class="code" href="structclang_1_1SubobjectAdjustment_1_1DTB.html#a2b0c8b11e188bb9f4e0619d536ac3ea8">BasePath</a>-><a class="code" href="classclang_1_1CastExpr.html#a8faa0fba2075e167943ea782e86296d4">path_end</a>(),</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                                 <span class="comment">/*NullCheckValue=*/</span> <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordflow">case</span> <a class="code" href="structclang_1_1SubobjectAdjustment.html#a1cb81fe2c3446af8b620df662ca3e185ab1319ebf218ca95cdf326d5854b9de12">SubobjectAdjustment::FieldAdjustment</a>: {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Object, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">EmitLValueForField</a>(LV, Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#af8a973aca69f2243418cd0fd5e409f56">Field</a>);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       assert(LV.isSimple() &&</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>              <span class="stringliteral">"materialized temporary field is not a simple lvalue"</span>);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       Object = LV.getAddress();</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     }</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">case</span> <a class="code" href="structclang_1_1SubobjectAdjustment.html#a1cb81fe2c3446af8b620df662ca3e185adb8dbc1d7ecbc70648b8ba1a83caf74b">SubobjectAdjustment::MemberPointerAdjustment</a>: {</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Ptr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#abc11dd80aa85835415aa176a60d87190">Ptr</a>.<a class="code" href="structclang_1_1SubobjectAdjustment_1_1P.html#a1c23e9362712f47e5df4a733329c1f47">RHS</a>);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>       Object = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abcced6119cfc90ff6332ec96766ff70a">getCXXABI</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGCXXABI.html#a23773da6a8143f7f7f5672b14080d3d9" title="Calculate an l-value from an object and a data member pointer.">EmitMemberDataPointerAddress</a>(</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                     *<span class="keyword">this</span>, Object, Ptr, Adjustment.<a class="code" href="structclang_1_1SubobjectAdjustment.html#abc11dd80aa85835415aa176a60d87190">Ptr</a>.<a class="code" href="structclang_1_1SubobjectAdjustment_1_1P.html#a53a49e5f984ce6a490d1dbfcec881439">MPT</a>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>       <span class="keywordflow">break</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>     }</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Object, M-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</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> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a></div>
+<div class="line"><a name="l00402"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4032dd7767cd564a23c06daf0793ec21">  402</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4032dd7767cd564a23c06daf0793ec21" title="Emits a reference binding to the passed in expression.">CodeGenFunction::EmitReferenceBindingToExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   <span class="comment">// Emit the expression as an lvalue.</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   assert(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>());</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a> = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5dcd246aabc8392b439fc85c049965e9" title="Whether any type-checking sanitizers are enabled. If false, calls to EmitTypeCheck can be skipped...">SanitizePerformTypeCheck</a> && !E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#af0ae1f40cbbc07fabfefc86af91072e3">isFunctionType</a>()) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="comment">// C++11 [dcl.ref]p5 (as amended by core issue 453):</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <span class="comment">//   If a glvalue to which a reference is directly bound designates neither</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="comment">//   an existing object or function of an appropriate type nor a region of</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="comment">//   storage of suitable size and alignment to contain an object of the</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="comment">//   reference's type, the behavior is undefined.</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abcdc546762ac7c5e06fc043cb509106a" title="Emit a check that V is the address of storage of the appropriate size and alignment for an object of ...">EmitTypeCheck</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6ad2e2eaf6bb831ee1cdfc76e62d14c775">TCK_ReferenceBinding</a>, E-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>, Ty);</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> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(Value);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="comment"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="comment">/// getAccessedFieldNo - Given an encoded value and a result number, return the</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="comment">/// input field number being accessed.</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">  424</a></span> <span class="comment"></span><span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">CodeGenFunction::getAccessedFieldNo</a>(<span class="keywordtype">unsigned</span> Idx,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                                              <span class="keyword">const</span> llvm::Constant *Elts) {</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   <span class="keywordflow">return</span> cast<llvm::ConstantInt>(Elts->getAggregateElement(Idx))</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       ->getZExtValue();</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="comment"></span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="comment">/// Emit the hash_16_bytes function from include/llvm/ADT/Hashing.h.</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a83cded63ec6a80ee24c2ea7d1ca0f179">  431</a></span> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="CGExpr_8cpp.html#a83cded63ec6a80ee24c2ea7d1ca0f179" title="Emit the hash_16_bytes function from include/llvm/ADT/Hashing.h.">emitHash16Bytes</a>(<a class="code" href="namespaceclang_1_1CodeGen.html#a5b4df39d75df3cedee71cc42402cc621">CGBuilderTy</a> &<a class="code" href="ASTMatchFinder_8cpp.html#a4cd8cc8f712cd1e4ebf8cb152b8a1531">Builder</a>, <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Low,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *High) {</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *KMul = Builder.getInt64(0x9ddfea08eb382d69ULL);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *K47 = Builder.getInt64(47);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *A0 = Builder.CreateMul(Builder.CreateXor(Low, High), KMul);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *A1 = Builder.CreateXor(Builder.CreateLShr(A0, K47), A0);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *B0 = Builder.CreateMul(Builder.CreateXor(High, A1), KMul);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *B1 = Builder.CreateXor(Builder.CreateLShr(B0, K47), B0);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   <span class="keywordflow">return</span> Builder.CreateMul(B1, KMul);</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> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abcdc546762ac7c5e06fc043cb509106a">  442</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abcdc546762ac7c5e06fc043cb509106a" title="Emit a check that V is the address of storage of the appropriate size and alignment for an object of ...">CodeGenFunction::EmitTypeCheck</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6" title="Situations in which we might emit a check for the suitability of a pointer or glvalue.">TypeCheckKind</a> TCK, <a class="code" href="classclang_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="l00443"></a><span class="lineno">  443</span>                                     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Address,</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>                                     <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty, <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Alignment) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5dcd246aabc8392b439fc85c049965e9" title="Whether any type-checking sanitizers are enabled. If false, calls to EmitTypeCheck can be skipped...">SanitizePerformTypeCheck</a>)</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     <span class="keywordflow">return</span>;</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>   <span class="comment">// Don't check pointers outside the default address space. The null check</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="comment">// isn't correct, the object-size check isn't supported by LLVM, and we can't</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="comment">// communicate the addresses to the runtime handler for the vptr check.</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <span class="keywordflow">if</span> (Address->getType()->getPointerAddressSpace())</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     <span class="keywordflow">return</span>;</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>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Cond = 0;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   llvm::BasicBlock *Done = 0;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->Null) {</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="comment">// The glvalue must not be an empty glvalue.</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     Cond = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpNE(</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         Address, llvm::Constant::getNullValue(Address->getType()));</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     <span class="keywordflow">if</span> (TCK == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a1bd605ead5bab3ec286c11990795fcc1">TCK_DowncastPointer</a>) {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       <span class="comment">// When performing a pointer downcast, it's OK if the value is null.</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       <span class="comment">// Skip the remaining checks in that case.</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       Done = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"null"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       llvm::BasicBlock *Rest = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"not.null"</span>);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateCondBr(Cond, Rest, Done);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(Rest);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       Cond = 0;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   }</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->ObjectSize && !Ty-><a class="code" href="classclang_1_1Type.html#a6d84e779575f1e510f7ddc98119662bd" title="Def If non-NULL, and the type refers to some kind of declaration that can be completed (such as a C s...">isIncompleteType</a>()) {</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     uint64_t Size = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#ae8d8371f22bd850bced9b4b9ca848c4e" title="Return the size of the specified (complete) type T, in characters.">getTypeSizeInChars</a>(Ty).<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>();</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="comment">// The glvalue must refer to a large enough storage region.</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="comment">// FIXME: If Address Sanitizer is enabled, insert dynamic instrumentation</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="comment">//        to check this.</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="comment">// FIXME: Get object address space</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     llvm::Type *Tys[2] = { <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a> };</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *F = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a746e030a00d8dc22123b52c48120aad3">getIntrinsic</a>(llvm::Intrinsic::objectsize, Tys);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Min = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getFalse();</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *CastAddr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(Address, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a>);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *LargeEnough =</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpUGE(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateCall2(F, CastAddr, Min),</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                               llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, Size));</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     Cond = Cond ? <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(Cond, LargeEnough) : LargeEnough;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   uint64_t AlignVal = 0;</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="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->Alignment) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     AlignVal = Alignment.<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>();</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keywordflow">if</span> (!Ty-><a class="code" href="classclang_1_1Type.html#a6d84e779575f1e510f7ddc98119662bd" title="Def If non-NULL, and the type refers to some kind of declaration that can be completed (such as a C s...">isIncompleteType</a>() && !AlignVal)</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       AlignVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(Ty).<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>();</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="comment">// The glvalue must be suitably aligned.</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordflow">if</span> (AlignVal) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Align =</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>           <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreatePtrToInt(Address, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>),</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                             llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, AlignVal - 1));</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Aligned =</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpEQ(Align, llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, 0));</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       Cond = Cond ? <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(Cond, Aligned) : Aligned;</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> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <span class="keywordflow">if</span> (Cond) {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     llvm::Constant *StaticData[] = {</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a365b1957a3e5c4d666b1ecd777b86cc6" title="Emit a description of a source location in a format suitable for passing to a runtime sanitizer handl...">EmitCheckSourceLocation</a>(Loc),</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674" title="Emit a description of a type in a format suitable for passing to a runtime sanitizer handler...">EmitCheckTypeDescriptor</a>(Ty),</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>       llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a91ff72566394e59c6ffe25b21016f289">SizeTy</a>, AlignVal),</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>       llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a329e1a1ea4a981895ad14b70611e163b" title="i8, i16, i32, and i64">Int8Ty</a>, TCK)</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     };</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a875a52f551ce966db02aaef2dae72c62" title="Create a basic block that will call a handler function in a sanitizer runtime with the provided argum...">EmitCheck</a>(Cond, <span class="stringliteral">"type_mismatch"</span>, StaticData, Address, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daade9f755044677d5aa1ef967325abca54" title="Check supports recovering, allows user to specify which.">CRK_Recoverable</a>);</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> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>   <span class="comment">// If possible, check that the vptr indicates that there is a subobject of</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>   <span class="comment">// type Ty at offset zero within this object.</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   <span class="comment">// C++11 [basic.life]p5,6:</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   <span class="comment">//   [For storage which does not refer to an object within its lifetime]</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   <span class="comment">//   The program has undefined behavior if:</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   <span class="comment">//    -- the [pointer or glvalue] is used to access a non-static data member</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="comment">//       or call a non-static member function</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   <a class="code" href="classclang_1_1CXXRecordDecl.html" title="Represents a C++ struct/union/class.">CXXRecordDecl</a> *RD = Ty-><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="l00527"></a><span class="lineno">  527</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->Vptr &&</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>       (TCK == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a5f3beb3b33024b2a291a98792dc57ab4">TCK_MemberAccess</a> || TCK == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6ab20998f64be59fdd97dce6447d594ab9">TCK_MemberCall</a> ||</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>        TCK == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a1bd605ead5bab3ec286c11990795fcc1">TCK_DowncastPointer</a> || TCK == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a43ae653b5cbf0a84e147df511764ed28">TCK_DowncastReference</a>) &&</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>       RD && RD-><a class="code" href="classclang_1_1CXXRecordDecl.html#a29a073661abb8822828dab8774075563">hasDefinition</a>() && RD-><a class="code" href="classclang_1_1CXXRecordDecl.html#a33d393a3193c4006dcf7342caa73e535">isDynamicClass</a>()) {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     <span class="comment">// Compute a hash of the mangled name of the type.</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     <span class="comment">//</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     <span class="comment">// FIXME: This is not guaranteed to be deterministic! Move to a</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="comment">//        fingerprinting mechanism once LLVM provides one. For the time</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="comment">//        being the implementation happens to be deterministic.</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     <a class="code" href="classllvm_1_1SmallString.html">SmallString<64></a> MangledName;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     llvm::raw_svector_ostream Out(MangledName);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abcced6119cfc90ff6332ec96766ff70a">getCXXABI</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGCXXABI.html#a81a311530d5d52bac2afe472091b3e6b" title="Gets the mangle context.">getMangleContext</a>().<a class="code" href="classclang_1_1MangleContext.html#a0ca5f4f1513be3f6d314c10a3441f937">mangleCXXRTTI</a>(Ty.<a class="code" href="classclang_1_1QualType.html#a5ddbce9d32b4f8043b641584599fe7e5" title="Retrieve the unqualified variant of the given type, removing as little sugar as possible.">getUnqualifiedType</a>(),</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                                                      Out);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     llvm::hash_code TypeHash = hash_value(Out.str());</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="comment">// Load the vptr, and compute hash_16_bytes(TypeHash, vptr).</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Low = llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a06114f0bc840b61c0b2c60bb284e46fb">Int64Ty</a>, TypeHash);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     llvm::Type *VPtrTy = llvm::PointerType::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, 0);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *VPtrAddr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(Address, VPtrTy);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *VPtrVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(VPtrAddr);</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *High = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateZExt(VPtrVal, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a06114f0bc840b61c0b2c60bb284e46fb">Int64Ty</a>);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Hash = <a class="code" href="CGExpr_8cpp.html#a83cded63ec6a80ee24c2ea7d1ca0f179" title="Emit the hash_16_bytes function from include/llvm/ADT/Hashing.h.">emitHash16Bytes</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>, Low, High);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     Hash = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateTrunc(Hash, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="comment">// Look the hash up in our cache.</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> CacheSize = 128;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     llvm::Type *HashTable = llvm::ArrayType::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, CacheSize);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1TypePropertyCache.html">Cache</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#aa09bc64daac1a1dd1ab52ba1335d6c33">CreateRuntimeVariable</a>(HashTable,</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                                                    <span class="stringliteral">"__ubsan_vptr_type_cache"</span>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Slot = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(Hash,</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>                                           llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>,</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>                                                                  CacheSize-1));</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Indices[] = { <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(0), Slot };</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *CacheVal =</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateInBoundsGEP(Cache, Indices));</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     <span class="comment">// If the hash isn't in the cache, call a runtime handler to perform the</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="comment">// hard work of checking whether the vptr is for an object of the right</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="comment">// type. This will either fill in the cache and return, or produce a</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="comment">// diagnostic.</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     llvm::Constant *StaticData[] = {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a365b1957a3e5c4d666b1ecd777b86cc6" title="Emit a description of a source location in a format suitable for passing to a runtime sanitizer handl...">EmitCheckSourceLocation</a>(Loc),</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674" title="Emit a description of a type in a format suitable for passing to a runtime sanitizer handler...">EmitCheckTypeDescriptor</a>(Ty),</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a26dd0d4d938af486c3ed61a04cf97ed5">GetAddrOfRTTIDescriptor</a>(Ty.<a class="code" href="classclang_1_1QualType.html#a5ddbce9d32b4f8043b641584599fe7e5" title="Retrieve the unqualified variant of the given type, removing as little sugar as possible.">getUnqualifiedType</a>()),</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>       llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a329e1a1ea4a981895ad14b70611e163b" title="i8, i16, i32, and i64">Int8Ty</a>, TCK)</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     };</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *DynamicData[] = { Address, Hash };</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a875a52f551ce966db02aaef2dae72c62" title="Create a basic block that will call a handler function in a sanitizer runtime with the provided argum...">EmitCheck</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpEQ(CacheVal, Hash),</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>               <span class="stringliteral">"dynamic_type_cache_miss"</span>, StaticData, DynamicData,</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>               <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daaf8ec8314d1aa3b70dc6d1604f5767d27" title="Runtime conditionally aborts, always need to support recovery.">CRK_AlwaysRecoverable</a>);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   }</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>   <span class="keywordflow">if</span> (Done) {</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBr(Done);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(Done);</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> }</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="comment"></span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="comment">/// Determine whether this expression refers to a flexible array member in a</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="comment">/// struct. We disable array bounds checks for such members.</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a16b44caeec7304a790cd7da58bb15606">  588</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="CGExpr_8cpp.html#a16b44caeec7304a790cd7da58bb15606">isFlexibleArrayMemberExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="comment">// For compatibility with existing code, we treat arrays of length 0 or</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="comment">// 1 as flexible array members.</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1ArrayType.html">ArrayType</a> *AT = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a9bd7d46c52735e49f430dd4f68d32e5d">castAsArrayTypeUnsafe</a>();</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</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>(AT)) {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     <span class="keywordflow">if</span> (CAT->getSize().ugt(1))</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!isa<IncompleteArrayType>(AT))</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   E = E-><a class="code" href="classclang_1_1Expr.html#a6128786ad6c6ad61b66ad4ddf09b1bd8">IgnoreParens</a>();</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="comment">// A flexible array member must be the last member in the class.</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1MemberExpr.html">MemberExpr</a> *ME = dyn_cast<MemberExpr>(E)) {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     <span class="comment">// FIXME: If the base type of the member expr is not FD->getParent(),</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     <span class="comment">// this should not be treated as a flexible array member access.</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *FD = dyn_cast<FieldDecl>(ME->getMemberDecl())) {</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>       <a class="code" href="classclang_1_1DeclContext_1_1specific__decl__iterator.html">RecordDecl::field_iterator</a> FI(</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>           <a class="code" href="classclang_1_1DeclContext_1_1decl__iterator.html">DeclContext::decl_iterator</a>(const_cast<FieldDecl *>(FD)));</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>       <span class="keywordflow">return</span> ++FI == FD->getParent()->field_end();</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     }</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> }</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="comment"></span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="comment">/// If Base is known to point to the start of an array, return the length of</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment">/// that array. Return 0 if the length cannot be determined.</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a99507a64a1b497ff4d02c796e6e15b1e">  616</a></span> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="CGExpr_8cpp.html#a99507a64a1b497ff4d02c796e6e15b1e">getArrayIndexingBound</a>(</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *<a class="code" href="classclang_1_1Base.html">Base</a>, <a class="code" href="classclang_1_1QualType.html">QualType</a> &IndexedType) {</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   <span class="comment">// For the vector indexing extension, the bound is the number of elements.</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VectorType.html">VectorType</a> *VT = Base-><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_1VectorType.html">VectorType</a>>()) {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     IndexedType = Base-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(VT->getNumElements());</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   }</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   Base = Base-><a class="code" href="classclang_1_1Expr.html#a6128786ad6c6ad61b66ad4ddf09b1bd8">IgnoreParens</a>();</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CastExpr.html">CastExpr</a> *CE = dyn_cast<CastExpr>(Base)) {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     <span class="keywordflow">if</span> (CE->getCastKind() == <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca966388c17db29effd052ff1f5da7f64f">CK_ArrayToPointerDecay</a> &&</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         !<a class="code" href="CGExpr_8cpp.html#a16b44caeec7304a790cd7da58bb15606">isFlexibleArrayMemberExpr</a>(CE->getSubExpr())) {</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>       IndexedType = CE->getSubExpr()->getType();</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1ArrayType.html">ArrayType</a> *AT = IndexedType-><a class="code" href="classclang_1_1Type.html#a9bd7d46c52735e49f430dd4f68d32e5d">castAsArrayTypeUnsafe</a>();</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</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>(AT))</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt(CAT->getSize());</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</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 = dyn_cast<VariableArrayType>(AT))</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>         <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aad5f5781bb8931ec79b2ef0946098c57">getVLASize</a>(VAT).first;</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>   }</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3af4f663084adac7cb8dc910185c6812">  641</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3af4f663084adac7cb8dc910185c6812" title="Emit a check that Base points into an array object, which we can access at index Index. Accessed should be false if we this expression is used as an lvalue, for instance in "&Arr[Idx]".">CodeGenFunction::EmitBoundsCheck</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *<a class="code" href="classclang_1_1Base.html">Base</a>,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                                       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Index, <a class="code" href="classclang_1_1QualType.html">QualType</a> IndexType,</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                                       <span class="keywordtype">bool</span> Accessed) {</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   assert(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->ArrayBounds &&</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>          <span class="stringliteral">"should not be called unless adding bounds checks"</span>);</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>   <a class="code" href="classclang_1_1QualType.html">QualType</a> IndexedType;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Bound = <a class="code" href="CGExpr_8cpp.html#a99507a64a1b497ff4d02c796e6e15b1e">getArrayIndexingBound</a>(*<span class="keyword">this</span>, Base, IndexedType);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   <span class="keywordflow">if</span> (!Bound)</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   <span class="keywordtype">bool</span> IndexSigned = IndexType-><a class="code" href="classclang_1_1Type.html#ac1a93888d84731955cd5e95d6510aea6">isSignedIntegerOrEnumerationType</a>();</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *IndexVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(Index, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a91ff72566394e59c6ffe25b21016f289">SizeTy</a>, IndexSigned);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *BoundVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(Bound, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a91ff72566394e59c6ffe25b21016f289">SizeTy</a>, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>   llvm::Constant *StaticData[] = {</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a365b1957a3e5c4d666b1ecd777b86cc6" title="Emit a description of a source location in a format suitable for passing to a runtime sanitizer handl...">EmitCheckSourceLocation</a>(E-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>()),</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674" title="Emit a description of a type in a format suitable for passing to a runtime sanitizer handler...">EmitCheckTypeDescriptor</a>(IndexedType),</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674" title="Emit a description of a type in a format suitable for passing to a runtime sanitizer handler...">EmitCheckTypeDescriptor</a>(IndexType)</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   };</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Check = Accessed ? <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpULT(IndexVal, BoundVal)</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                                 : <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpULE(IndexVal, BoundVal);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a875a52f551ce966db02aaef2dae72c62" title="Create a basic block that will call a handler function in a sanitizer runtime with the provided argum...">EmitCheck</a>(Check, <span class="stringliteral">"out_of_bounds"</span>, StaticData, Index, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daade9f755044677d5aa1ef967325abca54" title="Check supports recovering, allows user to specify which.">CRK_Recoverable</a>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae417ed4971c18c5ce0607e1be62ec117">CodeGenFunction::ComplexPairTy</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0f16adafc4f7f7bfc80dc2dba08a5564">CodeGenFunction::</a></div>
+<div class="line"><a name="l00668"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0f16adafc4f7f7bfc80dc2dba08a5564">  668</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0f16adafc4f7f7bfc80dc2dba08a5564">EmitComplexPrePostIncDec</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1UnaryOperator.html">UnaryOperator</a> *E, <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                          <span class="keywordtype">bool</span> isInc, <span class="keywordtype">bool</span> isPre) {</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae417ed4971c18c5ce0607e1be62ec117">ComplexPairTy</a> InVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a26d8547dd8e031970116491629669c39" title="EmitLoadOfComplex - Load a complex number from the specified l-value.">EmitLoadOfComplex</a>(LV, E-><a class="code" href="classclang_1_1UnaryOperator.html#a6ead0bc5f545fb836280f8ff6f2ddcac">getExprLoc</a>());</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *NextVal;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   <span class="keywordflow">if</span> (isa<llvm::IntegerType>(InVal.first->getType())) {</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     uint64_t AmountVal = isInc ? 1 : -1;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     <span class="comment">// Add the inc/dec to the real part.</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     NextVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAdd(InVal.first, NextVal, isInc ? <span class="stringliteral">"inc"</span> : <span class="stringliteral">"dec"</span>);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> ElemTy = E-><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_1ComplexType.html">ComplexType</a>>()-><a class="code" href="SemaChecking_8cpp.html#a9f6c9a015ec06db5f86672533b582823">getElementType</a>();</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     llvm::APFloat FVal(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().getFloatTypeSemantics(ElemTy), 1);</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     <span class="keywordflow">if</span> (!isInc)</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>       FVal.changeSign();</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     NextVal = llvm::ConstantFP::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), FVal);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="comment">// Add the inc/dec to the real part.</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     NextVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateFAdd(InVal.first, NextVal, isInc ? <span class="stringliteral">"inc"</span> : <span class="stringliteral">"dec"</span>);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae417ed4971c18c5ce0607e1be62ec117">ComplexPairTy</a> IncVal(NextVal, InVal.second);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   <span class="comment">// Store the updated result through the lvalue.</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa903765558c8982b2d81d97e637adda1" title="EmitStoreOfComplex - Store a complex number into the specified l-value.">EmitStoreOfComplex</a>(IncVal, LV, <span class="comment">/*init*/</span> <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   <span class="comment">// If this is a postinc, return the value read from memory, otherwise use the</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   <span class="comment">// updated value.</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   <span class="keywordflow">return</span> isPre ? IncVal : InVal;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> <span class="comment">//                         LValue Expression Emission</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> <span class="comment">//===----------------------------------------------------------------------===//</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"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aadc4775eb7d01ddeba9a00de640cff38">  705</a></span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aadc4775eb7d01ddeba9a00de640cff38" title="GetUndefRValue - Get an appropriate 'undef' rvalue for the given type.">CodeGenFunction::GetUndefRValue</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> Ty) {</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="keywordflow">if</span> (Ty-><a class="code" href="classclang_1_1Type.html#a0ee6d74a089fe24d755d9cfd8bceef3f">isVoidType</a>())</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(0);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac1be3afe566ffd19818efe9f6b07a8ea">getEvaluationKind</a>(Ty)) {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9ad0c74fbe072df321c2078f52f052d07c">TEK_Complex</a>: {</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     llvm::Type *EltTy =</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(Ty-><a class="code" href="classclang_1_1Type.html#ac4a3f2c505332c3c556bd20497d1a5c3">castAs</a><<a class="code" href="classclang_1_1ComplexType.html">ComplexType</a>>()-><a class="code" href="classclang_1_1ComplexType.html#a003ef818ba80a0004dd20256766803a6">getElementType</a>());</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *U = llvm::UndefValue::get(EltTy);</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a7e337836177fcde90cd36b8a241ab510">RValue::getComplex</a>(std::make_pair(U, U));</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   <span class="comment">// If this is a use of an undefined aggregate type, the aggregate must have an</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   <span class="comment">// identifiable address.  Just because the contents of the value are undefined</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   <span class="comment">// doesn't mean that the address can't be taken and compared.</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9a6bdd6972cc7f7a6326c359a2a07df29a">TEK_Aggregate</a>: {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *DestPtr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a47e5345241bbd0554790bef95ea40f46">CreateMemTemp</a>(Ty, <span class="stringliteral">"undef.agg.tmp"</span>);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#aeeb48f4fb8409aca54d4611ad4a28559">RValue::getAggregate</a>(DestPtr);</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> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9aa4a7b0b5cf5c3854e35ca0c172e93269">TEK_Scalar</a>:</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(llvm::UndefValue::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(Ty)));</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>   llvm_unreachable(<span class="stringliteral">"bad evaluation kind"</span>);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> }</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00731"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab75c7c2f4f8787360b68b4d4846ef9c4">  731</a></span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab75c7c2f4f8787360b68b4d4846ef9c4">CodeGenFunction::EmitUnsupportedRValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *Name) {</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae2b798e41b51a2112c9fe130f33d422e">ErrorUnsupported</a>(E, Name);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aadc4775eb7d01ddeba9a00de640cff38" title="GetUndefRValue - Get an appropriate 'undef' rvalue for the given type.">GetUndefRValue</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</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> </div>
+<div class="line"><a name="l00737"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">  737</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">CodeGenFunction::EmitUnsupportedLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *Name) {</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae2b798e41b51a2112c9fe130f33d422e">ErrorUnsupported</a>(E, Name);</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   llvm::Type *Ty = llvm::PointerType::getUnqual(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()));</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(llvm::UndefValue::get(Ty), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> }</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acfb6c861f8e1ac9383bf54b05b5292cd">  744</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acfb6c861f8e1ac9383bf54b05b5292cd" title="Same as EmitLValue but additionally we generate checking code to guard against undefined behavior...">CodeGenFunction::EmitCheckedLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6" title="Situations in which we might emit a check for the suitability of a pointer or glvalue.">TypeCheckKind</a> TCK) {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->ArrayBounds && isa<ArraySubscriptExpr>(E))</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a160641085422d2b1055bc91f8fc0f2fd">EmitArraySubscriptExpr</a>(cast<ArraySubscriptExpr>(E), <span class="comment">/*Accessed*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>   <span class="keywordflow">if</span> (!isa<DeclRefExpr>(E) && !LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8901b8a21b2acf2f4cdd27513824426e">isBitField</a>() && LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>())</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abcdc546762ac7c5e06fc043cb509106a" title="Emit a check that V is the address of storage of the appropriate size and alignment for an object of ...">EmitTypeCheck</a>(TCK, E-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(), LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(),</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>                   E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="comment"></span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="comment">/// EmitLValue - Emit code to compute a designator that specifies the location</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="comment">/// of the expression.</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">/// This can return one of two things: a simple address or a bitfield reference.</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="comment">/// In either case, the LLVM Value* in the LValue structure is guaranteed to be</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="comment">/// an LLVM pointer type.</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="comment">/// If this returns a bitfield reference, nothing about the pointee type of the</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> <span class="comment">/// LLVM value is known: For example, it may not be a pointer to an integer.</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> <span class="comment">/// If this returns a normal address, and if the lvalue's C type is fixed size,</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="comment">/// this method guarantees that the returned pointer type will point to an LLVM</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="comment">/// type of the same size of the lvalue's type.  If the lvalue has a variable</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="comment">/// length type, this is not possible.</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">  771</a></span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">CodeGenFunction::EmitLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   <span class="keywordflow">switch</span> (E-><a class="code" href="classclang_1_1Stmt.html#ac881a5954ff27d475c1bbab6f5d80150">getStmtClass</a>()) {</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">EmitUnsupportedLValue</a>(E, <span class="stringliteral">"l-value expression"</span>);</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   <span class="keywordflow">case</span> Expr::ObjCPropertyRefExprClass:</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     llvm_unreachable(<span class="stringliteral">"cannot emit a property reference directly"</span>);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   <span class="keywordflow">case</span> Expr::ObjCSelectorExprClass:</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab8d4961d4562ad60fdd26c821e2f842d">EmitObjCSelectorLValue</a>(cast<ObjCSelectorExpr>(E));</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>   <span class="keywordflow">case</span> Expr::ObjCIsaExprClass:</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a35a134c06aa2409a0e79ae4afff5c747">EmitObjCIsaExpr</a>(cast<ObjCIsaExpr>(E));</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   <span class="keywordflow">case</span> Expr::BinaryOperatorClass:</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a545eb0e77d890696edabc24ae3a48885">EmitBinaryOperatorLValue</a>(cast<BinaryOperator>(E));</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>   <span class="keywordflow">case</span> Expr::CompoundAssignOperatorClass:</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     <span class="keywordflow">if</span> (!E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a292ac10726adf5426212b5c6ee14d9bb">isAnyComplexType</a>())</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a66fe5cd30a71baddf1e0f307a75580bc">EmitCompoundAssignmentLValue</a>(cast<CompoundAssignOperator>(E));</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a559f87c87aea04c2cd360c305d60427c">EmitComplexCompoundAssignmentLValue</a>(cast<CompoundAssignOperator>(E));</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   <span class="keywordflow">case</span> Expr::CallExprClass:</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="keywordflow">case</span> Expr::CXXMemberCallExprClass:</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordflow">case</span> Expr::CXXOperatorCallExprClass:</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   <span class="keywordflow">case</span> Expr::UserDefinedLiteralClass:</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afb4efb5e2b2d3b9044ee914250db74d6">EmitCallExprLValue</a>(cast<CallExpr>(E));</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordflow">case</span> Expr::VAArgExprClass:</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9906e0701ca9696a5ea1d63614dff70e">EmitVAArgExprLValue</a>(cast<VAArgExpr>(E));</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="keywordflow">case</span> Expr::DeclRefExprClass:</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a811bcfd5769bf9dc2ad7f62e9350dc56">EmitDeclRefLValue</a>(cast<DeclRefExpr>(E));</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   <span class="keywordflow">case</span> Expr::ParenExprClass:</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cast<ParenExpr>(E)->getSubExpr());</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="keywordflow">case</span> Expr::GenericSelectionExprClass:</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cast<GenericSelectionExpr>(E)->getResultExpr());</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   <span class="keywordflow">case</span> Expr::PredefinedExprClass:</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7e1a5d2ce9e9b37cca2d24ec5557c86d">EmitPredefinedLValue</a>(cast<PredefinedExpr>(E));</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="keywordflow">case</span> Expr::StringLiteralClass:</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a81829808e9f35c20760c6c16e41a0dbd">EmitStringLiteralLValue</a>(cast<StringLiteral>(E));</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   <span class="keywordflow">case</span> Expr::ObjCEncodeExprClass:</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a30a4ad7355fdf9755ec73f59f83da13b">EmitObjCEncodeExprLValue</a>(cast<ObjCEncodeExpr>(E));</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   <span class="keywordflow">case</span> Expr::PseudoObjectExprClass:</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5ce7b313663af5e1ede59c29bc0fa4ac">EmitPseudoObjectLValue</a>(cast<PseudoObjectExpr>(E));</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   <span class="keywordflow">case</span> Expr::InitListExprClass:</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a139735b59f02e4eddc367257548d0ec5">EmitInitListLValue</a>(cast<InitListExpr>(E));</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   <span class="keywordflow">case</span> Expr::CXXTemporaryObjectExprClass:</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   <span class="keywordflow">case</span> Expr::CXXConstructExprClass:</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0c0910294a1b4fe32bdeb1be57989bbc">EmitCXXConstructLValue</a>(cast<CXXConstructExpr>(E));</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   <span class="keywordflow">case</span> Expr::CXXBindTemporaryExprClass:</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad1d13446921a3b93db7f477cc8fcf142">EmitCXXBindTemporaryLValue</a>(cast<CXXBindTemporaryExpr>(E));</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   <span class="keywordflow">case</span> Expr::CXXUuidofExprClass:</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a368b3b60247cf18658f197a77ce503e3">EmitCXXUuidofLValue</a>(cast<CXXUuidofExpr>(E));</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   <span class="keywordflow">case</span> Expr::LambdaExprClass:</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac5330124ba9586c25199ceba4b228829">EmitLambdaLValue</a>(cast<LambdaExpr>(E));</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   <span class="keywordflow">case</span> Expr::ExprWithCleanupsClass: {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1ExprWithCleanups.html">ExprWithCleanups</a> *cleanups = cast<ExprWithCleanups>(E);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a83deaf3d8bd449ba59ee5c966b22da09">enterFullExpression</a>(cleanups);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1RunCleanupsScope.html" title="Enters a new scope for capturing cleanups, all of which will be executed once the scope is exited...">RunCleanupsScope</a> <a class="code" href="classclang_1_1Scope.html">Scope</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cleanups-><a class="code" href="classclang_1_1ExprWithCleanups.html#aea629f8b6da8f66df2207e7efe9a07a0">getSubExpr</a>());</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   }</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   <span class="keywordflow">case</span> Expr::CXXDefaultArgExprClass:</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cast<CXXDefaultArgExpr>(E)->getExpr());</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>   <span class="keywordflow">case</span> Expr::CXXDefaultInitExprClass: {</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1CXXDefaultInitExprScope.html">CXXDefaultInitExprScope</a> <a class="code" href="classclang_1_1Scope.html">Scope</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cast<CXXDefaultInitExpr>(E)->getExpr());</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>   }</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>   <span class="keywordflow">case</span> Expr::CXXTypeidExprClass:</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae39a300d445536ce605f20e9af50a855">EmitCXXTypeidLValue</a>(cast<CXXTypeidExpr>(E));</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>   <span class="keywordflow">case</span> Expr::ObjCMessageExprClass:</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a194a70daa28c50242ee2846b31ec4e04">EmitObjCMessageExprLValue</a>(cast<ObjCMessageExpr>(E));</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   <span class="keywordflow">case</span> Expr::ObjCIvarRefExprClass:</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa957d8aa0a8acf9e711c5de255cf9a15">EmitObjCIvarRefLValue</a>(cast<ObjCIvarRefExpr>(E));</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>   <span class="keywordflow">case</span> Expr::StmtExprClass:</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa135b08f6a2cb7af7cf60c45829895c9">EmitStmtExprLValue</a>(cast<StmtExpr>(E));</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   <span class="keywordflow">case</span> Expr::UnaryOperatorClass:</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acb251a4cc5868549ae822f2d47c4b5b0">EmitUnaryOpLValue</a>(cast<UnaryOperator>(E));</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   <span class="keywordflow">case</span> Expr::ArraySubscriptExprClass:</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a160641085422d2b1055bc91f8fc0f2fd">EmitArraySubscriptExpr</a>(cast<ArraySubscriptExpr>(E));</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>   <span class="keywordflow">case</span> Expr::ExtVectorElementExprClass:</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab6062042f3c1e4ad3d20df6988113bbd">EmitExtVectorElementExpr</a>(cast<ExtVectorElementExpr>(E));</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>   <span class="keywordflow">case</span> Expr::MemberExprClass:</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae3b2616ff8e7d89d35c06848b68aacb3">EmitMemberExpr</a>(cast<MemberExpr>(E));</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   <span class="keywordflow">case</span> Expr::CompoundLiteralExprClass:</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a330d7a5e208d7175e508f477528a2163">EmitCompoundLiteralLValue</a>(cast<CompoundLiteralExpr>(E));</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   <span class="keywordflow">case</span> Expr::ConditionalOperatorClass:</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0ea992f4ddefae2a65642412be215003">EmitConditionalOperatorLValue</a>(cast<ConditionalOperator>(E));</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   <span class="keywordflow">case</span> Expr::BinaryConditionalOperatorClass:</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0ea992f4ddefae2a65642412be215003">EmitConditionalOperatorLValue</a>(cast<BinaryConditionalOperator>(E));</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>   <span class="keywordflow">case</span> Expr::ChooseExprClass:</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cast<ChooseExpr>(E)->getChosenSubExpr());</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   <span class="keywordflow">case</span> Expr::OpaqueValueExprClass:</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5e77606a3b6a435cd98855df6ef64d50">EmitOpaqueValueLValue</a>(cast<OpaqueValueExpr>(E));</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>   <span class="keywordflow">case</span> Expr::SubstNonTypeTemplateParmExprClass:</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(cast<SubstNonTypeTemplateParmExpr>(E)->getReplacement());</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>   <span class="keywordflow">case</span> Expr::ImplicitCastExprClass:</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   <span class="keywordflow">case</span> Expr::CStyleCastExprClass:</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>   <span class="keywordflow">case</span> Expr::CXXFunctionalCastExprClass:</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   <span class="keywordflow">case</span> Expr::CXXStaticCastExprClass:</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>   <span class="keywordflow">case</span> Expr::CXXDynamicCastExprClass:</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>   <span class="keywordflow">case</span> Expr::CXXReinterpretCastExprClass:</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>   <span class="keywordflow">case</span> Expr::CXXConstCastExprClass:</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   <span class="keywordflow">case</span> Expr::ObjCBridgedCastExprClass:</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafad3193bcb9ca583891de0978deaa46">EmitCastLValue</a>(cast<CastExpr>(E));</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>   <span class="keywordflow">case</span> Expr::MaterializeTemporaryExprClass:</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab0974e6777685d412dc2bf43b305492c">EmitMaterializeTemporaryExpr</a>(cast<MaterializeTemporaryExpr>(E));</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> }</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="comment"></span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> <span class="comment">/// Given an object of the given canonical type, can we safely copy a</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="comment">/// value out of it based on its initializer?</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a2be60e359288194f3c1446ebb849b850">  880</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="CGExpr_8cpp.html#a2be60e359288194f3c1446ebb849b850">isConstantEmittableObjectType</a>(<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>) {</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>   assert(type.<a class="code" href="classclang_1_1QualType.html#aa63a8e7edb01361c17917a8a865e3077">isCanonical</a>());</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   assert(!type-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>());</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>   <span class="comment">// Must be const-qualified but non-volatile.</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   <a class="code" href="classclang_1_1Qualifiers.html">Qualifiers</a> qs = 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>();</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>   <span class="keywordflow">if</span> (!qs.hasConst() || qs.hasVolatile()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   <span class="comment">// Otherwise, all object types satisfy this except C++ classes with</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="comment">// mutable subobjects or non-trivial copy/destroy behavior.</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1RecordType.html">RecordType</a> *RT = dyn_cast<RecordType>(type))</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXRecordDecl.html" title="Represents a C++ struct/union/class.">CXXRecordDecl</a> *RD = dyn_cast<CXXRecordDecl>(RT->getDecl()))</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>       <span class="keywordflow">if</span> (RD->hasMutableFields() || !RD->isTrivial())</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>         <span class="keywordflow">return</span> <span class="keyword">false</span>;</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>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> }</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="comment"></span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="comment">/// Can we constant-emit a load of a reference to a variable of the</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="comment">/// given type?  This is different from predicates like</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> <span class="comment">/// Decl::isUsableInConstantExpressions because we do want it to apply</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> <span class="comment">/// in situations that don't necessarily satisfy the language's rules</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="comment">/// for this (e.g. C++'s ODR-use rules).  For example, we want to able</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="comment">/// to do this with const float variables even if those variables</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="comment">/// aren't marked 'constexpr'.</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2">  905</a></span> <span class="comment"></span><span class="keyword">enum</span> <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2">ConstantEmissionKind</a> {</div>
+<div class="line"><a name="l00906"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2aae42b231eb8493f47f4c813411e9df0a">  906</a></span>   <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2aae42b231eb8493f47f4c813411e9df0a">CEK_None</a>,</div>
+<div class="line"><a name="l00907"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a098414c338a0972393fdc02f33db6b18">  907</a></span>   <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a098414c338a0972393fdc02f33db6b18">CEK_AsReferenceOnly</a>,</div>
+<div class="line"><a name="l00908"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2acdd2e5f2f2402cfbc2d3f36f084a9ac8">  908</a></span>   <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2acdd2e5f2f2402cfbc2d3f36f084a9ac8">CEK_AsValueOrReference</a>,</div>
+<div class="line"><a name="l00909"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a32697d95624bdb37df0bba1218022cbd">  909</a></span>   <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a32697d95624bdb37df0bba1218022cbd">CEK_AsValueOnly</a></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> };</div>
+<div class="line"><a name="l00911"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a7a8bb6b8b0faba0871531b4a125ef0e7">  911</a></span> <span class="keyword">static</span> <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2">ConstantEmissionKind</a> <a class="code" href="CGExpr_8cpp.html#a7a8bb6b8b0faba0871531b4a125ef0e7">checkVarTypeForConstantEmission</a>(<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>) {</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   type = type.<a class="code" href="classclang_1_1QualType.html#abae06108b779ed32a4dc18fe8802fd6e">getCanonicalType</a>();</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ReferenceType.html">ReferenceType</a> *ref = dyn_cast<ReferenceType>(type)) {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     <span class="keywordflow">if</span> (<a class="code" href="CGExpr_8cpp.html#a2be60e359288194f3c1446ebb849b850">isConstantEmittableObjectType</a>(ref->getPointeeType()))</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>       <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2acdd2e5f2f2402cfbc2d3f36f084a9ac8">CEK_AsValueOrReference</a>;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>     <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a098414c338a0972393fdc02f33db6b18">CEK_AsReferenceOnly</a>;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   }</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   <span class="keywordflow">if</span> (<a class="code" href="CGExpr_8cpp.html#a2be60e359288194f3c1446ebb849b850">isConstantEmittableObjectType</a>(type))</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a32697d95624bdb37df0bba1218022cbd">CEK_AsValueOnly</a>;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2aae42b231eb8493f47f4c813411e9df0a">CEK_None</a>;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> }</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="comment"></span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="comment">/// Try to emit a reference to the given value without producing it as</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> <span class="comment">/// an l-value.  This is actually more than an optimization: we can't</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="comment">/// produce an l-value for variables that we never actually captured</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> <span class="comment">/// in a block or lambda, which means const int variables or constexpr</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="comment">/// literals or similar.</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConstantEmission.html">CodeGenFunction::ConstantEmission</a></div>
+<div class="line"><a name="l00929"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af61222a102a77466f7eafb73c82eea70">  929</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af61222a102a77466f7eafb73c82eea70">CodeGenFunction::tryEmitAsConstant</a>(<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *refExpr) {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   <a class="code" href="classclang_1_1ValueDecl.html">ValueDecl</a> *value = refExpr-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>();</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   <span class="comment">// The value needs to be an enum constant or a constant variable.</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>   <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2">ConstantEmissionKind</a> CEK;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>   <span class="keywordflow">if</span> (isa<ParmVarDecl>(value)) {</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     CEK = <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2aae42b231eb8493f47f4c813411e9df0a">CEK_None</a>;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *var = dyn_cast<VarDecl>(value)) {</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     CEK = <a class="code" href="CGExpr_8cpp.html#a7a8bb6b8b0faba0871531b4a125ef0e7">checkVarTypeForConstantEmission</a>(var->getType());</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<EnumConstantDecl>(value)) {</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     CEK = <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a32697d95624bdb37df0bba1218022cbd">CEK_AsValueOnly</a>;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     CEK = <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2aae42b231eb8493f47f4c813411e9df0a">CEK_None</a>;</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>   <span class="keywordflow">if</span> (CEK == <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2aae42b231eb8493f47f4c813411e9df0a">CEK_None</a>) <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConstantEmission.html">ConstantEmission</a>();</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>   <a class="code" href="structclang_1_1Expr_1_1EvalResult.html" title="EvalResult is a struct with detailed info about an evaluated expression.">Expr::EvalResult</a> result;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   <span class="keywordtype">bool</span> resultIsReference;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> resultType;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   <span class="comment">// It's best to evaluate all the way as an r-value if that's permitted.</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>   <span class="keywordflow">if</span> (CEK != <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a098414c338a0972393fdc02f33db6b18">CEK_AsReferenceOnly</a> &&</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>       refExpr-><a class="code" href="classclang_1_1Expr.html#a5fec5e9213f025021afd2d2a87b2d02a">EvaluateAsRValue</a>(result, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>())) {</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     resultIsReference = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     resultType = refExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   <span class="comment">// Otherwise, try to evaluate as an l-value.</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (CEK != <a class="code" href="CGExpr_8cpp.html#a281dfc5c5d5488594ce85f76f38951a2a32697d95624bdb37df0bba1218022cbd">CEK_AsValueOnly</a> &&</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>              refExpr-><a class="code" href="classclang_1_1Expr.html#a4fdd26501fbedc9e20e85d48240eb6e0">EvaluateAsLValue</a>(result, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>())) {</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     resultIsReference = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     resultType = value-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>   <span class="comment">// Failure.</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConstantEmission.html">ConstantEmission</a>();</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   }</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>   <span class="comment">// In any case, if the initializer has side-effects, abandon ship.</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>   <span class="keywordflow">if</span> (result.<a class="code" href="structclang_1_1Expr_1_1EvalStatus.html#ad41b4d6edcf0f4601a63c28779356f3b">HasSideEffects</a>)</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConstantEmission.html">ConstantEmission</a>();</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>   <span class="comment">// Emit as a constant.</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>   llvm::Constant *C = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a97e0aa3c286413a5a233969425bb9dda">EmitConstantValue</a>(result.<a class="code" href="structclang_1_1Expr_1_1EvalResult.html#a94083629a969e7faa7812eb84a7ecd24" title="Val - This is the value the expression can be folded to.">Val</a>, resultType, <span class="keyword">this</span>);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>   <span class="comment">// Make sure we emit a debug reference to the global variable.</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>   <span class="comment">// This should probably fire even for</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>   <span class="keywordflow">if</span> (isa<VarDecl>(value)) {</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().DeclMustBeEmitted(cast<VarDecl>(value)))</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a397b4bde15ed6d0a2118dd2f73b5f908">EmitDeclRefExprDbgValue</a>(refExpr, C);</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     assert(isa<EnumConstantDecl>(value));</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a397b4bde15ed6d0a2118dd2f73b5f908">EmitDeclRefExprDbgValue</a>(refExpr, C);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>   }</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>   <span class="comment">// If we emitted a reference constant, we need to dereference that.</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>   <span class="keywordflow">if</span> (resultIsReference)</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConstantEmission.html#a30969ca46356f3595657b02960c98c82">ConstantEmission::forReference</a>(C);</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="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConstantEmission.html#a1aa567434bd54b9de63ac7bdef00cea1">ConstantEmission::forValue</a>(C);</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> }</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a39cd46c4c75514ca2969ff10c428d024">  990</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aff8d4768706029de6dbe796b2867a8ef">CodeGenFunction::EmitLoadOfScalar</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> lvalue,</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</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="l00992"></a><span class="lineno">  992</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aff8d4768706029de6dbe796b2867a8ef">EmitLoadOfScalar</a>(lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a58eed8b04aab5d70e2f0e6896181e917">isVolatile</a>(),</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>                           lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>(),</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>                           lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>(), Loc, lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01be51a35aebc758470218ae27e75694">getTBAAInfo</a>(),</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                           lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab3a49cd3fecd60bd7aae1060b7546e71">getTBAABaseType</a>(), lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5d4615def80ca61871e29396d02c3d1f">getTBAAOffset</a>());</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> }</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">  998</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> Ty) {</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>   <span class="keywordflow">if</span> (Ty-><a class="code" href="classclang_1_1Type.html#ac16047fbf3b5325d6528d8557803b0cc">isBooleanType</a>())</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1EnumType.html">EnumType</a> *ET = Ty-><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="l01003"></a><span class="lineno"> 1003</span>     <span class="keywordflow">return</span> ET->getDecl()->getIntegerType()->isBooleanType();</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1AtomicType.html">AtomicType</a> *AT = Ty-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1AtomicType.html">AtomicType</a>>())</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(AT->getValueType());</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a256008ff16a29e32643edd64eb1f72c2"> 1011</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="CGExpr_8cpp.html#a256008ff16a29e32643edd64eb1f72c2">getRangeForType</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF, <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty,</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>                             llvm::APInt &Min, llvm::APInt &End,</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>                             <span class="keywordtype">bool</span> StrictEnums) {</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1EnumType.html">EnumType</a> *ET = Ty-><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="l01015"></a><span class="lineno"> 1015</span>   <span class="keywordtype">bool</span> IsRegularCPlusPlusEnum = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().CPlusPlus && StrictEnums &&</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>                                 ET && !ET-><a class="code" href="classclang_1_1EnumType.html#ae65ac944d69de5b973ac1e97de6fe780">getDecl</a>()-><a class="code" href="classclang_1_1EnumDecl.html#a0af07c1f3c99e599d4be203599a0b820" title="Returns true if this is an Objective-C, C++11, or Microsoft-style enumeration with a fixed underlying...">isFixed</a>();</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>   <span class="keywordtype">bool</span> IsBool = <a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(Ty);</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>   <span class="keywordflow">if</span> (!IsBool && !IsRegularCPlusPlusEnum)</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   <span class="keywordflow">if</span> (IsBool) {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     Min = llvm::APInt(CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a3e16bd856974e4ac9710e0c507a60cee" title="Return the size of the specified (complete) type T, in bits.">getTypeSize</a>(Ty), 0);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     End = llvm::APInt(CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a3e16bd856974e4ac9710e0c507a60cee" title="Return the size of the specified (complete) type T, in bits.">getTypeSize</a>(Ty), 2);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</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="l01026"></a><span class="lineno"> 1026</span>     llvm::Type *LTy = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab96689ae1b68ca38dd3c382f54bcbcd7">ConvertTypeForMem</a>(ED-><a class="code" href="classclang_1_1EnumDecl.html#a09e5024add120a01ec710f0189c24616">getIntegerType</a>());</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>     <span class="keywordtype">unsigned</span> Bitwidth = LTy->getScalarSizeInBits();</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>     <span class="keywordtype">unsigned</span> NumNegativeBits = ED-><a class="code" href="classclang_1_1EnumDecl.html#a03141c66011449d3836cf850f378d066" title="Returns the width in bits required to store all the negative enumerators of this enum. These widths include the rightmost leading 1; that is:">getNumNegativeBits</a>();</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     <span class="keywordtype">unsigned</span> NumPositiveBits = ED-><a class="code" href="classclang_1_1EnumDecl.html#a97d78e49a3b47daacc3efc6363024bed" title="Returns the width in bits required to store all the non-negative enumerators of this enum...">getNumPositiveBits</a>();</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     <span class="keywordflow">if</span> (NumNegativeBits) {</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>       <span class="keywordtype">unsigned</span> NumBits = std::max(NumNegativeBits, NumPositiveBits + 1);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>       assert(NumBits <= Bitwidth);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>       End = llvm::APInt(Bitwidth, 1) << (NumBits - 1);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>       Min = -End;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>       assert(NumPositiveBits <= Bitwidth);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>       End = llvm::APInt(Bitwidth, 1) << NumPositiveBits;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>       Min = llvm::APInt(Bitwidth, 0);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     }</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> }</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> llvm::MDNode *CodeGenFunction::getRangeForLoadFromType(<a class="code" href="classclang_1_1QualType.html">QualType</a> Ty) {</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   llvm::APInt Min, End;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>   <span class="keywordflow">if</span> (!<a class="code" href="CGExpr_8cpp.html#a256008ff16a29e32643edd64eb1f72c2">getRangeForType</a>(*<span class="keyword">this</span>, Ty, Min, End,</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>                        <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().StrictEnums))</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     <span class="keywordflow">return</span> 0;</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>   llvm::MDBuilder MDHelper(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>());</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>   <span class="keywordflow">return</span> MDHelper.createRange(Min, End);</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> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aff8d4768706029de6dbe796b2867a8ef"> 1055</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aff8d4768706029de6dbe796b2867a8ef">CodeGenFunction::EmitLoadOfScalar</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="SemaOverload_8cpp.html#a561f2d973ed74723ce0b1e1165c31804">Addr</a>, <span class="keywordtype">bool</span> Volatile,</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                                                <span class="keywordtype">unsigned</span> Alignment, <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty,</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</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="l01058"></a><span class="lineno"> 1058</span>                                                llvm::MDNode *TBAAInfo,</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>                                                <a class="code" href="classclang_1_1QualType.html">QualType</a> TBAABaseType,</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>                                                uint64_t TBAAOffset) {</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>   <span class="comment">// For better performance, handle vector loads differently.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>   <span class="keywordflow">if</span> (Ty-><a class="code" href="classclang_1_1Type.html#aa19525a5a362d0b9b6792ca383889c12">isVectorType</a>()) {</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     <span class="keyword">const</span> llvm::Type *EltTy =</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     cast<llvm::PointerType>(Addr->getType())-><a class="code" href="SemaChecking_8cpp.html#a9f6c9a015ec06db5f86672533b582823">getElementType</a>();</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     <span class="keyword">const</span> llvm::VectorType *VTy = cast<llvm::VectorType>(EltTy);</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="comment">// Handle vectors of size 3, like size 4 for better performance.</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>     <span class="keywordflow">if</span> (VTy->getNumElements() == 3) {</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">// Bitcast to vec4 type.</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>       llvm::VectorType *vec4Ty = llvm::VectorType::get(VTy->getElementType(),</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                                                          4);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>       llvm::PointerType *ptVec4Ty =</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>       llvm::PointerType::get(vec4Ty,</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>                              (cast<llvm::PointerType>(</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>                                       Addr->getType()))->getAddressSpace());</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Cast = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(Addr, ptVec4Ty,</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>                                                 <span class="stringliteral">"castToVec4"</span>);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>       <span class="comment">// Now load value.</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *LoadVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(Cast, Volatile, <span class="stringliteral">"loadVec4"</span>);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>       <span class="comment">// Shuffle vector to get vec3.</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>       llvm::Constant *Mask[] = {</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         llvm::ConstantInt::get(llvm::Type::getInt32Ty(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>()), 0),</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         llvm::ConstantInt::get(llvm::Type::getInt32Ty(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>()), 1),</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>         llvm::ConstantInt::get(llvm::Type::getInt32Ty(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>()), 2)</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>       };</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MaskV = llvm::ConstantVector::get(Mask);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>       V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShuffleVector(LoadVal,</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>                                       llvm::UndefValue::get(vec4Ty),</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>                                       MaskV, <span class="stringliteral">"extractVec"</span>);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adf8925907bc87d98d8bc66b371f331b2">EmitFromMemory</a>(V, Ty);</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> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>   <span class="comment">// Atomic operations have to be done on integral types.</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>   <span class="keywordflow">if</span> (Ty-><a class="code" href="classclang_1_1Type.html#a626764b819022cad4c8812cc25bbeb4d">isAtomicType</a>()) {</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> lvalue = <a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a722d1083ced328e61d7028086ffe91a3">LValue::MakeAddr</a>(Addr, Ty,</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>                                      <a class="code" href="classclang_1_1CharUnits.html#adf6d3a79993b58285a0626b61c2c6c82" title="fromQuantity - Construct a CharUnits quantity from a raw integer type.">CharUnits::fromQuantity</a>(Alignment),</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>                                      <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), TBAAInfo);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2d29091670ce5ca5a1d0db7ae35533e2">EmitAtomicLoad</a>(lvalue, Loc).<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>();</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> </div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>   llvm::LoadInst *Load = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(Addr);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>   <span class="keywordflow">if</span> (Volatile)</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     Load->setVolatile(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>   <span class="keywordflow">if</span> (Alignment)</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     Load->setAlignment(Alignment);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>   <span class="keywordflow">if</span> (TBAAInfo) {</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     llvm::MDNode *TBAAPath = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#adb5007b71289aa05b79a05259b5c0364" title="Return the path-aware tag for given base type, access node and offset.">getTBAAStructTagInfo</a>(TBAABaseType, TBAAInfo,</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>                                                       TBAAOffset);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     <span class="keywordflow">if</span> (TBAAPath)</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a2bc7c2c5b15bdefaf8aba49a85c626a9">DecorateInstruction</a>(Load, TBAAPath, <span class="keyword">false</span><span class="comment">/*ConvertTypeToTag*/</span>);</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>   }</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>   <span class="keywordflow">if</span> ((<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->Bool && <a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(Ty)) ||</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>       (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->Enum && Ty-><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="l01121"></a><span class="lineno"> 1121</span>     llvm::APInt Min, End;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     <span class="keywordflow">if</span> (<a class="code" href="CGExpr_8cpp.html#a256008ff16a29e32643edd64eb1f72c2">getRangeForType</a>(*<span class="keyword">this</span>, Ty, Min, End, <span class="keyword">true</span>)) {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>       --End;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Check;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>       <span class="keywordflow">if</span> (!Min)</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>         Check = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpULE(</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>           Load, llvm::ConstantInt::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), End));</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Upper = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpSLE(</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>           Load, llvm::ConstantInt::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), End));</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Lower = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateICmpSGE(</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>           Load, llvm::ConstantInt::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), Min));</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         Check = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(Upper, Lower);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>       }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>       llvm::Constant *StaticArgs[] = {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a365b1957a3e5c4d666b1ecd777b86cc6" title="Emit a description of a source location in a format suitable for passing to a runtime sanitizer handl...">EmitCheckSourceLocation</a>(Loc),</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674" title="Emit a description of a type in a format suitable for passing to a runtime sanitizer handler...">EmitCheckTypeDescriptor</a>(Ty)</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       };</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a875a52f551ce966db02aaef2dae72c62" title="Create a basic block that will call a handler function in a sanitizer runtime with the provided argum...">EmitCheck</a>(Check, <span class="stringliteral">"load_invalid_value"</span>, StaticArgs, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab4991fe6ac7074a983161ec561d3372a" title="Convert a value into a format suitable for passing to a runtime sanitizer handler.">EmitCheckValue</a>(Load),</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>                 <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daade9f755044677d5aa1ef967325abca54" title="Check supports recovering, allows user to specify which.">CRK_Recoverable</a>);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().OptimizationLevel > 0)</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     <span class="keywordflow">if</span> (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty))</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>       Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);</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">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adf8925907bc87d98d8bc66b371f331b2">EmitFromMemory</a>(Load, Ty);</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> }</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8eff252055cf16c4eb408282653d0797"> 1149</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8eff252055cf16c4eb408282653d0797">CodeGenFunction::EmitToMemory</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>, <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty) {</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>   <span class="comment">// Bool has a different representation in memory than in registers.</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>   <span class="keywordflow">if</span> (<a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(Ty)) {</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     <span class="comment">// This should really always be an i1, but sometimes it's already</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     <span class="comment">// an i8, and it's awkward to track those cases down.</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     <span class="keywordflow">if</span> (Value->getType()->isIntegerTy(1))</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateZExt(Value, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab96689ae1b68ca38dd3c382f54bcbcd7">ConvertTypeForMem</a>(Ty), <span class="stringliteral">"frombool"</span>);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     assert(Value->getType()->isIntegerTy(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().getTypeSize(Ty)) &&</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>            <span class="stringliteral">"wrong value rep of bool"</span>);</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>   }</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>   <span class="keywordflow">return</span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>;</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"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adf8925907bc87d98d8bc66b371f331b2"> 1163</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adf8925907bc87d98d8bc66b371f331b2">CodeGenFunction::EmitFromMemory</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>, <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty) {</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>   <span class="comment">// Bool has a different representation in memory than in registers.</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>   <span class="keywordflow">if</span> (<a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(Ty)) {</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     assert(Value->getType()->isIntegerTy(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().getTypeSize(Ty)) &&</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>            <span class="stringliteral">"wrong value rep of bool"</span>);</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateTrunc(Value, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt1Ty(), <span class="stringliteral">"tobool"</span>);</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>   }</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> </div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>   <span class="keywordflow">return</span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> }</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa3de7edefb050b883760e29af7e65f75"> 1174</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa3de7edefb050b883760e29af7e65f75">CodeGenFunction::EmitStoreOfScalar</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">Value</a>, <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="SemaOverload_8cpp.html#a561f2d973ed74723ce0b1e1165c31804">Addr</a>,</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                                         <span class="keywordtype">bool</span> Volatile, <span class="keywordtype">unsigned</span> Alignment,</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>                                         <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty, llvm::MDNode *TBAAInfo,</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>                                         <span class="keywordtype">bool</span> isInit, <a class="code" href="classclang_1_1QualType.html">QualType</a> TBAABaseType,</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>                                         uint64_t TBAAOffset) {</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>   <span class="comment">// Handle vectors differently to get better performance.</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>   <span class="keywordflow">if</span> (Ty-><a class="code" href="classclang_1_1Type.html#aa19525a5a362d0b9b6792ca383889c12">isVectorType</a>()) {</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     llvm::Type *SrcTy = Value->getType();</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     llvm::VectorType *VecTy = cast<llvm::VectorType>(SrcTy);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     <span class="comment">// Handle vec3 special.</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="keywordflow">if</span> (VecTy->getNumElements() == 3) {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>       llvm::LLVMContext &VMContext = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>();</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>       <span class="comment">// Our source is a vec3, do a shuffle vector to make it a vec4.</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant*, 4></a> Mask;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>       Mask.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>                                             0));</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>       Mask.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>                                             1));</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>       Mask.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>                                             2));</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>       Mask.push_back(llvm::UndefValue::get(llvm::Type::getInt32Ty(VMContext)));</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MaskV = llvm::ConstantVector::get(Mask);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>       Value = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShuffleVector(Value,</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>                                           llvm::UndefValue::get(VecTy),</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>                                           MaskV, <span class="stringliteral">"extractVec"</span>);</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>       SrcTy = llvm::VectorType::get(VecTy->getElementType(), 4);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     }</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     llvm::PointerType *DstPtr = cast<llvm::PointerType>(Addr->getType());</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>     <span class="keywordflow">if</span> (DstPtr->getElementType() != SrcTy) {</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>       llvm::Type *MemTy =</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>       llvm::PointerType::get(SrcTy, DstPtr->getAddressSpace());</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>       Addr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(Addr, MemTy, <span class="stringliteral">"storetmp"</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>   }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>   Value = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8eff252055cf16c4eb408282653d0797">EmitToMemory</a>(Value, Ty);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>   <span class="keywordflow">if</span> (Ty-><a class="code" href="classclang_1_1Type.html#a626764b819022cad4c8812cc25bbeb4d">isAtomicType</a>()) {</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adf7f389cfde8fdde7c7b43eca50c711e">EmitAtomicStore</a>(<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(Value),</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>                     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a722d1083ced328e61d7028086ffe91a3">LValue::MakeAddr</a>(Addr, Ty,</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                                      <a class="code" href="classclang_1_1CharUnits.html#adf6d3a79993b58285a0626b61c2c6c82" title="fromQuantity - Construct a CharUnits quantity from a raw integer type.">CharUnits::fromQuantity</a>(Alignment),</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>                                      <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), TBAAInfo),</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>                     isInit);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>   }</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>   llvm::StoreInst *<a class="code" href="namespaceclang_1_1ento.html#ae512ebf5e0e9f696142c92f5b771ef39">Store</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStore(Value, Addr, Volatile);</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>   <span class="keywordflow">if</span> (Alignment)</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     Store->setAlignment(Alignment);</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>   <span class="keywordflow">if</span> (TBAAInfo) {</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     llvm::MDNode *TBAAPath = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#adb5007b71289aa05b79a05259b5c0364" title="Return the path-aware tag for given base type, access node and offset.">getTBAAStructTagInfo</a>(TBAABaseType, TBAAInfo,</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>                                                       TBAAOffset);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     <span class="keywordflow">if</span> (TBAAPath)</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a2bc7c2c5b15bdefaf8aba49a85c626a9">DecorateInstruction</a>(Store, TBAAPath, <span class="keyword">false</span><span class="comment">/*ConvertTypeToTag*/</span>);</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>   }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> }</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae38a763650b9ac76d5c8c76a82c2c4dd"> 1234</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa3de7edefb050b883760e29af7e65f75">CodeGenFunction::EmitStoreOfScalar</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *value, <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> lvalue,</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>                                         <span class="keywordtype">bool</span> isInit) {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa3de7edefb050b883760e29af7e65f75">EmitStoreOfScalar</a>(value, lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a58eed8b04aab5d70e2f0e6896181e917">isVolatile</a>(),</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>                     lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>(), lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>(),</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>                     lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01be51a35aebc758470218ae27e75694">getTBAAInfo</a>(), isInit, lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab3a49cd3fecd60bd7aae1060b7546e71">getTBAABaseType</a>(),</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>                     lvalue.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5d4615def80ca61871e29396d02c3d1f">getTBAAOffset</a>());</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> }</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment"></span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment">/// EmitLoadOfLValue - Given an expression that represents a value lvalue, this</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">/// method emits the address of the lvalue, then loads the result as an rvalue,</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">/// returning the rvalue.</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6ec6fabfbe7aa87203af03a05ab5d157"> 1245</a></span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6ec6fabfbe7aa87203af03a05ab5d157">CodeGenFunction::EmitLoadOfLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV, <a class="code" href="classclang_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="l01246"></a><span class="lineno"> 1246</span>   <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#af41b3346feb09f4188c244c17d81ef3f">isObjCWeak</a>()) {</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     <span class="comment">// load of a __weak object.</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *AddrWeakObj = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#abd56f60462d301077e883e68ed3a0a20">EmitObjCWeakRead</a>(*<span class="keyword">this</span>,</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>                                                              AddrWeakObj));</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>   }</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>   <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#adc87b34275b3ffb4f05274cc1fe0ecf7">getObjCLifetime</a>() == <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300ad62a7a19d7027c37d407d2ca7638a89c" title="Reading or writing from this object requires a barrier call.">Qualifiers::OCL_Weak</a>) {</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Object = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad15b229b97c9f1c2194ec720af286730" title="i8* @objc_loadWeakRetained(i8** addr)">EmitARCLoadWeakRetained</a>(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>());</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     Object = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a05d91b79ac8319906346cdb3b3ad6948">EmitObjCConsumeObject</a>(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>(), Object);</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(Object);</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> </div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>   <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>()) {</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     assert(!LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>()-><a class="code" href="classclang_1_1Type.html#af0ae1f40cbbc07fabfefc86af91072e3">isFunctionType</a>());</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     <span class="comment">// Everything needs a load.</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aff8d4768706029de6dbe796b2867a8ef">EmitLoadOfScalar</a>(LV, Loc));</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>   }</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>   <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a03cd55b063a9cffc66eb5f2c1f3888f4">isVectorElt</a>()) {</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     llvm::LoadInst *Load = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a888b9f43a03fb7515b4d085c82680f5f">getVectorAddr</a>(),</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                                               LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     Load->setAlignment(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateExtractElement(Load, LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a099e5c1eaf0a93ddfa28fde34d1e1336">getVectorIdx</a>(),</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>                                                     <span class="stringliteral">"vecext"</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> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>   <span class="comment">// If this is a reference to a subset of the elements of a vector, either</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>   <span class="comment">// shuffle the input or extract/insert them as appropriate.</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>   <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ac82d74f9f348575e1fdb85b4be853014">isExtVectorElt</a>())</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adafb32659a0bb7b82515e59b26c67a36">EmitLoadOfExtVectorElementLValue</a>(LV);</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>   assert(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8901b8a21b2acf2f4cdd27513824426e">isBitField</a>() && <span class="stringliteral">"Unknown LValue type!"</span>);</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af960c64a77063b58d1e46b8a4988e1ac">EmitLoadOfBitfieldLValue</a>(LV);</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> }</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af960c64a77063b58d1e46b8a4988e1ac"> 1282</a></span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af960c64a77063b58d1e46b8a4988e1ac">CodeGenFunction::EmitLoadOfBitfieldLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV) {</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html" title="Structure with information about how a bitfield should be accessed.">CGBitFieldInfo</a> &Info = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a543582ec28bdcdd5dcebc7296ce7a18f">getBitFieldInfo</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>   <span class="comment">// Get the output type.</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>   llvm::Type *ResLTy = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>());</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>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Ptr = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8beddd39439e5386ac98895739c75dc3">getBitFieldAddr</a>();</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(Ptr, LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>(),</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>                                         <span class="stringliteral">"bf.load"</span>);</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>   cast<llvm::LoadInst>(Val)->setAlignment(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a8bf933d70972c622bafae861fb3cb0b5" title="The alignment which should be used when accessing the bitfield.">StorageAlignment</a>);</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   <span class="keywordflow">if</span> (Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad681db49ae8862638d0de8e5edab7b33" title="Whether the bit-field is signed.">IsSigned</a>) {</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     assert(static_cast<unsigned>(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a> + Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>) <= Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>);</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     <span class="keywordtype">unsigned</span> HighBits = Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a> - Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a> - Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     <span class="keywordflow">if</span> (HighBits)</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>       Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShl(Val, HighBits, <span class="stringliteral">"bf.shl"</span>);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     <span class="keywordflow">if</span> (Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a> + HighBits)</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>       Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAShr(Val, Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a> + HighBits, <span class="stringliteral">"bf.ashr"</span>);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="keywordflow">if</span> (Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a>)</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>       Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLShr(Val, Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a>, <span class="stringliteral">"bf.lshr"</span>);</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     <span class="keywordflow">if</span> (static_cast<unsigned>(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a>) + Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a> < Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>)</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>       Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(Val, llvm::APInt::getLowBitsSet(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>,</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>                                                               Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>),</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>                               <span class="stringliteral">"bf.clear"</span>);</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>   }</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>   Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(Val, ResLTy, Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad681db49ae8862638d0de8e5edab7b33" title="Whether the bit-field is signed.">IsSigned</a>, <span class="stringliteral">"bf.cast"</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>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(Val);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> }</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">// If this is a reference to a subset of the elements of a vector, create an</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment">// appropriate shufflevector.</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adafb32659a0bb7b82515e59b26c67a36"> 1315</a></span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adafb32659a0bb7b82515e59b26c67a36">CodeGenFunction::EmitLoadOfExtVectorElementLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV) {</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>   llvm::LoadInst *Load = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2e45cc2045084c12a15c503b7c1b4e8b">getExtVectorAddr</a>(),</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>                                             LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>   Load->setAlignment(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Vec = Load;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>   <span class="keyword">const</span> llvm::Constant *Elts = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d028a61c96b0e33a15735e6c9c28314">getExtVectorElts</a>();</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>   <span class="comment">// If the result of the expression is a non-vector type, we must be extracting</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   <span class="comment">// a single element.  Just codegen as an extractelement.</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1VectorType.html">VectorType</a> *ExprVT = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1VectorType.html">VectorType</a>>();</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>   <span class="keywordflow">if</span> (!ExprVT) {</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>     <span class="keywordtype">unsigned</span> InIdx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">getAccessedFieldNo</a>(0, Elts);</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Elt = llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9b70851ea2ff034ca9a5443ce213a81c">Int32Ty</a>, InIdx);</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateExtractElement(Vec, Elt));</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</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>   <span class="comment">// Always use shuffle vector to try to retain the original program structure</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>   <span class="keywordtype">unsigned</span> NumResultElts = ExprVT-><a class="code" href="classclang_1_1VectorType.html#adfa7e090380e24449722cc934b2a71b1">getNumElements</a>();</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant*, 4></a> Mask;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumResultElts; ++i)</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     Mask.push_back(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">getAccessedFieldNo</a>(i, Elts)));</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>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MaskV = llvm::ConstantVector::get(Mask);</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>   Vec = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShuffleVector(Vec, llvm::UndefValue::get(Vec->getType()),</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>                                     MaskV);</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(Vec);</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> }</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</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> <span class="comment"></span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">/// EmitStoreThroughLValue - Store the specified rvalue into the specified</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment">/// lvalue, where both are guaranteed to the have the same type, and that type</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment">/// is 'Ty'.</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aab00f3161bf4956de6c490615544a734"> 1350</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aab00f3161bf4956de6c490615544a734">CodeGenFunction::EmitStoreThroughLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> Src, <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> Dst,</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>                                              <span class="keywordtype">bool</span> isInit) {</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>   <span class="keywordflow">if</span> (!Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>()) {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>     <span class="keywordflow">if</span> (Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a03cd55b063a9cffc66eb5f2c1f3888f4">isVectorElt</a>()) {</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>       <span class="comment">// Read/modify/write the vector, inserting the new element.</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>       llvm::LoadInst *Load = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a888b9f43a03fb7515b4d085c82680f5f">getVectorAddr</a>(),</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                                                 Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>       Load->setAlignment(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Vec = Load;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>       Vec = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateInsertElement(Vec, Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>(),</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>                                         Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a099e5c1eaf0a93ddfa28fde34d1e1336">getVectorIdx</a>(), <span class="stringliteral">"vecins"</span>);</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>       llvm::StoreInst *<a class="code" href="namespaceclang_1_1ento.html#ae512ebf5e0e9f696142c92f5b771ef39">Store</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStore(Vec, Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a888b9f43a03fb7515b4d085c82680f5f">getVectorAddr</a>(),</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>                                                    Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>       Store->setAlignment(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     }</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> </div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>     <span class="comment">// If this is an update of extended vector elements, insert them as</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     <span class="comment">// appropriate.</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     <span class="keywordflow">if</span> (Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ac82d74f9f348575e1fdb85b4be853014">isExtVectorElt</a>())</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fe14c3fd012ea15d168412c5b369d8d">EmitStoreThroughExtVectorComponentLValue</a>(Src, Dst);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> </div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     assert(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8901b8a21b2acf2f4cdd27513824426e">isBitField</a>() && <span class="stringliteral">"Unknown LValue type"</span>);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a044cb306d547bf06576fc693f633654f">EmitStoreThroughBitfieldLValue</a>(Src, Dst);</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>   }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>   <span class="comment">// There's special magic for assigning into an ARC-qualified l-value.</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300">Qualifiers::ObjCLifetime</a> Lifetime = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#adc87b34275b3ffb4f05274cc1fe0ecf7">getObjCLifetime</a>()) {</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>     <span class="keywordflow">switch</span> (Lifetime) {</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a29b319bca942e44bf183ca2749b072b3" title="There is no lifetime qualification on this type.">Qualifiers::OCL_None</a>:</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>       llvm_unreachable(<span class="stringliteral">"present but none"</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="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a1868aff47acf923ca643cb6950363615">Qualifiers::OCL_ExplicitNone</a>:</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>       <span class="comment">// nothing special</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> </div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a>:</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a40497037ed1f343c5ef7aa5b2dc652f5">EmitARCStoreStrong</a>(Dst, Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>(), <span class="comment">/*ignore*/</span> <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> </div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300ad62a7a19d7027c37d407d2ca7638a89c" title="Reading or writing from this object requires a barrier call.">Qualifiers::OCL_Weak</a>:</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aba3bbef5c415ca021de407fd87f92038">EmitARCStoreWeak</a>(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>(), <span class="comment">/*ignore*/</span> <span class="keyword">true</span>);</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="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300afd7d211973aef2cc5945b96a963f0e4f" title="Assigning into this object requires a lifetime extension.">Qualifiers::OCL_Autoreleasing</a>:</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>       Src = <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad0d203901d53b05c0fbc891489254c35">EmitObjCExtendObjectLifetime</a>(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>(),</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>                                                      Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>()));</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>       <span class="comment">// fall into the normal path</span></div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     }</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>   }</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> </div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>   <span class="keywordflow">if</span> (Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#af41b3346feb09f4188c244c17d81ef3f">isObjCWeak</a>() && !Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a6314a1fe54b9a41949f08b792a57e78a">isNonGC</a>()) {</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="comment">// load of a __weak object.</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *LvalueDst = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *src = Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>();</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>      <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#a76199d79668ea4b7ecbeb67781f6ffad">EmitObjCWeakAssign</a>(*<span class="keyword">this</span>, src, LvalueDst);</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>   }</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> </div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>   <span class="keywordflow">if</span> (Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a4cd4819f34dc86c7a5ad78ba14a25517">isObjCStrong</a>() && !Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a6314a1fe54b9a41949f08b792a57e78a">isNonGC</a>()) {</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     <span class="comment">// load of a __strong object.</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *LvalueDst = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *src = Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>();</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>     <span class="keywordflow">if</span> (Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a81fe74b921b64f51acc04c73cbc83a63">isObjCIvar</a>()) {</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>       assert(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a10ac8d6bdf2034dcb1627e3a58a34e7a">getBaseIvarExp</a>() && <span class="stringliteral">"BaseIvarExp is NULL"</span>);</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>       llvm::Type *ResultType = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().LongTy);</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *RHS = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a10ac8d6bdf2034dcb1627e3a58a34e7a">getBaseIvarExp</a>());</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *dst = RHS;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>       RHS = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreatePtrToInt(RHS, ResultType, <span class="stringliteral">"sub.ptr.rhs.cast"</span>);</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *LHS =</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreatePtrToInt(LvalueDst, ResultType, <span class="stringliteral">"sub.ptr.lhs.cast"</span>);</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *BytesBetween = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateSub(LHS, RHS, <span class="stringliteral">"ivar.offset"</span>);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#a1a19b1a6b1aace6b60a579e1bd9725cc">EmitObjCIvarAssign</a>(*<span class="keyword">this</span>, src, dst,</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>                                               BytesBetween);</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a25d09822311bffb59e86718ada71a2c3">isGlobalObjCRef</a>()) {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#af77c93b4c371d40eeadddf4a116c61f4">EmitObjCGlobalAssign</a>(*<span class="keyword">this</span>, src, LvalueDst,</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>                                                 Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a901655ac274046013da4580f45631b6a">isThreadLocalRef</a>());</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>     }</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#a28256878d6a4e2bec747f4d942c6ca3c">EmitObjCStrongCastAssign</a>(*<span class="keyword">this</span>, src, LvalueDst);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</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>   assert(Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#aeb42ff4f93c5721cf244b300ba864e3f">isScalar</a>() && <span class="stringliteral">"Can't emit an agg store with this method"</span>);</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa3de7edefb050b883760e29af7e65f75">EmitStoreOfScalar</a>(Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>(), Dst, isInit);</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"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a044cb306d547bf06576fc693f633654f"> 1438</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a044cb306d547bf06576fc693f633654f">CodeGenFunction::EmitStoreThroughBitfieldLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> Src, <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> Dst,</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>                                                      <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> **Result) {</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html" title="Structure with information about how a bitfield should be accessed.">CGBitFieldInfo</a> &Info = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a543582ec28bdcdd5dcebc7296ce7a18f">getBitFieldInfo</a>();</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>   llvm::Type *ResLTy = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab96689ae1b68ca38dd3c382f54bcbcd7">ConvertTypeForMem</a>(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>());</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Ptr = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8beddd39439e5386ac98895739c75dc3">getBitFieldAddr</a>();</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>   <span class="comment">// Get the source value, truncated to the width of the bit-field.</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *SrcVal = Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>();</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>   <span class="comment">// Cast the source to the storage type and shift it into place.</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>   SrcVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(SrcVal,</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>                                  Ptr->getType()->getPointerElementType(),</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>                                  <span class="comment">/*IsSigned=*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MaskedVal = SrcVal;</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>   <span class="comment">// See if there are other bits in the bitfield's storage we'll need to load</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>   <span class="comment">// and mask together with source before storing.</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>   <span class="keywordflow">if</span> (Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a> != Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>) {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>     assert(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a> > Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a> && <span class="stringliteral">"Invalid bitfield size."</span>);</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(Ptr, Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>(),</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>                                           <span class="stringliteral">"bf.load"</span>);</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>     cast<llvm::LoadInst>(Val)->setAlignment(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a8bf933d70972c622bafae861fb3cb0b5" title="The alignment which should be used when accessing the bitfield.">StorageAlignment</a>);</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     <span class="comment">// Mask the source value as needed.</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     <span class="keywordflow">if</span> (!<a class="code" href="CGExpr_8cpp.html#a147edd2f712ea0e8008dfd31d958cea3">hasBooleanRepresentation</a>(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>()))</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>       SrcVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(SrcVal,</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>                                  llvm::APInt::getLowBitsSet(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>,</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>                                                             Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>),</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>                                  <span class="stringliteral">"bf.value"</span>);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     MaskedVal = SrcVal;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     <span class="keywordflow">if</span> (Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a>)</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>       SrcVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShl(SrcVal, Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a>, <span class="stringliteral">"bf.shl"</span>);</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> </div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     <span class="comment">// Mask out the original value.</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     Val = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAnd(Val,</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>                             ~llvm::APInt::getBitsSet(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>,</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>                                                      Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a>,</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>                                                      Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a> + Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>),</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>                             <span class="stringliteral">"bf.clear"</span>);</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> </div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="comment">// Or together the unchanged values and the source value.</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     SrcVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateOr(Val, SrcVal, <span class="stringliteral">"bf.set"</span>);</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     assert(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a528c7504c3c78820c4da29d31708763f">Offset</a> == 0);</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>   }</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> </div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>   <span class="comment">// Write the new value back out.</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>   llvm::StoreInst *<a class="code" href="namespaceclang_1_1ento.html#ae512ebf5e0e9f696142c92f5b771ef39">Store</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStore(SrcVal, Ptr,</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>                                                Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>   Store->setAlignment(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#a8bf933d70972c622bafae861fb3cb0b5" title="The alignment which should be used when accessing the bitfield.">StorageAlignment</a>);</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> </div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>   <span class="comment">// Return the new value of the bit-field, if requested.</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>   <span class="keywordflow">if</span> (Result) {</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *ResultVal = MaskedVal;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> </div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     <span class="comment">// Sign extend the value if needed.</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     <span class="keywordflow">if</span> (Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad681db49ae8862638d0de8e5edab7b33" title="Whether the bit-field is signed.">IsSigned</a>) {</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>       assert(Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a> <= Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>);</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>       <span class="keywordtype">unsigned</span> HighBits = Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a> - Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ab989d62260b0383e31a3080f7c783cc6" title="The total size of the bit-field, in bits.">Size</a>;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>       <span class="keywordflow">if</span> (HighBits) {</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>         ResultVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShl(ResultVal, HighBits, <span class="stringliteral">"bf.result.shl"</span>);</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>         ResultVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateAShr(ResultVal, HighBits, <span class="stringliteral">"bf.result.ashr"</span>);</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>       }</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</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>     ResultVal = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(ResultVal, ResLTy, Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad681db49ae8862638d0de8e5edab7b33" title="Whether the bit-field is signed.">IsSigned</a>,</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>                                       <span class="stringliteral">"bf.result.cast"</span>);</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     *Result = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adf8925907bc87d98d8bc66b371f331b2">EmitFromMemory</a>(ResultVal, Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>());</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</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> </div>
+<div class="line"><a name="l01509"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fe14c3fd012ea15d168412c5b369d8d"> 1509</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fe14c3fd012ea15d168412c5b369d8d">CodeGenFunction::EmitStoreThroughExtVectorComponentLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> Src,</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>                                                                <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> Dst) {</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>   <span class="comment">// This access turns into a read/modify/write of the vector.  Load the input</span></div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>   <span class="comment">// value now.</span></div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>   llvm::LoadInst *Load = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2e45cc2045084c12a15c503b7c1b4e8b">getExtVectorAddr</a>(),</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>                                             Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>   Load->setAlignment(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Vec = Load;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>   <span class="keyword">const</span> llvm::Constant *Elts = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d028a61c96b0e33a15735e6c9c28314">getExtVectorElts</a>();</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *SrcVal = Src.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>();</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VectorType.html">VectorType</a> *VTy = Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>()-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1VectorType.html">VectorType</a>>()) {</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     <span class="keywordtype">unsigned</span> NumSrcElts = VTy->getNumElements();</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>     <span class="keywordtype">unsigned</span> NumDstElts =</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>        cast<llvm::VectorType>(Vec->getType())->getNumElements();</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     <span class="keywordflow">if</span> (NumDstElts == NumSrcElts) {</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>       <span class="comment">// Use shuffle vector is the src and destination are the same number of</span></div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>       <span class="comment">// elements and restore the vector mask since it is on the side it will be</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>       <span class="comment">// stored.</span></div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant*, 4></a> Mask(NumDstElts);</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumSrcElts; ++i)</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>         Mask[<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">getAccessedFieldNo</a>(i, Elts)] = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(i);</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MaskV = llvm::ConstantVector::get(Mask);</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>       Vec = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShuffleVector(SrcVal,</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>                                         llvm::UndefValue::get(Vec->getType()),</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>                                         MaskV);</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (NumDstElts > NumSrcElts) {</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>       <span class="comment">// Extended the source vector to the same length and then shuffle it</span></div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>       <span class="comment">// into the destination.</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>       <span class="comment">// FIXME: since we're shuffling with undef, can we just use the indices</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>       <span class="comment">//        into that?  This could be simpler.</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant*, 4></a> ExtMask;</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumSrcElts; ++i)</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>         ExtMask.push_back(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(i));</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>       ExtMask.resize(NumDstElts, llvm::UndefValue::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9b70851ea2ff034ca9a5443ce213a81c">Int32Ty</a>));</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *ExtMaskV = llvm::ConstantVector::get(ExtMask);</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *ExtSrcVal =</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShuffleVector(SrcVal,</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>                                     llvm::UndefValue::get(SrcVal->getType()),</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>                                     ExtMaskV);</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>       <span class="comment">// build identity</span></div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant*, 4></a> Mask;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumDstElts; ++i)</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>         Mask.push_back(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(i));</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> </div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>       <span class="comment">// When the vector size is odd and .odd or .hi is used, the last element</span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>       <span class="comment">// of the Elts constant array will be one past the size of the vector.</span></div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>       <span class="comment">// Ignore the last element here, if it is greater than the mask size.</span></div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">getAccessedFieldNo</a>(NumSrcElts - 1, Elts) == Mask.size())</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>         NumSrcElts--;</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="comment">// modify when what gets shuffled in</span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumSrcElts; ++i)</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>         Mask[<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">getAccessedFieldNo</a>(i, Elts)] = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(i+NumDstElts);</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *MaskV = llvm::ConstantVector::get(Mask);</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>       Vec = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateShuffleVector(Vec, ExtSrcVal, MaskV);</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>       <span class="comment">// We should never shorten the vector</span></div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>       llvm_unreachable(<span class="stringliteral">"unexpected shorten vector length"</span>);</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>     }</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>     <span class="comment">// If the Src is a scalar (not a vector) it must be updating one element.</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>     <span class="keywordtype">unsigned</span> InIdx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af0615febe174e7679c2200d53fa80ab6">getAccessedFieldNo</a>(0, Elts);</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Elt = llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9b70851ea2ff034ca9a5443ce213a81c">Int32Ty</a>, InIdx);</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>     Vec = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateInsertElement(Vec, SrcVal, Elt);</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>   }</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>   llvm::StoreInst *<a class="code" href="namespaceclang_1_1ento.html#ae512ebf5e0e9f696142c92f5b771ef39">Store</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStore(Vec, Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2e45cc2045084c12a15c503b7c1b4e8b">getExtVectorAddr</a>(),</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>                                                Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab445c86edb0419fab12ad9aaeff5f6e3">isVolatileQualified</a>());</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>   Store->setAlignment(Dst.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> }</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> </div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> <span class="comment">// setObjCGCLValueClass - sets class of he lvalue for the purpose of</span></div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="comment">// generating write-barries API. It is currently a global, ivar,</span></div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <span class="comment">// or neither.</span></div>
+<div class="line"><a name="l01586"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc"> 1586</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ASTContext.html" title="Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...">ASTContext</a> &Ctx, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>                                  <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> &LV,</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>                                  <span class="keywordtype">bool</span> IsMemberAccess=<span class="keyword">false</span>) {</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>   <span class="keywordflow">if</span> (Ctx.<a class="code" href="classclang_1_1ASTContext.html#a3faa7b5a5e8d1637c53dea680acca0ff">getLangOpts</a>().getGC() == <a class="code" href="classclang_1_1LangOptions.html#a01202ff51e7f9dbf39a447360d0a3a84ab62653320d5d7633c47854b73fe5d93d">LangOptions::NonGC</a>)</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> </div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>   <span class="keywordflow">if</span> (isa<ObjCIvarRefExpr>(E)) {</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> ExpTy = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>     <span class="keywordflow">if</span> (IsMemberAccess && ExpTy-><a class="code" href="classclang_1_1Type.html#a1c0038a55083ee0a292a020038ee04d8">isPointerType</a>()) {</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>       <span class="comment">// If ivar is a structure pointer, assigning to field of</span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>       <span class="comment">// this struct follows gcc's behavior and makes it a non-ivar</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>       <span class="comment">// writer-barrier conservatively.</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>       ExpTy = ExpTy-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1PointerType.html">PointerType</a>>()->getPointeeType();</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>       <span class="keywordflow">if</span> (ExpTy-><a class="code" href="classclang_1_1Type.html#a6525adb10d549a7ee372424dcdb6b9bd">isRecordType</a>()) {</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>         LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2c6a70323bbaea7e4ab6e86ce3334925">setObjCIvar</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>       }</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     }</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2c6a70323bbaea7e4ab6e86ce3334925">setObjCIvar</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <a class="code" href="classclang_1_1ObjCIvarRefExpr.html" title="ObjCIvarRefExpr - A reference to an ObjC instance variable.">ObjCIvarRefExpr</a> *Exp = cast<ObjCIvarRefExpr>(<span class="keyword">const_cast<</span><a class="code" href="classclang_1_1Expr.html">Expr</a>*<span class="keyword">></span>(E));</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#af9d59f711786978ebf0b94138dd7f7ec">setBaseIvarExp</a>(Exp-><a class="code" href="classclang_1_1ObjCIvarRefExpr.html#a27fdb40e00a21993a9845fcdc00645f9">getBase</a>());</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a528620e6b6d04b75ce544ab0327bec2c">setObjCArray</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a53b83bd119ae77bc77e92dc69a8c8094">isArrayType</a>());</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>   }</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>   <span class="keywordflow">if</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> *Exp = dyn_cast<DeclRefExpr>(E)) {</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<VarDecl>(Exp->getDecl())) {</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>       <span class="keywordflow">if</span> (VD->hasGlobalStorage()) {</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>         LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab31d748e2408ec2c72eddb43ddc4f3be">setGlobalObjCRef</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>         LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#aa51c97c348f1bbeb8c28c5bae6f4e790">setThreadLocalRef</a>(VD->getTLSKind() != <a class="code" href="classclang_1_1VarDecl.html#abd5cfc880214a4e8b29d1875602ae3c6a9d620e432e4fb1d0137c9aaa4de9ee3d" title="Not a TLS variable.">VarDecl::TLS_None</a>);</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>       }</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     }</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a528620e6b6d04b75ce544ab0327bec2c">setObjCArray</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a53b83bd119ae77bc77e92dc69a8c8094">isArrayType</a>());</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>   }</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> </div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1UnaryOperator.html">UnaryOperator</a> *Exp = dyn_cast<UnaryOperator>(E)) {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>   }</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ParenExpr.html">ParenExpr</a> *Exp = dyn_cast<ParenExpr>(E)) {</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a81fe74b921b64f51acc04c73cbc83a63">isObjCIvar</a>()) {</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>       <span class="comment">// If cast is to a structure pointer, follow gcc's behavior and make it</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>       <span class="comment">// a non-ivar write-barrier.</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>       <a class="code" href="classclang_1_1QualType.html">QualType</a> ExpTy = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>       <span class="keywordflow">if</span> (ExpTy-><a class="code" href="classclang_1_1Type.html#a1c0038a55083ee0a292a020038ee04d8">isPointerType</a>())</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>         ExpTy = ExpTy-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1PointerType.html">PointerType</a>>()-><a class="code" href="classclang_1_1PointerType.html#a3d0af079431148f7da7e2c400052cc66">getPointeeType</a>();</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>       <span class="keywordflow">if</span> (ExpTy-><a class="code" href="classclang_1_1Type.html#a6525adb10d549a7ee372424dcdb6b9bd">isRecordType</a>())</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>         LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2c6a70323bbaea7e4ab6e86ce3334925">setObjCIvar</a>(<span class="keyword">false</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="keywordflow">return</span>;</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>   }</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1GenericSelectionExpr.html" title="Represents a C11 generic selection.">GenericSelectionExpr</a> *Exp = dyn_cast<GenericSelectionExpr>(E)) {</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getResultExpr(), LV);</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>   }</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> </div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a> *Exp = dyn_cast<ImplicitCastExpr>(E)) {</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</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>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CStyleCastExpr.html">CStyleCastExpr</a> *Exp = dyn_cast<CStyleCastExpr>(E)) {</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     <span class="keywordflow">return</span>;</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>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCBridgedCastExpr.html" title="An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers...">ObjCBridgedCastExpr</a> *Exp = dyn_cast<ObjCBridgedCastExpr>(E)) {</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>   }</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ArraySubscriptExpr.html" title="ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.">ArraySubscriptExpr</a> *Exp = dyn_cast<ArraySubscriptExpr>(E)) {</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getBase(), LV);</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a81fe74b921b64f51acc04c73cbc83a63">isObjCIvar</a>() && !LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a74fd64a760e143a377182b5986e4e1b1">isObjCArray</a>())</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>       <span class="comment">// Using array syntax to assigning to what an ivar points to is not</span></div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>       <span class="comment">// same as assigning to the ivar itself. {id *Names;} Names[i] = 0;</span></div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>       LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2c6a70323bbaea7e4ab6e86ce3334925">setObjCIvar</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a25d09822311bffb59e86718ada71a2c3">isGlobalObjCRef</a>() && !LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a74fd64a760e143a377182b5986e4e1b1">isObjCArray</a>())</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>       <span class="comment">// Using array syntax to assigning to what global points to is not</span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>       <span class="comment">// same as assigning to the global itself. {id *G;} G[i] = 0;</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>       LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab31d748e2408ec2c72eddb43ddc4f3be">setGlobalObjCRef</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>   }</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> </div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1MemberExpr.html">MemberExpr</a> *Exp = dyn_cast<MemberExpr>(E)) {</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(Ctx, Exp->getBase(), LV, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     <span class="comment">// We don't know if member is an 'ivar', but this flag is looked at</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     <span class="comment">// only in the context of LV.isObjCIvar().</span></div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a528620e6b6d04b75ce544ab0327bec2c">setObjCArray</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a53b83bd119ae77bc77e92dc69a8c8094">isArrayType</a>());</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>   }</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> }</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="keyword">static</span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *</div>
+<div class="line"><a name="l01684"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a3e8afbc1126d928fcf07c78b916e71cd"> 1684</a></span> <a class="code" href="CGExpr_8cpp.html#a3e8afbc1126d928fcf07c78b916e71cd">EmitBitCastOfLValueToProperType</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF,</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>                                 <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V, llvm::Type *IRType,</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>                                 StringRef Name = StringRef()) {</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>   <span class="keywordtype">unsigned</span> AS = cast<llvm::PointerType>(V->getType())->getAddressSpace();</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>   <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(V, IRType->getPointerTo(AS), Name);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> }</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#aaaa7d0104d3b659b9999c54008a75328"> 1691</a></span> <span class="keyword">static</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="CGExpr_8cpp.html#aaaa7d0104d3b659b9999c54008a75328">EmitGlobalVarDeclLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF,</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>                                       <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E, <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD) {</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#ada9b3a5077437e849c3d758cca9567e3">GetAddrOfGlobalVar</a>(VD);</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>   llvm::Type *RealVarTy = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5120facc67b842511aeefb15ece6407d">getTypes</a>().<a class="code" href="classclang_1_1CodeGen_1_1CodeGenTypes.html#a9e549d382da897b9d23ed3e2c65e6cf7">ConvertTypeForMem</a>(VD-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>());</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>   V = <a class="code" href="CGExpr_8cpp.html#a3e8afbc1126d928fcf07c78b916e71cd">EmitBitCastOfLValueToProperType</a>(CGF, V, RealVarTy);</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Alignment = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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);</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> T = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</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>()) {</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>     llvm::LoadInst *LI = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(V);</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     LI->setAlignment(Alignment.<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     V = LI;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     LV = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(V, T);</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     LV = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), Alignment);</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>   }</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>   <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), E, LV);</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>   <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> }</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#aef783641a79deeac5eba605d4929d612"> 1711</a></span> <span class="keyword">static</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="CGExpr_8cpp.html#aef783641a79deeac5eba605d4929d612">EmitFunctionDeclLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF,</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>                                      <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E, <span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD) {</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#ac7a1043756ac6082fa8e9540afa830a9">GetAddrOfFunction</a>(FD);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>   <span class="keywordflow">if</span> (!FD-><a class="code" href="classclang_1_1FunctionDecl.html#adf1da6b894fd72c4369bc18b557552bc" title="Whether this function has a prototype, either because one was explicitly written or because it was "i...">hasPrototype</a>()) {</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionProtoType.html">FunctionProtoType</a> *Proto =</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>             FD-><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_1FunctionProtoType.html">FunctionProtoType</a>>()) {</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>       <span class="comment">// Ugly case: for a K&R-style definition, the type of the definition</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>       <span class="comment">// isn't the same as the type of a use.  Correct for this with a</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>       <span class="comment">// bitcast.</span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>       <a class="code" href="classclang_1_1QualType.html">QualType</a> NoProtoType =</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>           CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a5f935beb13cff87f834784b26504f2f3" title="Return a K&R style C function type like 'int()'.">getFunctionNoProtoType</a>(Proto->getResultType());</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>       NoProtoType = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(NoProtoType);</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>       V = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(V, CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(NoProtoType));</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>   }</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Alignment = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(FD);</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>   <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), Alignment);</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> }</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> </div>
+<div class="line"><a name="l01730"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a35f5e7a1fe6e31d72ba16bb41c943722"> 1730</a></span> <span class="keyword">static</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="CGExpr_8cpp.html#a35f5e7a1fe6e31d72ba16bb41c943722">EmitCapturedFieldLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html">CodeGenFunction</a> &CGF, <span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *FD,</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>                                       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *ThisValue) {</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> <a class="code" href="classclang_1_1TagType.html">TagType</a> = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(FD-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>());</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(ThisValue, TagType);</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>   <span class="keywordflow">return</span> CGF.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">EmitLValueForField</a>(LV, FD);</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> </div>
+<div class="line"><a name="l01737"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a811bcfd5769bf9dc2ad7f62e9350dc56"> 1737</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a811bcfd5769bf9dc2ad7f62e9350dc56">CodeGenFunction::EmitDeclRefLValue</a>(<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> *E) {</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1NamedDecl.html">NamedDecl</a> *ND = E-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>();</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Alignment = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(ND);</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> T = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> </div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>   <span class="comment">// A DeclRefExpr for a reference initialized by a constant expression can</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>   <span class="comment">// appear without being odr-used. Directly emit the constant initializer.</span></div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<VarDecl>(ND)) {</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *Init = VD->getAnyInitializer(VD);</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>     <span class="keywordflow">if</span> (Init && !isa<ParmVarDecl>(VD) && VD-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>() &&</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>         VD->isUsableInConstantExpressions(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>()) &&</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>         VD->checkInitIsICE()) {</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>       llvm::Constant *Val =</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a97e0aa3c286413a5a233969425bb9dda">EmitConstantValue</a>(*VD->evaluateValue(), VD->getType(), <span class="keyword">this</span>);</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>       assert(Val && <span class="stringliteral">"failed to emit reference constant expression"</span>);</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>       <span class="comment">// FIXME: Eventually we will want to emit vector element references.</span></div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Val, T, Alignment);</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>     }</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>   }</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> </div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>   <span class="comment">// FIXME: We should be able to assert this for FunctionDecls as well!</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>   <span class="comment">// FIXME: We should be able to assert this for all DeclRefExprs, not just</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>   <span class="comment">// those with a valid source location.</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>   assert((ND-><a class="code" href="classclang_1_1Decl.html#ad588cec2ab8cfc2963b9ee5a9a21d304" title="Whether this declaration was used, meaning that a definition is required.">isUsed</a>(<span class="keyword">false</span>) || !isa<VarDecl>(ND) ||</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>           !E-><a class="code" href="classclang_1_1DeclRefExpr.html#ab4616545c45fc9569eb99471396361b9">getLocation</a>().<a class="code" href="classclang_1_1SourceLocation.html#ad504978d83973770506b6ddb1d7b48f9" title="Return true if this is a valid SourceLocation object.">isValid</a>()) &&</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>          <span class="stringliteral">"Should not use decl without marking it used!"</span>);</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> </div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>   <span class="keywordflow">if</span> (ND-><a class="code" href="classclang_1_1Decl.html#ac60cc8b34313e03a5c40277c5c5ad61b">hasAttr</a><<a class="code" href="classclang_1_1WeakRefAttr.html">WeakRefAttr</a>>()) {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1ValueDecl.html">ValueDecl</a> *VD = cast<ValueDecl>(ND);</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>     llvm::Constant *Aliasee = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#ad04cdc27a6518a36dc2c892a56b91478" title="GetWeakRefReference - Get a reference to the target of VD.">GetWeakRefReference</a>(VD);</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Aliasee, T, Alignment);</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>   }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> </div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<VarDecl>(ND)) {</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>     <span class="comment">// Check if this is a global variable.</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>     <span class="keywordflow">if</span> (VD->hasLinkage() || VD->isStaticDataMember()) {</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>       <span class="comment">// If it's thread_local, emit a call to its wrapper function instead.</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>       <span class="keywordflow">if</span> (VD->getTLSKind() == <a class="code" href="classclang_1_1VarDecl.html#abd5cfc880214a4e8b29d1875602ae3c6a852335662d043a4ad078dc4da11d9ed4" title="TLS with a dynamic initializer.">VarDecl::TLS_Dynamic</a>)</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>         <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abcced6119cfc90ff6332ec96766ff70a">getCXXABI</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGCXXABI.html#a44096142d4e6129a8f11187c536aa00a">EmitThreadLocalDeclRefExpr</a>(*<span class="keyword">this</span>, E);</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>       <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#aaaa7d0104d3b659b9999c54008a75328">EmitGlobalVarDeclLValue</a>(*<span class="keyword">this</span>, E, VD);</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>     }</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> </div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>     <span class="keywordtype">bool</span> isBlockVariable = VD->hasAttr<<a class="code" href="classclang_1_1BlocksAttr.html">BlocksAttr</a>>();</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> </div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = LocalDeclMap.lookup(VD);</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>     <span class="keywordflow">if</span> (!V && VD->isStaticLocal())</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>       V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a0c645f6b3b4dcae1de7bf178ffe43f9c">getStaticLocalDeclAddress</a>(VD);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> </div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>     <span class="comment">// Use special handling for lambdas.</span></div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>     <span class="keywordflow">if</span> (!V) {</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *FD = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac52bc45c3c8b289210ec55c1e97e7484">LambdaCaptureFields</a>.lookup(VD)) {</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>         <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a35f5e7a1fe6e31d72ba16bb41c943722">EmitCapturedFieldLValue</a>(*<span class="keyword">this</span>, FD, CXXABIThisValue);</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a20b5348e851b83612ba250f18f67f705">CapturedStmtInfo</a>) {</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>         <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *FD = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a20b5348e851b83612ba250f18f67f705">CapturedStmtInfo</a>-><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1CGCapturedStmtInfo.html#ad905611f011612785a92a0c0832172d7" title="Lookup the captured field decl for a variable.">lookup</a>(VD))</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>           <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#a35f5e7a1fe6e31d72ba16bb41c943722">EmitCapturedFieldLValue</a>(*<span class="keyword">this</span>, FD,</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>                                          <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a20b5348e851b83612ba250f18f67f705">CapturedStmtInfo</a>-><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1CGCapturedStmtInfo.html#a01b5c4844f698470e66ee1783d142cf4">getContextValue</a>());</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>       }</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> </div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>       assert(isa<BlockDecl>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a57b46a6624e733181105ee9c0eb39618" title="CurCodeDecl - This is the inner-most code context, which includes blocks.">CurCodeDecl</a>) && E-><a class="code" href="classclang_1_1DeclRefExpr.html#a771346de459eacc4867cf6d6740c75b8">refersToEnclosingLocal</a>());</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a58d27be2d336b0dd7499df659ae75f8b">GetAddrOfBlockDecl</a>(VD, isBlockVariable),</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>                             T, Alignment);</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>     }</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> </div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>     assert(V && <span class="stringliteral">"DeclRefExpr not entered in LocalDeclMap?"</span>);</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> </div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>     <span class="keywordflow">if</span> (isBlockVariable)</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>       V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac3e08084dc8583927096aac5182a4aa1">BuildBlockByrefAddress</a>(V, VD);</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> </div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV;</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>     <span class="keywordflow">if</span> (VD->getType()->isReferenceType()) {</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>       llvm::LoadInst *LI = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(V);</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>       LI->setAlignment(Alignment.<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>       V = LI;</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>       LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(V, T);</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>       LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, T, Alignment);</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> </div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>     <span class="keywordtype">bool</span> isLocalStorage = VD->hasLocalStorage();</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> </div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     <span class="keywordtype">bool</span> NonGCable = isLocalStorage &&</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>                      !VD->getType()->isReferenceType() &&</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>                      !isBlockVariable;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>     <span class="keywordflow">if</span> (NonGCable) {</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>       LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#a603b7e8eeb31d10e73c757eb4a7ca813">removeObjCGCAttr</a>();</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>       LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ad56f6bb7326ffc476a59349adf6910dc">setNonGC</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>     }</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> </div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>     <span class="keywordtype">bool</span> isImpreciseLifetime =</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>       (isLocalStorage && !VD->hasAttr<<a class="code" href="classclang_1_1ObjCPreciseLifetimeAttr.html">ObjCPreciseLifetimeAttr</a>>());</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>     <span class="keywordflow">if</span> (isImpreciseLifetime)</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>       LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ac1b405b0dba979dcf87a5144b2053b05">setARCPreciseLifetime</a>(<a class="code" href="namespaceclang_1_1CodeGen.html#abd4c22c5bca7ad596b2a7bdcfe7dcea0a6ec820d64b2841f94059b9e637e82aa7">ARCImpreciseLifetime</a>);</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), E, LV);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>   }</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = dyn_cast<FunctionDecl>(ND))</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>     <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#aef783641a79deeac5eba605d4929d612">EmitFunctionDeclLValue</a>(*<span class="keyword">this</span>, E, FD);</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> </div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>   llvm_unreachable(<span class="stringliteral">"Unhandled DeclRefExpr"</span>);</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> </div>
+<div class="line"><a name="l01839"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acb251a4cc5868549ae822f2d47c4b5b0"> 1839</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acb251a4cc5868549ae822f2d47c4b5b0">CodeGenFunction::EmitUnaryOpLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1UnaryOperator.html">UnaryOperator</a> *E) {</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>   <span class="comment">// __extension__ doesn't affect lvalue-ness.</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1UnaryOperator.html#a4fceff35ff6b7f186590155fa21df48b">getOpcode</a>() == <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffadc9189ae28cc27f4b3170faeb8ea61b5">UO_Extension</a>)</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>());</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> </div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> ExprTy = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>   <span class="keywordflow">switch</span> (E-><a class="code" href="classclang_1_1UnaryOperator.html#a4fceff35ff6b7f186590155fa21df48b">getOpcode</a>()) {</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>   <span class="keywordflow">default</span>: llvm_unreachable(<span class="stringliteral">"Unknown unary operator lvalue!"</span>);</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa7fa8b49244d53a4c50b7d8e63257449e">UO_Deref</a>: {</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> T = E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a3a0edf987679f04072a1243b6118add1">getPointeeType</a>();</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>     assert(!T.<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>() && <span class="stringliteral">"CodeGenFunction::EmitUnaryOpLValue: Illegal type"</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_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>()), T);</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>     LV.getQuals().setAddressSpace(ExprTy.<a class="code" href="classclang_1_1QualType.html#adcf1751da775a8f0743e9d9c3a5a34a1" title="getAddressSpace - Return the address space of this type.">getAddressSpace</a>());</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> </div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>     <span class="comment">// We should not generate __weak write barrier on indirect reference</span></div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>     <span class="comment">// of a pointer to object; as in void foo (__weak id *param); *param = 0;</span></div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     <span class="comment">// But, we continue to generate __strong write barrier on indirect write</span></div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>     <span class="comment">// into a pointer to object.</span></div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().ObjC1 &&</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().getGC() != <a class="code" href="classclang_1_1LangOptions.html#a01202ff51e7f9dbf39a447360d0a3a84ab62653320d5d7633c47854b73fe5d93d">LangOptions::NonGC</a> &&</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>         LV.isObjCWeak())</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>       LV.setNonGC(!E-><a class="code" href="classclang_1_1Expr.html#a35da34a8ae0eff1a6f73b38d7a68a26b">isOBJCGCCandidate</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>()));</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>     <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>   }</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa8e61d989a095d6d34c4fa6325233dab7">UO_Real</a>:</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa27e6ce45ef7fa78a3a6d6a7700d1802d">UO_Imag</a>: {</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>());</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>     assert(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>() && <span class="stringliteral">"real/imag on non-ordinary l-value"</span>);</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="SemaOverload_8cpp.html#a561f2d973ed74723ce0b1e1165c31804">Addr</a> = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>     <span class="comment">// __real is valid on scalars.  This is a faster way of testing that.</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>     <span class="comment">// __imag can only produce an rvalue on scalars.</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>     <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1UnaryOperator.html#a4fceff35ff6b7f186590155fa21df48b">getOpcode</a>() == <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa8e61d989a095d6d34c4fa6325233dab7">UO_Real</a> &&</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>         !cast<llvm::PointerType>(Addr->getType())</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>            -><a class="code" href="SemaChecking_8cpp.html#a9f6c9a015ec06db5f86672533b582823">getElementType</a>()->isStructTy()) {</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>       assert(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a3c072948dc40a770d97459f82feb0bc8">isArithmeticType</a>());</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>       <span class="keywordflow">return</span> LV;</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>     assert(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a292ac10726adf5426212b5c6ee14d9bb">isAnyComplexType</a>());</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> </div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>     <span class="keywordtype">unsigned</span> Idx = E-><a class="code" href="classclang_1_1UnaryOperator.html#a4fceff35ff6b7f186590155fa21df48b">getOpcode</a>() == <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa27e6ce45ef7fa78a3a6d6a7700d1802d">UO_Imag</a>;</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStructGEP(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(),</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>                                                   Idx, <span class="stringliteral">"idx"</span>),</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>                           ExprTy);</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>   }</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa8e13dc1c94cb3c4aec9526575bdd424d">UO_PreInc</a>:</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffade6bd9d0cc5c62a832da915f7e837562">UO_PreDec</a>: {</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1UnaryOperator.html#a64fdf148f4f40ae0a35e2bc7e0bfac10">getSubExpr</a>());</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>     <span class="keywordtype">bool</span> isInc = E-><a class="code" href="classclang_1_1UnaryOperator.html#a4fceff35ff6b7f186590155fa21df48b">getOpcode</a>() == <a class="code" href="namespaceclang.html#a8daaf3ab8b5c55053f6da47944e48fffa8e13dc1c94cb3c4aec9526575bdd424d">UO_PreInc</a>;</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> </div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>     <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a292ac10726adf5426212b5c6ee14d9bb">isAnyComplexType</a>())</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0f16adafc4f7f7bfc80dc2dba08a5564">EmitComplexPrePostIncDec</a>(E, LV, isInc, <span class="keyword">true</span><span class="comment">/*isPre*/</span>);</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a375a4746980d1b39f2315e92db7ec8fe">EmitScalarPrePostIncDec</a>(E, LV, isInc, <span class="keyword">true</span><span class="comment">/*isPre*/</span>);</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>     <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>   }</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>   }</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> }</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> </div>
+<div class="line"><a name="l01900"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a81829808e9f35c20760c6c16e41a0dbd"> 1900</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a81829808e9f35c20760c6c16e41a0dbd">CodeGenFunction::EmitStringLiteralLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1StringLiteral.html">StringLiteral</a> *E) {</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a396ff6eccf560fb925b31f7a9929fed4">GetAddrOfConstantStringFromLiteral</a>(E),</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>                         E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> }</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div>
+<div class="line"><a name="l01905"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a30a4ad7355fdf9755ec73f59f83da13b"> 1905</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a30a4ad7355fdf9755ec73f59f83da13b">CodeGenFunction::EmitObjCEncodeExprLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCEncodeExpr.html">ObjCEncodeExpr</a> *E) {</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a60757eaf49a35b362296871c3a260ab0">GetAddrOfConstantStringFromObjCEncode</a>(E),</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>                         E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> }</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> </div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="keyword">static</span> llvm::Constant*</div>
+<div class="line"><a name="l01911"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a0573b3197e9d63068b4742f123b491c2"> 1911</a></span> <a class="code" href="CGExpr_8cpp.html#a0573b3197e9d63068b4742f123b491c2">GetAddrOfConstantWideString</a>(StringRef Str,</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>                             <span class="keyword">const</span> <span class="keywordtype">char</span> *GlobalName,</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>                             <a class="code" href="classclang_1_1ASTContext.html" title="Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...">ASTContext</a> &<a class="code" href="ASTMatchFinder_8cpp.html#a779280869b9fac47a9bc391e7709171f">Context</a>,</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>                             <a class="code" href="classclang_1_1QualType.html">QualType</a> Ty, <a class="code" href="classclang_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="l01915"></a><span class="lineno"> 1915</span>                             <a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html">CodeGenModule</a> &CGM) {</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> </div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>   <a class="code" href="classclang_1_1StringLiteral.html">StringLiteral</a> *SL = <a class="code" href="classclang_1_1StringLiteral.html#a8707628d2fd939e14b14b1b3f499f64a">StringLiteral::Create</a>(Context,</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>                                             Str,</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>                                             <a class="code" href="classclang_1_1StringLiteral.html#a3be0aa06c87ed73880cce3487c40d460af78d80b058e4f2366161f59c458ffcb9">StringLiteral::Wide</a>,</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>                                             <span class="comment">/*Pascal = */</span><span class="keyword">false</span>,</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>                                             Ty, Loc);</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>   llvm::Constant *C = CGM.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#ac7972cf66efbbb2f95b42f42e63e0b37">GetConstantArrayFromStringLiteral</a>(SL);</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>   llvm::GlobalVariable *GV =</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>     <span class="keyword">new</span> llvm::GlobalVariable(CGM.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a908409c9231b015784ca008fd6bcb961">getModule</a>(), C->getType(),</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>                              !CGM.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abae1594027ce284ce5b7f06c66d24ea7">getLangOpts</a>().WritableStrings,</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>                              llvm::GlobalValue::PrivateLinkage,</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>                              C, GlobalName);</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> WideAlignment =</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>     Context.<a class="code" href="classclang_1_1ASTContext.html#a78053c06e4477f81b295cac200144fc4" title="Return the ABI-specified alignment of a (complete) type T, in characters.">getTypeAlignInChars</a>(Ty).<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>();</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>   GV->setAlignment(WideAlignment);</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>   <span class="keywordflow">return</span> GV;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> }</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> </div>
+<div class="line"><a name="l01934"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a739c1c997a301da4b0a0afa02174802d"> 1934</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="CGExpr_8cpp.html#a739c1c997a301da4b0a0afa02174802d">ConvertUTF8ToWideString</a>(<span class="keywordtype">unsigned</span> CharByteWidth, StringRef Source,</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>                                     <a class="code" href="classllvm_1_1SmallString.html">SmallString<32></a>& Target) {</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>   Target.resize(CharByteWidth * (Source.size() + 1));</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>   <span class="keywordtype">char</span> *ResultPtr = &Target[0];</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>   <span class="keyword">const</span> UTF8 *ErrorPtr;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>   <span class="keywordtype">bool</span> success = ConvertUTF8toWide(CharByteWidth, Source, ResultPtr, ErrorPtr);</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>   (void)success;</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>   assert(success);</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>   Target.resize(ResultPtr - &Target[0]);</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> </div>
+<div class="line"><a name="l01945"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7e1a5d2ce9e9b37cca2d24ec5557c86d"> 1945</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7e1a5d2ce9e9b37cca2d24ec5557c86d">CodeGenFunction::EmitPredefinedLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1PredefinedExpr.html" title="PredefinedExpr - [C99 6.4.2.2] - A predefined identifier such as func.">PredefinedExpr</a> *E) {</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>   <span class="keywordflow">switch</span> (E-><a class="code" href="classclang_1_1PredefinedExpr.html#a3bf41fb240534802584e70cd8f4edd30">getIdentType</a>()) {</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">EmitUnsupportedLValue</a>(E, <span class="stringliteral">"predefined expression"</span>);</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> </div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>   <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a63a6c07cbf9d1fd113a77d728c0ce72b">PredefinedExpr::Func</a>:</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>   <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a0d65b8179039a2da4571a8e78cf26585">PredefinedExpr::Function</a>:</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>   <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a887a6c4e6d464221415d589b84d3742d">PredefinedExpr::LFunction</a>:</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>   <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a4db1d92858c9789019b184fae2fc111a">PredefinedExpr::FuncDName</a>:</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>   <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a471dba9ecad152996c6a24a562b7892b">PredefinedExpr::PrettyFunction</a>: {</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>     <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50">PredefinedExpr::IdentType</a> IdentType = E-><a class="code" href="classclang_1_1PredefinedExpr.html#a3bf41fb240534802584e70cd8f4edd30">getIdentType</a>();</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>     std::string GlobalVarName;</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> </div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>     <span class="keywordflow">switch</span> (IdentType) {</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>     <span class="keywordflow">default</span>: llvm_unreachable(<span class="stringliteral">"Invalid type"</span>);</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a63a6c07cbf9d1fd113a77d728c0ce72b">PredefinedExpr::Func</a>:</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>       GlobalVarName = <span class="stringliteral">"__func__."</span>;</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a0d65b8179039a2da4571a8e78cf26585">PredefinedExpr::Function</a>:</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>       GlobalVarName = <span class="stringliteral">"__FUNCTION__."</span>;</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a4db1d92858c9789019b184fae2fc111a">PredefinedExpr::FuncDName</a>:</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>       GlobalVarName = <span class="stringliteral">"__FUNCDNAME__."</span>;</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a887a6c4e6d464221415d589b84d3742d">PredefinedExpr::LFunction</a>:</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>       GlobalVarName = <span class="stringliteral">"L__FUNCTION__."</span>;</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1PredefinedExpr.html#a6ba67c391b52ae36d1e6fb2173b35d50a471dba9ecad152996c6a24a562b7892b">PredefinedExpr::PrettyFunction</a>:</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>       GlobalVarName = <span class="stringliteral">"__PRETTY_FUNCTION__."</span>;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>     }</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> </div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>     StringRef FnName = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ade1be93e4c11e1945ef1c0d8bbc61ff8">CurFn</a>->getName();</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>     <span class="keywordflow">if</span> (FnName.startswith(<span class="stringliteral">"\01"</span>))</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>       FnName = FnName.substr(1);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     GlobalVarName += FnName;</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>     <span class="comment">// If this is outside of a function use the top level decl.</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Decl.html">Decl</a> *CurDecl = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a57b46a6624e733181105ee9c0eb39618" title="CurCodeDecl - This is the inner-most code context, which includes blocks.">CurCodeDecl</a>;</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>     <span class="keywordflow">if</span> (CurDecl == 0 || isa<VarDecl>(CurDecl))</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>       CurDecl = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#abd909fb01ef10cfd0244832a67b1dd64">getTranslationUnitDecl</a>();</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> </div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Type.html">Type</a> *ElemType = E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a8b0c686b2bf9ac23ea1cd8f5314de5f5">getArrayElementTypeNoTypeQual</a>();</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>     std::string FunctionName;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>     <span class="keywordflow">if</span> (isa<BlockDecl>(CurDecl)) {</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>       <span class="comment">// Blocks use the mangled function name.</span></div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>       <span class="comment">// FIXME: ComputeName should handle blocks.</span></div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>       FunctionName = FnName.str();</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isa<CapturedDecl>(CurDecl)) {</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>       <span class="comment">// For a captured statement, the function name is its enclosing</span></div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>       <span class="comment">// function name not the one compiler generated.</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>       FunctionName = <a class="code" href="classclang_1_1PredefinedExpr.html#a3c318ef01a2b227e51dc3dbece0a8f63">PredefinedExpr::ComputeName</a>(IdentType, CurDecl);</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>       FunctionName = <a class="code" href="classclang_1_1PredefinedExpr.html#a3c318ef01a2b227e51dc3dbece0a8f63">PredefinedExpr::ComputeName</a>(IdentType, CurDecl);</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>       assert(cast<ConstantArrayType>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>())->getSize() - 1 ==</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>                  FunctionName.size() &&</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>              <span class="stringliteral">"Computed __func__ length differs from type!"</span>);</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>     }</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>     llvm::Constant *C;</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>     <span class="keywordflow">if</span> (ElemType-><a class="code" href="classclang_1_1Type.html#a3014dfbf688469a7502d73ff2c6b4194">isWideCharType</a>()) {</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>       <a class="code" href="classllvm_1_1SmallString.html">SmallString<32></a> RawChars;</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>       <a class="code" href="CGExpr_8cpp.html#a739c1c997a301da4b0a0afa02174802d">ConvertUTF8ToWideString</a>(</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>           <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().getTypeSizeInChars(ElemType).getQuantity(),</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>           FunctionName, RawChars);</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>       C = <a class="code" href="CGExpr_8cpp.html#a0573b3197e9d63068b4742f123b491c2">GetAddrOfConstantWideString</a>(RawChars,</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>                                       GlobalVarName.c_str(),</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>                                       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(),</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>                                       E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(),</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>                                       E-><a class="code" href="classclang_1_1PredefinedExpr.html#aedb3c8713aed875117f2f47096ec6afc">getLocation</a>(),</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>                                       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>);</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>       C = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a2dee53e72ceb4a881d1afa41d9e04450">GetAddrOfConstantCString</a>(FunctionName,</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>                                        GlobalVarName.c_str(),</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>                                        1);</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="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(C, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>   }</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>   }</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> }</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment"></span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> <span class="comment">/// Emit a type description suitable for use by a runtime sanitizer library. The</span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="comment">/// format of a type descriptor is</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="comment">/// \code</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="comment">///   { i16 TypeKind, i16 TypeInfo }</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment">/// \endcode</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment">///</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment">/// followed by an array of i8 containing the type name. TypeKind is 0 for an</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="comment">/// integer, 1 for a floating point value, and -1 for anything else.</span></div>
+<div class="line"><a name="l02035"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674"> 2035</a></span> <span class="comment"></span>llvm::Constant *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5d3e36c8d37b4e4f5789f523108bf674" title="Emit a description of a type in a format suitable for passing to a runtime sanitizer handler...">CodeGenFunction::EmitCheckTypeDescriptor</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> T) {</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>   <span class="comment">// Only emit each type's descriptor once.</span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>   <span class="keywordflow">if</span> (llvm::Constant *C = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a86f794338ae83021ab6bd4d3c95b9faf">getTypeDescriptor</a>(T))</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>     <span class="keywordflow">return</span> C;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> </div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>   uint16_t TypeKind = -1;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>   uint16_t <a class="code" href="structTypeInfo.html">TypeInfo</a> = 0;</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> </div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>   <span class="keywordflow">if</span> (T-><a class="code" href="classclang_1_1Type.html#a8bde7a56623fd89e9efafde792c56dac">isIntegerType</a>()) {</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>     TypeKind = 0;</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>     TypeInfo = (llvm::Log2_32(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().getTypeSize(T)) << 1) |</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>                (T-><a class="code" href="classclang_1_1Type.html#accbf40bf016c5bc6dd5440b454d697b6">isSignedIntegerType</a>() ? 1 : 0);</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (T-><a class="code" href="classclang_1_1Type.html#ad8bb17d7b15f3d610afbdfe49e638220">isFloatingType</a>()) {</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>     TypeKind = 1;</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>     TypeInfo = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a3e16bd856974e4ac9710e0c507a60cee" title="Return the size of the specified (complete) type T, in bits.">getTypeSize</a>(T);</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>   }</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> </div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>   <span class="comment">// Format the type name as if for a diagnostic, including quotes and</span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>   <span class="comment">// optionally an 'aka'.</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<32></a> Buffer;</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a0be90fe263387e16942ad91f70b6af26">getDiags</a>().<a class="code" href="classclang_1_1DiagnosticsEngine.html#a18bcf8f7a4adf8d6ab238a03e4c84b41" title="Converts a diagnostic argument (as an intptr_t) into the string that represents it.">ConvertArgToString</a>(<a class="code" href="classclang_1_1DiagnosticsEngine.html#aa786a2c5b973455b81ecec595f7a9c7fa61b69df59ef7bfd4f080b771d24c7084" title="QualType.">DiagnosticsEngine::ak_qualtype</a>,</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>                                     (intptr_t)T.<a class="code" href="classclang_1_1QualType.html#a47bce6c72de199721d20f6e884ccded4">getAsOpaquePtr</a>(),</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>                                     0, 0, 0, 0, 0, 0, Buffer,</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>                                     <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<intptr_t></a>());</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> </div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>   llvm::Constant *Components[] = {</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt16(TypeKind), <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt16(TypeInfo),</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>     llvm::ConstantDataArray::getString(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), Buffer)</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>   };</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>   llvm::Constant *Descriptor = llvm::ConstantStruct::getAnon(Components);</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> </div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>   llvm::GlobalVariable *GV =</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>     <span class="keyword">new</span> llvm::GlobalVariable(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a908409c9231b015784ca008fd6bcb961">getModule</a>(), Descriptor->getType(),</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>                              <span class="comment">/*isConstant=*/</span><span class="keyword">true</span>,</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>                              llvm::GlobalVariable::PrivateLinkage,</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>                              Descriptor);</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>   GV->setUnnamedAddr(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> </div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>   <span class="comment">// Remember the descriptor for this type.</span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a9d302b8f90a4c7042e4949bc88beac54">setTypeDescriptor</a>(T, GV);</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> </div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>   <span class="keywordflow">return</span> GV;</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> </div>
+<div class="line"><a name="l02079"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab4991fe6ac7074a983161ec561d3372a"> 2079</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab4991fe6ac7074a983161ec561d3372a" title="Convert a value into a format suitable for passing to a runtime sanitizer handler.">CodeGenFunction::EmitCheckValue</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V) {</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>   llvm::Type *TargetTy = <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>;</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> </div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>   <span class="comment">// Floating-point types which fit into intptr_t are bitcast to integers</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>   <span class="comment">// and then passed directly (after zero-extension, if necessary).</span></div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>   <span class="keywordflow">if</span> (V->getType()->isFloatingPointTy()) {</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     <span class="keywordtype">unsigned</span> Bits = V->getType()->getPrimitiveSizeInBits();</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>     <span class="keywordflow">if</span> (Bits <= TargetTy->getIntegerBitWidth())</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>       V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(V, llvm::Type::getIntNTy(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(),</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>                                                          Bits));</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>   }</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> </div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>   <span class="comment">// Integers which fit in intptr_t are zero-extended and passed directly.</span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>   <span class="keywordflow">if</span> (V->getType()->isIntegerTy() &&</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>       V->getType()->getIntegerBitWidth() <= TargetTy->getIntegerBitWidth())</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateZExt(V, TargetTy);</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> </div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>   <span class="comment">// Pointers are passed directly, everything else is passed by address.</span></div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>   <span class="keywordflow">if</span> (!V->getType()->isPointerTy()) {</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Ptr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1c72e741c84049695bde11b7df94c332">CreateTempAlloca</a>(V->getType());</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStore(V, Ptr);</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>     V = Ptr;</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>   }</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreatePtrToInt(V, TargetTy);</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> }</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="comment"></span></div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> <span class="comment">/// \brief Emit a representation of a SourceLocation for passing to a handler</span></div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="comment">/// in a sanitizer runtime library. The format for this data is:</span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> <span class="comment">/// \code</span></div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="comment">///   struct SourceLocation {</span></div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> <span class="comment">///     const char *Filename;</span></div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> <span class="comment">///     int32_t Line, Column;</span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> <span class="comment">///   };</span></div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <span class="comment">/// \endcode</span></div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> <span class="comment">/// For an invalid SourceLocation, the Filename pointer is null.</span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a365b1957a3e5c4d666b1ecd777b86cc6"> 2114</a></span> <span class="comment"></span>llvm::Constant *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a365b1957a3e5c4d666b1ecd777b86cc6" title="Emit a description of a source location in a format suitable for passing to a runtime sanitizer handl...">CodeGenFunction::EmitCheckSourceLocation</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="l02115"></a><span class="lineno"> 2115</span>   <a class="code" href="classclang_1_1PresumedLoc.html" title="Represents an unpacked "presumed" location which can be presented to the user.">PresumedLoc</a> PLoc = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a091e2575135f7f9f1aeb25ba0090bfde">getSourceManager</a>().<a class="code" href="classclang_1_1SourceManager.html#a28f3fe716f6b9c504beb968f0eb8c17d" title="Returns the "presumed" location of a SourceLocation specifies.">getPresumedLoc</a>(Loc);</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> </div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>   llvm::Constant *Data[] = {</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>     PLoc.<a class="code" href="classclang_1_1PresumedLoc.html#a507bb1ade126b405a32b69d19c5cc4fa">isValid</a>() ? <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a2dee53e72ceb4a881d1afa41d9e04450">GetAddrOfConstantCString</a>(PLoc.<a class="code" href="classclang_1_1PresumedLoc.html#ad7b3e219f0b8f103d47bdb2516502298" title="Return the presumed filename of this location.">getFilename</a>(), <span class="stringliteral">".src"</span>)</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>                    : llvm::Constant::getNullValue(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a>),</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(PLoc.<a class="code" href="classclang_1_1PresumedLoc.html#a507bb1ade126b405a32b69d19c5cc4fa">isValid</a>() ? PLoc.<a class="code" href="classclang_1_1PresumedLoc.html#acfc1284e86ca48cdfcaf5d118c6abb30" title="Return the presumed line number of this location.">getLine</a>() : 0),</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.getInt32(PLoc.<a class="code" href="classclang_1_1PresumedLoc.html#a507bb1ade126b405a32b69d19c5cc4fa">isValid</a>() ? PLoc.<a class="code" href="classclang_1_1PresumedLoc.html#a2cb9e651c8183ff661a6243fa0f6bc1f" title="Return the presumed column number of this location.">getColumn</a>() : 0)</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>   };</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> </div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>   <span class="keywordflow">return</span> llvm::ConstantStruct::getAnon(Data);</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> }</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> </div>
+<div class="line"><a name="l02127"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a875a52f551ce966db02aaef2dae72c62"> 2127</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a875a52f551ce966db02aaef2dae72c62" title="Create a basic block that will call a handler function in a sanitizer runtime with the provided argum...">CodeGenFunction::EmitCheck</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Checked, StringRef CheckName,</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>                                 <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<llvm::Constant *></a> StaticArgs,</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>                                 <a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<llvm::Value *></a> DynamicArgs,</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>                                 <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349da" title="Specify under what conditions this check can be recovered.">CheckRecoverableKind</a> RecoverKind) {</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>   assert(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a> != &<a class="code" href="structclang_1_1SanitizerOptions.html#aae3a43719a4543c3add6c294504940a0" title="Cached set of sanitizer options with all sanitizers disabled.">SanitizerOptions::Disabled</a>);</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> </div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().SanitizeUndefinedTrapOnError) {</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>     assert (RecoverKind != <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daaf8ec8314d1aa3b70dc6d1604f5767d27" title="Runtime conditionally aborts, always need to support recovery.">CRK_AlwaysRecoverable</a> &&</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>             <span class="stringliteral">"Runtime call required for AlwaysRecoverable kind!"</span>);</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae35eb59c6498c00be30a765bee62d3fe" title="Create a basic block that will call the trap intrinsic, and emit a conditional branch to it...">EmitTrapCheck</a>(Checked);</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>   }</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> </div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>   llvm::BasicBlock *Cont = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"cont"</span>);</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> </div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>   llvm::BasicBlock *Handler = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"handler."</span> + CheckName);</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> </div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>   llvm::Instruction *Branch = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateCondBr(Checked, Cont, Handler);</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> </div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>   <span class="comment">// Give hint that we very much don't expect to execute the handler</span></div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>   <span class="comment">// Value chosen to match UR_NONTAKEN_WEIGHT, see BranchProbabilityInfo.cpp</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>   llvm::MDBuilder MDHelper(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>());</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>   llvm::MDNode *<a class="code" href="ASTMatchFinder_8cpp.html#a1dfddff6f4d91f415ffe4b9a6da5f489">Node</a> = MDHelper.createBranchWeights((1U << 20) - 1, 1);</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>   Branch->setMetadata(llvm::LLVMContext::MD_prof, Node);</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>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(Handler);</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> </div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>   llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>   llvm::GlobalValue *InfoPtr =</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>       <span class="keyword">new</span> llvm::GlobalVariable(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a908409c9231b015784ca008fd6bcb961">getModule</a>(), Info->getType(), <span class="keyword">false</span>,</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>                                llvm::GlobalVariable::PrivateLinkage, Info);</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>   InfoPtr->setUnnamedAddr(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> </div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Value *, 4></a> <a class="code" href="SemaOverload_8cpp.html#ab0970fce5a85028c7eac6fb99797fea5">Args</a>;</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Type *, 4></a> ArgTypes;</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>   Args.reserve(DynamicArgs.size() + 1);</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>   ArgTypes.reserve(DynamicArgs.size() + 1);</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> </div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>   <span class="comment">// Handler functions take an i8* pointing to the (handler-specific) static</span></div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>   <span class="comment">// information block, followed by a sequence of intptr_t arguments</span></div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>   <span class="comment">// representing operand values.</span></div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>   Args.push_back(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(InfoPtr, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a>));</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>   ArgTypes.push_back(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ac3ec7e3938996c5354dbee1a103ed4d2">Int8PtrTy</a>);</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>   <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0, n = DynamicArgs.size(); i != n; ++i) {</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>     Args.push_back(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab4991fe6ac7074a983161ec561d3372a" title="Convert a value into a format suitable for passing to a runtime sanitizer handler.">EmitCheckValue</a>(DynamicArgs[i]));</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>     ArgTypes.push_back(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>);</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> </div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>   <span class="keywordtype">bool</span> Recover = (RecoverKind == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daaf8ec8314d1aa3b70dc6d1604f5767d27" title="Runtime conditionally aborts, always need to support recovery.">CRK_AlwaysRecoverable</a>) ||</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>                  ((RecoverKind == <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daade9f755044677d5aa1ef967325abca54" title="Check supports recovering, allows user to specify which.">CRK_Recoverable</a>) &&</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>                    <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().SanitizeRecover);</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> </div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>   llvm::FunctionType *FnType =</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>     llvm::FunctionType::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#ad2e842be873196b0fab39b1479223209" title="void">VoidTy</a>, ArgTypes, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>   llvm::AttrBuilder B;</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>   <span class="keywordflow">if</span> (!Recover) {</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>     B.addAttribute(llvm::Attribute::NoReturn)</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>      .addAttribute(llvm::Attribute::NoUnwind);</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>   B.addAttribute(llvm::Attribute::UWTable);</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> </div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>   <span class="comment">// Checks that have two variants use a suffix to differentiate them</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>   <span class="keywordtype">bool</span> NeedsAbortSuffix = (RecoverKind != <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4f34b3f7004d2d19c609c90b3a7349daacde36f05d791b57ca53015f98090644f" title="Always terminate program execution if this check fails.">CRK_Unrecoverable</a>) &&</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>                            !<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().SanitizeRecover;</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>   std::string FunctionName = (<span class="stringliteral">"__ubsan_handle_"</span> + CheckName +</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>                               (NeedsAbortSuffix? <span class="stringliteral">"_abort"</span> : <span class="stringliteral">""</span>)).str();</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Fn =</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a776cff8c453bd698eae25f3edb82ac40">CreateRuntimeFunction</a>(FnType, FunctionName,</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>                               llvm::AttributeSet::get(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(),</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>                                               llvm::AttributeSet::FunctionIndex,</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>                                                       B));</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>   llvm::CallInst *HandlerCall = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a76d925109b30811e708f705a63541075">EmitNounwindRuntimeCall</a>(Fn, Args);</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>   <span class="keywordflow">if</span> (Recover) {</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBr(Cont);</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>     HandlerCall->setDoesNotReturn();</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateUnreachable();</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>   }</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> </div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(Cont);</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> }</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> </div>
+<div class="line"><a name="l02208"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae35eb59c6498c00be30a765bee62d3fe"> 2208</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae35eb59c6498c00be30a765bee62d3fe" title="Create a basic block that will call the trap intrinsic, and emit a conditional branch to it...">CodeGenFunction::EmitTrapCheck</a>(<a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Checked) {</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>   llvm::BasicBlock *Cont = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"cont"</span>);</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> </div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>   <span class="comment">// If we're optimizing, collapse all calls to trap down to just one per</span></div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>   <span class="comment">// function to save on code size.</span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>   <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().OptimizationLevel || !TrapBB) {</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>     TrapBB = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"trap"</span>);</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateCondBr(Checked, Cont, TrapBB);</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(TrapBB);</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *F = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a746e030a00d8dc22123b52c48120aad3">getIntrinsic</a>(llvm::Intrinsic::trap);</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>     llvm::CallInst *TrapCall = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateCall(F);</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>     TrapCall->setDoesNotReturn();</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>     TrapCall->setDoesNotThrow();</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateUnreachable();</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateCondBr(Checked, Cont, TrapBB);</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>   }</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> </div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(Cont);</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> }</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="comment"></span></div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="comment">/// isSimpleArrayDecayOperand - If the specified expr is a simple decay from an</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="comment">/// array to pointer, return the array subexpression.</span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#aa93d78edf57194da57380fd3a49f7c02"> 2231</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *<a class="code" href="CGExpr_8cpp.html#aa93d78edf57194da57380fd3a49f7c02">isSimpleArrayDecayOperand</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E) {</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>   <span class="comment">// If this isn't just an array->pointer decay, bail out.</span></div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1CastExpr.html">CastExpr</a> *CE = dyn_cast<<a class="code" href="classclang_1_1CastExpr.html">CastExpr</a>>(E);</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>   <span class="keywordflow">if</span> (CE == 0 || CE-><a class="code" href="classclang_1_1CastExpr.html#a9579ef9370fffd8c5e4bee485eac9265">getCastKind</a>() != <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca966388c17db29effd052ff1f5da7f64f">CK_ArrayToPointerDecay</a>)</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> </div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>   <span class="comment">// If this is a decay from variable width array, bail out.</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *SubExpr = CE-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>();</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>   <span class="keywordflow">if</span> (SubExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#af8518d4e36dad6c248aac75a3a169022">isVariableArrayType</a>())</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> </div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>   <span class="keywordflow">return</span> SubExpr;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> }</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> </div>
+<div class="line"><a name="l02245"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a160641085422d2b1055bc91f8fc0f2fd"> 2245</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a160641085422d2b1055bc91f8fc0f2fd">CodeGenFunction::EmitArraySubscriptExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ArraySubscriptExpr.html" title="ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.">ArraySubscriptExpr</a> *E,</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>                                                <span class="keywordtype">bool</span> Accessed) {</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>   <span class="comment">// The index must always be an integer, which is not an aggregate.  Emit it.</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#acc51394d086143bf3e2c93a73fcc2a85">getIdx</a>());</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> IdxTy  = E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#acc51394d086143bf3e2c93a73fcc2a85">getIdx</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>   <span class="keywordtype">bool</span> IdxSigned = IdxTy-><a class="code" href="classclang_1_1Type.html#ac1a93888d84731955cd5e95d6510aea6">isSignedIntegerOrEnumerationType</a>();</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> </div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2fdcc483973530909c21f658646f71b0" title="Sanitizer options to use for this function.">SanOpts</a>->ArrayBounds)</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3af4f663084adac7cb8dc910185c6812" title="Emit a check that Base points into an array object, which we can access at index Index. Accessed should be false if we this expression is used as an lvalue, for instance in "&Arr[Idx]".">EmitBoundsCheck</a>(E, E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>(), Idx, IdxTy, Accessed);</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>   <span class="comment">// If the base is a vector type, then we are forming a vector element lvalue</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>   <span class="comment">// with this subscript.</span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#aa19525a5a362d0b9b6792ca383889c12">isVectorType</a>()) {</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>     <span class="comment">// Emit the vector as an lvalue to get its address.</span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LHS = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>());</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>     assert(LHS.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>() && <span class="stringliteral">"Can only subscript lvalue vectors here!"</span>);</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>     Idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(Idx, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9b70851ea2ff034ca9a5443ce213a81c">Int32Ty</a>, IdxSigned, <span class="stringliteral">"vidx"</span>);</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a0374f31d8af8c1bcea502fa9acd107aa">LValue::MakeVectorElt</a>(LHS.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), Idx,</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>                                  E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), LHS.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>   }</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> </div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>   <span class="comment">// Extend or truncate the index type to 32 or 64-bits.</span></div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>   <span class="keywordflow">if</span> (Idx->getType() != <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>)</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>     Idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateIntCast(Idx, <a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9cce048bcd175a468127b4eb05c050d2">IntPtrTy</a>, IdxSigned, <span class="stringliteral">"idxprom"</span>);</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> </div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>   <span class="comment">// We know that the pointer points to a type of the correct size, unless the</span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>   <span class="comment">// size is a VLA or Objective-C interface.</span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Address = 0;</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> ArrayAlignment;</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1VariableArrayType.html">VariableArrayType</a> *vla =</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().getAsVariableArrayType(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>())) {</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>     <span class="comment">// The base must be a pointer, which is not an aggregate.  Emit</span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>     <span class="comment">// it.  It needs to be emitted first in case it's what captures</span></div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>     <span class="comment">// the VLA bounds.</span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>     Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>());</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> </div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>     <span class="comment">// The element count here is the total number of non-VLA elements.</span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *numElements = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aad5f5781bb8931ec79b2ef0946098c57">getVLASize</a>(vla).first;</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> </div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>     <span class="comment">// Effectively, the multiply by the VLA size is part of the GEP.</span></div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>     <span class="comment">// GEP indexes are signed, and scaling an index isn't permitted to</span></div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>     <span class="comment">// signed-overflow, so we use the same semantics for our explicit</span></div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>     <span class="comment">// multiply.  We suppress this if overflow is not undefined behavior.</span></div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().isSignedOverflowDefined()) {</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>       Idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateMul(Idx, numElements);</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>       Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateGEP(Address, Idx, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>       Idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateNSWMul(Idx, numElements);</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>       Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateInBoundsGEP(Address, Idx, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>     }</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCObjectType.html">ObjCObjectType</a> *OIT = E-><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_1ObjCObjectType.html">ObjCObjectType</a>>()){</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>     <span class="comment">// Indexing over an interface, as in "NSString *P; P[4];"</span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *InterfaceSize =</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>       llvm::ConstantInt::get(Idx->getType(),</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>           <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#ae8d8371f22bd850bced9b4b9ca848c4e" title="Return the size of the specified (complete) type T, in characters.">getTypeSizeInChars</a>(OIT).<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> </div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>     Idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateMul(Idx, InterfaceSize);</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> </div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>     <span class="comment">// The base must be a pointer, which is not an aggregate.  Emit it.</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1Base.html">Base</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>());</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>     Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa21b88eb12dee547d5a0919e7ff6b5e2" title="Emit a cast to void* in the appropriate address space.">EmitCastToVoidPtr</a>(Base);</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>     Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateGEP(Address, Idx, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>     Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(Address, Base->getType());</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *Array = <a class="code" href="CGExpr_8cpp.html#aa93d78edf57194da57380fd3a49f7c02">isSimpleArrayDecayOperand</a>(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>())) {</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>     <span class="comment">// If this is A[i] where A is an array, the frontend will have decayed the</span></div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>     <span class="comment">// base to be a ArrayToPointerDecay implicit cast.  While correct, it is</span></div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>     <span class="comment">// inefficient at -O0 to emit a "gep A, 0, 0" when codegen'ing it, then a</span></div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>     <span class="comment">// "gep x, i" here.  Emit one "gep A, 0, i".</span></div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>     assert(Array->getType()->isArrayType() &&</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>            <span class="stringliteral">"Array to pointer decay must have array source type!"</span>);</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> ArrayLV;</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>     <span class="comment">// For simple multidimensional array indexing, set the 'accessed' flag for</span></div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>     <span class="comment">// better bounds-checking of the base expression.</span></div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ArraySubscriptExpr.html" title="ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.">ArraySubscriptExpr</a> *ASE = dyn_cast<ArraySubscriptExpr>(Array))</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>       ArrayLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a160641085422d2b1055bc91f8fc0f2fd">EmitArraySubscriptExpr</a>(ASE, <span class="comment">/*Accessed*/</span> <span class="keyword">true</span>);</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>       ArrayLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(Array);</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *ArrayPtr = ArrayLV.getAddress();</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Zero = llvm::ConstantInt::get(<a class="code" href="structclang_1_1CodeGen_1_1CodeGenTypeCache.html#a9b70851ea2ff034ca9a5443ce213a81c">Int32Ty</a>, 0);</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="SemaOverload_8cpp.html#ab0970fce5a85028c7eac6fb99797fea5">Args</a>[] = { Zero, Idx };</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> </div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>     <span class="comment">// Propagate the alignment from the array itself to the result.</span></div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>     ArrayAlignment = ArrayLV.getAlignment();</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>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().isSignedOverflowDefined())</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>       Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateGEP(ArrayPtr, Args, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>       Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateInBoundsGEP(ArrayPtr, Args, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>     <span class="comment">// The base must be a pointer, which is not an aggregate.  Emit it.</span></div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1Base.html">Base</a> = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>());</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().<a class="code" href="classclang_1_1LangOptions.html#a906a9325edbef396ee4edefd8ce67dea">isSignedOverflowDefined</a>())</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>       Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateGEP(Base, Idx, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>       Address = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateInBoundsGEP(Base, Idx, <span class="stringliteral">"arrayidx"</span>);</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>   }</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> </div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> T = E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a3a0edf987679f04072a1243b6118add1">getPointeeType</a>();</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>   assert(!T.<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="l02344"></a><span class="lineno"> 2344</span>          <span class="stringliteral">"CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"</span>);</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> </div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> </div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>   <span class="comment">// Limit the alignment to that of the result type.</span></div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>   <span class="keywordflow">if</span> (!ArrayAlignment.<a class="code" href="classclang_1_1CharUnits.html#af39b99432339c76e577a5149b6c59e4e" title="isZero - Test whether the quantity equals zero.">isZero</a>()) {</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>     <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Align = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(T);</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>     ArrayAlignment = std::min(Align, ArrayAlignment);</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>     LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Address, T, ArrayAlignment);</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>     LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(Address, T);</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>   }</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> </div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>   LV.getQuals().setAddressSpace(E-><a class="code" href="classclang_1_1ArraySubscriptExpr.html#ad303686acb8af8aa3d7169ba7e15f9fd">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#adcf1751da775a8f0743e9d9c3a5a34a1" title="getAddressSpace - Return the address space of this type.">getAddressSpace</a>());</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> </div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().ObjC1 &&</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().getGC() != <a class="code" href="classclang_1_1LangOptions.html#a01202ff51e7f9dbf39a447360d0a3a84ab62653320d5d7633c47854b73fe5d93d">LangOptions::NonGC</a>) {</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>     LV.setNonGC(!E-><a class="code" href="classclang_1_1Expr.html#a35da34a8ae0eff1a6f73b38d7a68a26b">isOBJCGCCandidate</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>()));</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), E, LV);</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>   }</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>   <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> }</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> </div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l02368"></a><span class="lineno"><a class="code" href="CGExpr_8cpp.html#a304ee35e40bf5115594b1b950e88071b"> 2368</a></span> llvm::Constant *<a class="code" href="CGExpr_8cpp.html#a304ee35e40bf5115594b1b950e88071b">GenerateConstantVector</a>(<a class="code" href="namespaceclang_1_1CodeGen.html#a5b4df39d75df3cedee71cc42402cc621">CGBuilderTy</a> &<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>,</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>                                        <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<unsigned></a> &Elts) {</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant*, 4></a> CElts;</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Elts.size(); i != e; ++i)</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>     CElts.push_back(Builder.getInt32(Elts[i]));</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> </div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>   <span class="keywordflow">return</span> llvm::ConstantVector::get(CElts);</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> }</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> </div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab6062042f3c1e4ad3d20df6988113bbd">CodeGenFunction::</a></div>
+<div class="line"><a name="l02378"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab6062042f3c1e4ad3d20df6988113bbd"> 2378</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab6062042f3c1e4ad3d20df6988113bbd">EmitExtVectorElementExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ExtVectorElementExpr.html">ExtVectorElementExpr</a> *E) {</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>   <span class="comment">// Emit the base vector as an l-value.</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1Base.html">Base</a>;</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> </div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>   <span class="comment">// ExtVectorElementExpr's base can either be a vector or pointer to vector.</span></div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#ac0277f87f737b15372e208542b91713d">isArrow</a>()) {</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>     <span class="comment">// If it is a pointer to a vector, emit the address and form an lvalue with</span></div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>     <span class="comment">// it.</span></div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Ptr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>());</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1PointerType.html">PointerType</a> *PT = E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>()-><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_1PointerType.html">PointerType</a>>();</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>     Base = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Ptr, PT->getPointeeType());</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>     Base.getQuals().removeObjCGCAttr();</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#ae5788e69a4c1d2d1b1e5ddaa4d525e22">isGLValue</a>()) {</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>     <span class="comment">// Otherwise, if the base is an lvalue ( as in the case of foo.x.x),</span></div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>     <span class="comment">// emit the base as an lvalue.</span></div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>     assert(E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#aa19525a5a362d0b9b6792ca383889c12">isVectorType</a>());</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>     Base = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>());</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>     <span class="comment">// Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such.</span></div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>     assert(E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#aa19525a5a362d0b9b6792ca383889c12">isVectorType</a>() &&</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>            <span class="stringliteral">"Result must be a vector"</span>);</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Vec = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>());</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> </div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>     <span class="comment">// Store the vector to memory (because LValue wants an address).</span></div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *VecMem = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a47e5345241bbd0554790bef95ea40f46">CreateMemTemp</a>(E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStore(Vec, VecMem);</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>     Base = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(VecMem, E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a28e57f22fc58890b985214c797dacadf">getBase</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</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> </div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</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> =</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>     E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#a0dbe9e2f24e3e7d8a3aaae1e69b0beeb">withCVRQualifiers</a>(Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#a19c0ea3017053bd2778611dd129a9b74">getCVRQualifiers</a>());</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>   <span class="comment">// Encode the element access list into a vector of unsigned indices.</span></div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<unsigned, 4></a> Indices;</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>   E-><a class="code" href="classclang_1_1ExtVectorElementExpr.html#a182bf9564a565711571f7d5b9f60a88c" title="getEncodedElementAccess - We encode the fields as a llvm ConstantArray.">getEncodedElementAccess</a>(Indices);</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> </div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>   <span class="keywordflow">if</span> (Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>()) {</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>     llvm::Constant *CV = <a class="code" href="CGExpr_8cpp.html#a304ee35e40bf5115594b1b950e88071b">GenerateConstantVector</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>, Indices);</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a95758b4db9ccff77e12bc24967109873">LValue::MakeExtVectorElt</a>(Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), CV, <a class="code" href="namespaceclang_1_1ast__matchers.html#a82efb51f28681d561f9ce42fecf09d4b" title="Matches Types in the clang AST.">type</a>,</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>                                     Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</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>   assert(Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ac82d74f9f348575e1fdb85b4be853014">isExtVectorElt</a>() && <span class="stringliteral">"Can only subscript lvalue vec elts here!"</span>);</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>   llvm::Constant *BaseElts = Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d028a61c96b0e33a15735e6c9c28314">getExtVectorElts</a>();</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<llvm::Constant *, 4></a> CElts;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> </div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = Indices.size(); i != e; ++i)</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>     CElts.push_back(BaseElts->getAggregateElement(Indices[i]));</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>   llvm::Constant *CV = llvm::ConstantVector::get(CElts);</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a95758b4db9ccff77e12bc24967109873">LValue::MakeExtVectorElt</a>(Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2e45cc2045084c12a15c503b7c1b4e8b">getExtVectorAddr</a>(), CV, <a class="code" href="namespaceclang_1_1ast__matchers.html#a82efb51f28681d561f9ce42fecf09d4b" title="Matches Types in the clang AST.">type</a>,</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>                                   Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> }</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> </div>
+<div class="line"><a name="l02431"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae3b2616ff8e7d89d35c06848b68aacb3"> 2431</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae3b2616ff8e7d89d35c06848b68aacb3">CodeGenFunction::EmitMemberExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1MemberExpr.html">MemberExpr</a> *E) {</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>   <a class="code" href="classclang_1_1Expr.html">Expr</a> *BaseExpr = E-><a class="code" href="classclang_1_1MemberExpr.html#ade0c09aefce7fca4cfd671cd96a87083">getBase</a>();</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> </div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>   <span class="comment">// If this is s.x, emit s as an lvalue.  If it is s->x, emit s as a scalar.</span></div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> BaseLV;</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1MemberExpr.html#a22d0072d3f57ed584f03e37d9dd0dc34">isArrow</a>()) {</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Ptr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(BaseExpr);</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> PtrTy = BaseExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a3a0edf987679f04072a1243b6118add1">getPointeeType</a>();</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abcdc546762ac7c5e06fc043cb509106a" title="Emit a check that V is the address of storage of the appropriate size and alignment for an object of ...">EmitTypeCheck</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a5f3beb3b33024b2a291a98792dc57ab4">TCK_MemberAccess</a>, E-><a class="code" href="classclang_1_1MemberExpr.html#afdd9a426ed2957fa1756812fd96d3b20">getExprLoc</a>(), Ptr, PtrTy);</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>     BaseLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(Ptr, PtrTy);</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>   } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>     BaseLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acfb6c861f8e1ac9383bf54b05b5292cd" title="Same as EmitLValue but additionally we generate checking code to guard against undefined behavior...">EmitCheckedLValue</a>(BaseExpr, <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a5f3beb3b33024b2a291a98792dc57ab4">TCK_MemberAccess</a>);</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>   <a class="code" href="classclang_1_1NamedDecl.html">NamedDecl</a> *ND = E-><a class="code" href="classclang_1_1MemberExpr.html#a36cc50d42ad5ca5a4e52b493aa24e6f1" title="Retrieve the member declaration to which this expression refers.">getMemberDecl</a>();</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *Field = dyn_cast<FieldDecl>(ND)) {</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">EmitLValueForField</a>(BaseLV, Field);</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>     <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), E, LV);</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>     <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>   }</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> </div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<VarDecl>(ND))</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>     <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#aaaa7d0104d3b659b9999c54008a75328">EmitGlobalVarDeclLValue</a>(*<span class="keyword">this</span>, E, VD);</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> </div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = dyn_cast<FunctionDecl>(ND))</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>     <span class="keywordflow">return</span> <a class="code" href="CGExpr_8cpp.html#aef783641a79deeac5eba605d4929d612">EmitFunctionDeclLValue</a>(*<span class="keyword">this</span>, E, FD);</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>   llvm_unreachable(<span class="stringliteral">"Unhandled member declaration!"</span>);</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> }</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> <span class="comment"></span></div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> <span class="comment">/// Given that we are currently emitting a lambda, emit an l-value for</span></div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> <span class="comment">/// one of its members.</span></div>
+<div class="line"><a name="l02462"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abe8c1b279bf1d1f6b10e72f394dddd25"> 2462</a></span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abe8c1b279bf1d1f6b10e72f394dddd25">CodeGenFunction::EmitLValueForLambdaField</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *Field) {</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>   assert(cast<CXXMethodDecl>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a57b46a6624e733181105ee9c0eb39618" title="CurCodeDecl - This is the inner-most code context, which includes blocks.">CurCodeDecl</a>)->getParent()-><a class="code" href="ItaniumMangle_8cpp.html#a57ebf33b7c556f4682e4d9928ebe9c8f">isLambda</a>());</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>   assert(cast<CXXMethodDecl>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a57b46a6624e733181105ee9c0eb39618" title="CurCodeDecl - This is the inner-most code context, which includes blocks.">CurCodeDecl</a>)->getParent() == Field-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>());</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> LambdaTagType =</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(Field-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>());</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LambdaLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac85064af11c2b350b51e373aa33f3f3e">MakeNaturalAlignAddrLValue</a>(CXXABIThisValue, LambdaTagType);</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">EmitLValueForField</a>(LambdaLV, Field);</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> </div>
+<div class="line"><a name="l02471"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000"> 2471</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">CodeGenFunction::EmitLValueForField</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> base,</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>                                            <span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *field) {</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>   <span class="keywordflow">if</span> (field-><a class="code" href="classclang_1_1FieldDecl.html#af8c123e193d426f26496c15e2f168a49" title="isBitfield - Determines whether this field is a bitfield.">isBitField</a>()) {</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1CodeGen_1_1CGRecordLayout.html">CGRecordLayout</a> &RL =</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a1325760f10142c1da8521b53734858ef">getTypes</a>().<a class="code" href="classclang_1_1CodeGen_1_1CodeGenTypes.html#a917013c470207686c04a181aa2a73b5f" title="getCGRecordLayout - Return record layout info for the given record decl.">getCGRecordLayout</a>(field-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>());</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>     <span class="keyword">const</span> <a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html" title="Structure with information about how a bitfield should be accessed.">CGBitFieldInfo</a> &Info = RL.<a class="code" href="classclang_1_1CodeGen_1_1CGRecordLayout.html#a62dd98b26b76f667df40ad64035c38e3" title="Return the BitFieldInfo that corresponds to the field FD.">getBitFieldInfo</a>(field);</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="SemaOverload_8cpp.html#a561f2d973ed74723ce0b1e1165c31804">Addr</a> = base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>     <span class="keywordtype">unsigned</span> Idx = RL.<a class="code" href="classclang_1_1CodeGen_1_1CGRecordLayout.html#a8c46d13c10ccd30803664fcd83a65a0f" title="Return llvm::StructType element number that corresponds to the field FD.">getLLVMFieldNo</a>(field);</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>     <span class="keywordflow">if</span> (Idx != 0)</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>       <span class="comment">// For structs, we GEP to the field that the record layout suggests.</span></div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>       Addr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStructGEP(Addr, Idx, field-><a class="code" href="classclang_1_1NamedDecl.html#aaf790590f634520a99e0b45699fc45c3">getName</a>());</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>     <span class="comment">// Get the access type.</span></div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>     llvm::Type *PtrTy = llvm::Type::getIntNPtrTy(</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3ab38e48e9cabd4b9b64555c6c825f06">getLLVMContext</a>(), Info.<a class="code" href="structclang_1_1CodeGen_1_1CGBitFieldInfo.html#ad53e4a88f644dc36a387078e3a12526a">StorageSize</a>,</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a4a62f428c7e3d80e67885383b9263054">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#aed2e4aedb5a9fafd8bd586349f1b9f6f">getTargetAddressSpace</a>(base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01d08898a1636d6cb5d3489aafbc2ca1">getType</a>()));</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>     <span class="keywordflow">if</span> (Addr->getType() != PtrTy)</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>       Addr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(Addr, PtrTy);</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> </div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> fieldType =</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>       field-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>().<a class="code" href="classclang_1_1QualType.html#a0dbe9e2f24e3e7d8a3aaae1e69b0beeb">withCVRQualifiers</a>(base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5a6efbdabc3f410448416456a6bc962e">getVRQualifiers</a>());</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html#aa8d0eeb02231b31ab9252b8132d40b67" title="Create a new object to represent a bit-field access.">LValue::MakeBitfield</a>(Addr, Info, fieldType, base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>   }</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="keyword">const</span> <a class="code" href="classclang_1_1RecordDecl.html">RecordDecl</a> *rec = field-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>();</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</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> = field-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> alignment = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(field);</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> </div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>   <span class="comment">// FIXME: It should be impossible to have an LValue without alignment for a</span></div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>   <span class="comment">// complete type.</span></div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>   <span class="keywordflow">if</span> (!base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#af39b99432339c76e577a5149b6c59e4e" title="isZero - Test whether the quantity equals zero.">isZero</a>())</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>     alignment = std::min(alignment, base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> </div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>   <span class="keywordtype">bool</span> mayAlias = rec-><a class="code" href="classclang_1_1Decl.html#ac60cc8b34313e03a5c40277c5c5ad61b">hasAttr</a><<a class="code" href="classclang_1_1MayAliasAttr.html">MayAliasAttr</a>>();</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> </div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *addr = base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>   <span class="keywordtype">unsigned</span> cvr = base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5a6efbdabc3f410448416456a6bc962e">getVRQualifiers</a>();</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>   <span class="keywordtype">bool</span> TBAAPath = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a054eb00391038519d37236032f1ebfe5">getCodeGenOpts</a>().StructPathTBAA;</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>   <span class="keywordflow">if</span> (rec-><a class="code" href="classclang_1_1TagDecl.html#a76233fd9169fc9bfa27603ad5477f02a">isUnion</a>()) {</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>     <span class="comment">// For unions, there is no pointer adjustment.</span></div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>     assert(!type-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>() && <span class="stringliteral">"union has reference member"</span>);</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>     <span class="comment">// TODO: handle path-aware TBAA for union.</span></div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>     TBAAPath = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>     <span class="comment">// For structs, we GEP to the field that the record layout suggests.</span></div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>     <span class="keywordtype">unsigned</span> idx = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a1325760f10142c1da8521b53734858ef">getTypes</a>().<a class="code" href="classclang_1_1CodeGen_1_1CodeGenTypes.html#a917013c470207686c04a181aa2a73b5f" title="getCGRecordLayout - Return record layout info for the given record decl.">getCGRecordLayout</a>(rec).<a class="code" href="classclang_1_1CodeGen_1_1CGRecordLayout.html#a8c46d13c10ccd30803664fcd83a65a0f" title="Return llvm::StructType element number that corresponds to the field FD.">getLLVMFieldNo</a>(field);</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>     addr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStructGEP(addr, idx, field-><a class="code" href="classclang_1_1NamedDecl.html#aaf790590f634520a99e0b45699fc45c3">getName</a>());</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> </div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>     <span class="comment">// If this is a reference field, load the reference right now.</span></div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1ReferenceType.html">ReferenceType</a> *refType = type-><a class="code" href="classclang_1_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1ReferenceType.html">ReferenceType</a>>()) {</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>       llvm::LoadInst *load = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(addr, <span class="stringliteral">"ref"</span>);</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>       <span class="keywordflow">if</span> (cvr & <a class="code" href="classclang_1_1Qualifiers.html#a2754b754fd8a09705c060dc7b48badfea112191d3a4ad9cbd57f138a0c95e9f6f">Qualifiers::Volatile</a>) load->setVolatile(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>       load->setAlignment(alignment.<a class="code" href="classclang_1_1CharUnits.html#a09546c4bc2fefb3cb4d964eb9f25d33a" title="getQuantity - Get the raw integer representation of this quantity.">getQuantity</a>());</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> </div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>       <span class="comment">// Loading the reference will disable path-aware TBAA.</span></div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>       TBAAPath = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>       <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a0b6107db6b1bfe6b38a3362b98f55d02">shouldUseTBAA</a>()) {</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>         llvm::MDNode *tbaa;</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>         <span class="keywordflow">if</span> (mayAlias)</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>           tbaa = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a21fb16d28b597ab139093fe506be8831">getTBAAInfo</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().CharTy);</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>           tbaa = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a21fb16d28b597ab139093fe506be8831">getTBAAInfo</a>(type);</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>         <span class="keywordflow">if</span> (tbaa)</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>           <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a2bc7c2c5b15bdefaf8aba49a85c626a9">DecorateInstruction</a>(load, tbaa);</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>       }</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> </div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>       addr = load;</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>       mayAlias = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>       type = refType-><a class="code" href="classclang_1_1Type.html#a3a0edf987679f04072a1243b6118add1">getPointeeType</a>();</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>       <span class="keywordflow">if</span> (type-><a class="code" href="classclang_1_1Type.html#a6d84e779575f1e510f7ddc98119662bd" title="Def If non-NULL, and the type refers to some kind of declaration that can be completed (such as a C s...">isIncompleteType</a>())</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>         alignment = <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a>();</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>         alignment = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(type);</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>       cvr = 0; <span class="comment">// qualifiers don't recursively apply to referencee</span></div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>     }</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>   }</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> </div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>   <span class="comment">// Make sure that the address is pointing to the right type.  This is critical</span></div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>   <span class="comment">// for both unions and structs.  A union needs a bitcast, a struct element</span></div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>   <span class="comment">// will need a bitcast if the LLVM type laid out doesn't match the desired</span></div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>   <span class="comment">// type.</span></div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>   addr = <a class="code" href="CGExpr_8cpp.html#a3e8afbc1126d928fcf07c78b916e71cd">EmitBitCastOfLValueToProperType</a>(*<span class="keyword">this</span>, addr,</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>                                          <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a1325760f10142c1da8521b53734858ef">getTypes</a>().<a class="code" href="classclang_1_1CodeGen_1_1CodeGenTypes.html#a9e549d382da897b9d23ed3e2c65e6cf7">ConvertTypeForMem</a>(type),</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>                                          field-><a class="code" href="classclang_1_1NamedDecl.html#aaf790590f634520a99e0b45699fc45c3">getName</a>());</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> </div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>   <span class="keywordflow">if</span> (field-><a class="code" href="classclang_1_1Decl.html#ac60cc8b34313e03a5c40277c5c5ad61b">hasAttr</a><<a class="code" href="classclang_1_1AnnotateAttr.html">AnnotateAttr</a>>())</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>     addr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab096b0cfc774575f2460e6b4a00aaa7b">EmitFieldAnnotations</a>(field, addr);</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> </div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(addr, type, alignment);</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>   LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#a2da3a31143e2e9ac517bc0dcb04f311e">addCVRQualifiers</a>(cvr);</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>   <span class="keywordflow">if</span> (TBAAPath) {</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1ASTRecordLayout.html">ASTRecordLayout</a> &Layout =</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a47d9de77f967abb78dd8d1b8228a0d2a" title="Get or compute information about the layout of the specified record (struct/union/class) D...">getASTRecordLayout</a>(field-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>());</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>     <span class="comment">// Set the base type to be the base type of the base LValue and</span></div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>     <span class="comment">// update offset to be relative to the base type.</span></div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a11118d7fc28a819688459e6c0927c528">setTBAABaseType</a>(mayAlias ? <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().CharTy : base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#ab3a49cd3fecd60bd7aae1060b7546e71">getTBAABaseType</a>());</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#aba0bb102e75fd022561dd47260f557b0">setTBAAOffset</a>(mayAlias ? 0 : base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5d4615def80ca61871e29396d02c3d1f">getTBAAOffset</a>() +</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>                      Layout.<a class="code" href="classclang_1_1ASTRecordLayout.html#a5469e46f4a69644ac8747cef95095f3a">getFieldOffset</a>(field-><a class="code" href="classclang_1_1FieldDecl.html#a791f9f1096135e185996c5ba65491863">getFieldIndex</a>()) /</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>                                            <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#ac347a9a51b589a7f135c909692ef582e" title="Return the size of the character type, in bits.">getCharWidth</a>());</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>   }</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> </div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>   <span class="comment">// __weak attribute on a field is ignored.</span></div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>   <span class="keywordflow">if</span> (LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#a58cb84e55c79e911da64eecc5a2d3282">getObjCGCAttr</a>() == <a class="code" href="classclang_1_1Qualifiers.html#ac385e8f4b76a81b9668d05335e62308ead5594339da5918c05fdb973cec934f22">Qualifiers::Weak</a>)</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a046d8d562af26daba3ed3b781ba5ff54">getQuals</a>().<a class="code" href="classclang_1_1Qualifiers.html#a603b7e8eeb31d10e73c757eb4a7ca813">removeObjCGCAttr</a>();</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> </div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>   <span class="comment">// Fields of may_alias structs act like 'char' for TBAA purposes.</span></div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>   <span class="comment">// FIXME: this should get propagated down through anonymous structs</span></div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>   <span class="comment">// and unions.</span></div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>   <span class="keywordflow">if</span> (mayAlias && LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a01be51a35aebc758470218ae27e75694">getTBAAInfo</a>())</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>     LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a1c806c330019f3de25348ec80e895613">setTBAAInfo</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a21fb16d28b597ab139093fe506be8831">getTBAAInfo</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().CharTy));</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>   <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> }</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> </div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a></div>
+<div class="line"><a name="l02585"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8e2d33cb4583cb128c964a56c1ebd141"> 2585</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8e2d33cb4583cb128c964a56c1ebd141">CodeGenFunction::EmitLValueForFieldInitialization</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1Base.html">Base</a>,</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>                                                   <span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *Field) {</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> FieldType = Field-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span> </div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>   <span class="keywordflow">if</span> (!FieldType-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>())</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">EmitLValueForField</a>(Base, Field);</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> </div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1CodeGen_1_1CGRecordLayout.html">CGRecordLayout</a> &RL =</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a1325760f10142c1da8521b53734858ef">getTypes</a>().<a class="code" href="classclang_1_1CodeGen_1_1CodeGenTypes.html#a917013c470207686c04a181aa2a73b5f" title="getCGRecordLayout - Return record layout info for the given record decl.">getCGRecordLayout</a>(Field-><a class="code" href="classclang_1_1FieldDecl.html#a3a28e1eb11c273ba8d964a990ac116d6">getParent</a>());</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>   <span class="keywordtype">unsigned</span> idx = RL.<a class="code" href="classclang_1_1CodeGen_1_1CGRecordLayout.html#a8c46d13c10ccd30803664fcd83a65a0f" title="Return llvm::StructType element number that corresponds to the field FD.">getLLVMFieldNo</a>(Field);</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateStructGEP(Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), idx);</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>   assert(!FieldType.<a class="code" href="classclang_1_1QualType.html#aefb685eda769e5faf7f058203eedce93" title="getObjCGCAttr - Returns gc attribute of this type.">getObjCGCAttr</a>() && <span class="stringliteral">"fields cannot have GC attrs"</span>);</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> </div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>   <span class="comment">// Make sure that the address is pointing to the right type.  This is critical</span></div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>   <span class="comment">// for both unions and structs.  A union needs a bitcast, a struct element</span></div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>   <span class="comment">// will need a bitcast if the LLVM type laid out doesn't match the desired</span></div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>   <span class="comment">// type.</span></div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>   llvm::Type *llvmType = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab96689ae1b68ca38dd3c382f54bcbcd7">ConvertTypeForMem</a>(FieldType);</div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>   V = <a class="code" href="CGExpr_8cpp.html#a3e8afbc1126d928fcf07c78b916e71cd">EmitBitCastOfLValueToProperType</a>(*<span class="keyword">this</span>, V, llvmType, Field-><a class="code" href="classclang_1_1NamedDecl.html#aaf790590f634520a99e0b45699fc45c3">getName</a>());</div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> </div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>   <a class="code" href="classclang_1_1CharUnits.html">CharUnits</a> Alignment = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</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>(Field);</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">// FIXME: It should be impossible to have an LValue without alignment for a</span></div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>   <span class="comment">// complete type.</span></div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>   <span class="keywordflow">if</span> (!Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>().<a class="code" href="classclang_1_1CharUnits.html#af39b99432339c76e577a5149b6c59e4e" title="isZero - Test whether the quantity equals zero.">isZero</a>())</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>     Alignment = std::min(Alignment, Base.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a2d35987e18fbcfd14728b22c04c04bf4">getAlignment</a>());</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> </div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, FieldType, Alignment);</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> }</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span> </div>
+<div class="line"><a name="l02615"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a330d7a5e208d7175e508f477528a2163"> 2615</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a330d7a5e208d7175e508f477528a2163">CodeGenFunction::EmitCompoundLiteralLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a> *E){</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1CompoundLiteralExpr.html#ad57cda2056b141f75cc33da9ae7db769">isFileScope</a>()) {</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *GlobalPtr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a4bfe6b11e2c6572563b4a7139efd7067">GetAddrOfConstantCompoundLiteral</a>(E);</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(GlobalPtr, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>   }</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#ac4d6f4a6e62d6f7d21a8aa082fd68257" title="Whether this type is a variably-modified type (C99 6.7.5).">isVariablyModifiedType</a>())</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>     <span class="comment">// make sure to emit the VLA size.</span></div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af5ebf447ad95c736942c95f4206b2497">EmitVariablyModifiedType</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> </div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *DeclPtr = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a47e5345241bbd0554790bef95ea40f46">CreateMemTemp</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <span class="stringliteral">".compoundliteral"</span>);</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *InitExpr = E-><a class="code" href="classclang_1_1CompoundLiteralExpr.html#a58a7892a6b8a634633af52490dc33879">getInitializer</a>();</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> Result = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(DeclPtr, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> </div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#af69d1d3fe662be6786b76104985ed2ea">EmitAnyExprToMem</a>(InitExpr, DeclPtr, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#a4a3d75cf019a2e769498ef8d6878888b" title="Retrieve the set of qualifiers applied to this type.">getQualifiers</a>(),</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>                    <span class="comment">/*Init*/</span> <span class="keyword">true</span>);</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> </div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>   <span class="keywordflow">return</span> Result;</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> </div>
+<div class="line"><a name="l02634"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a139735b59f02e4eddc367257548d0ec5"> 2634</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a139735b59f02e4eddc367257548d0ec5">CodeGenFunction::EmitInitListLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1InitListExpr.html" title="Describes an C or C++ initializer list.">InitListExpr</a> *E) {</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>   <span class="keywordflow">if</span> (!E-><a class="code" href="classclang_1_1Expr.html#ae5788e69a4c1d2d1b1e5ddaa4d525e22">isGLValue</a>())</div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>     <span class="comment">// Initializing an aggregate temporary in C++11: T{...}.</span></div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a77ac4a960c1c6a2e758738423648ce80">EmitAggExprToLValue</a>(E);</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span> </div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>   <span class="comment">// An lvalue initializer list must be initializing a reference.</span></div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>   assert(E-><a class="code" href="classclang_1_1InitListExpr.html#ab1b7d5327a3ddd189cd8ef37f346aba4">getNumInits</a>() == 1 && <span class="stringliteral">"reference init with multiple values"</span>);</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1InitListExpr.html#a64bef27da665f05c662d2842ad683fd2">getInit</a>(0));</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> }</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> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0ea992f4ddefae2a65642412be215003">CodeGenFunction::</a></div>
+<div class="line"><a name="l02645"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0ea992f4ddefae2a65642412be215003"> 2645</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0ea992f4ddefae2a65642412be215003">EmitConditionalOperatorLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1AbstractConditionalOperator.html">AbstractConditionalOperator</a> *<a class="code" href="namespaceclang_1_1ast__matchers.html#a62d0b4c2a483d355a4d740ded606188f" title="Matches expressions.">expr</a>) {</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>   <span class="keywordflow">if</span> (!expr-><a class="code" href="classclang_1_1Expr.html#ae5788e69a4c1d2d1b1e5ddaa4d525e22">isGLValue</a>()) {</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>     <span class="comment">// ?: here should be an aggregate.</span></div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>     assert(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#adb210db7ab6920236d4403eaca7d663b">hasAggregateEvaluationKind</a>(expr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()) &&</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>            <span class="stringliteral">"Unexpected conditional operator!"</span>);</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a77ac4a960c1c6a2e758738423648ce80">EmitAggExprToLValue</a>(expr);</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>   }</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span> </div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1OpaqueValueMapping.html" title="An RAII object to set (and then clear) a mapping for an OpaqueValueExpr.">OpaqueValueMapping</a> binding(*<span class="keyword">this</span>, expr);</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span> </div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *condExpr = expr-><a class="code" href="classclang_1_1AbstractConditionalOperator.html#aeffaff2841ac6c51481c62dbaa6da068">getCond</a>();</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>   <span class="keywordtype">bool</span> CondExprBool;</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2790a6f4abb2cac9b21d8802d8ae4e87">ConstantFoldsToSimpleInteger</a>(condExpr, CondExprBool)) {</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *live = expr-><a class="code" href="classclang_1_1AbstractConditionalOperator.html#aefd0046134a76b3b5d4b517d5ad3b7c8">getTrueExpr</a>(), *dead = expr-><a class="code" href="classclang_1_1AbstractConditionalOperator.html#a1b8c4e1f971e272272a329653153e8c1">getFalseExpr</a>();</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>     <span class="keywordflow">if</span> (!CondExprBool) std::swap(live, dead);</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span> </div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>     <span class="keywordflow">if</span> (!<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a16d5796516e60d010f4de5b0dd44889c">ContainsLabel</a>(dead))</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(live);</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>   }</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span> </div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>   llvm::BasicBlock *lhsBlock = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"cond.true"</span>);</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>   llvm::BasicBlock *rhsBlock = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"cond.false"</span>);</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>   llvm::BasicBlock *contBlock = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9d442ba1c516ff4a2fbf1e118359cb52" title="createBasicBlock - Create an LLVM basic block.">createBasicBlock</a>(<span class="stringliteral">"cond.end"</span>);</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span> </div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConditionalEvaluation.html" title="An object to manage conditionally-evaluated expressions.">ConditionalEvaluation</a> eval(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ba4454b7714d95e6eb97d30e299de61">EmitBranchOnBoolExpr</a>(condExpr, lhsBlock, rhsBlock);</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> </div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>   <span class="comment">// Any temporaries created here are conditional.</span></div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(lhsBlock);</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>   eval.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConditionalEvaluation.html#a3046835ae0c0878c9a5f95904c074fd1">begin</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> lhs = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(expr-><a class="code" href="classclang_1_1AbstractConditionalOperator.html#aefd0046134a76b3b5d4b517d5ad3b7c8">getTrueExpr</a>());</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>   eval.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConditionalEvaluation.html#af1253e4715a161f6c65791f65c9219da">end</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span> </div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>   <span class="keywordflow">if</span> (!lhs.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>())</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">EmitUnsupportedLValue</a>(expr, <span class="stringliteral">"conditional operator"</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>   lhsBlock = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.GetInsertBlock();</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBr(contBlock);</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> </div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>   <span class="comment">// Any temporaries created here are conditional.</span></div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(rhsBlock);</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>   eval.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConditionalEvaluation.html#a3046835ae0c0878c9a5f95904c074fd1">begin</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> rhs = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(expr-><a class="code" href="classclang_1_1AbstractConditionalOperator.html#a1b8c4e1f971e272272a329653153e8c1">getFalseExpr</a>());</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>   eval.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1ConditionalEvaluation.html#af1253e4715a161f6c65791f65c9219da">end</a>(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>   <span class="keywordflow">if</span> (!rhs.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a8e2a971f64f67d31f84bc136c53c72c0">isSimple</a>())</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">EmitUnsupportedLValue</a>(expr, <span class="stringliteral">"conditional operator"</span>);</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>   rhsBlock = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.GetInsertBlock();</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span> </div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afdec5412ab40bb1923c689fe093f8871">EmitBlock</a>(contBlock);</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span> </div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>   llvm::PHINode *phi = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreatePHI(lhs.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>()->getType(), 2,</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>                                          <span class="stringliteral">"cond-lvalue"</span>);</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>   phi->addIncoming(lhs.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), lhsBlock);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>   phi->addIncoming(rhs.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(), rhsBlock);</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(phi, expr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span> }</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span> <span class="comment"></span></div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> <span class="comment">/// EmitCastLValue - Casts are never lvalues unless that cast is to a reference</span></div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span> <span class="comment">/// type. If the cast is to a reference, we can have the usual lvalue result,</span></div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span> <span class="comment">/// otherwise if a cast is needed by the code generator in an lvalue context,</span></div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span> <span class="comment">/// then it must mean that we need the address of an aggregate in order to</span></div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span> <span class="comment">/// access one of its members.  This can happen for all the reasons that casts</span></div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> <span class="comment">/// are permitted with aggregate result, including noop aggregate casts, and</span></div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> <span class="comment">/// cast from scalar to union.</span></div>
+<div class="line"><a name="l02709"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafad3193bcb9ca583891de0978deaa46"> 2709</a></span> <span class="comment"></span><a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafad3193bcb9ca583891de0978deaa46">CodeGenFunction::EmitCastLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CastExpr.html">CastExpr</a> *E) {</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>   <span class="keywordflow">switch</span> (E-><a class="code" href="classclang_1_1CastExpr.html#a9579ef9370fffd8c5e4bee485eac9265">getCastKind</a>()) {</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cac5d34b62fbc611f2f762ff5c72845fa5">CK_ToVoid</a>:</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca183b8948b82911a415cc54446ddcb3ab">CK_BitCast</a>:</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca966388c17db29effd052ff1f5da7f64f">CK_ArrayToPointerDecay</a>:</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cab98f67d90bd9e115f96916271318fe71">CK_FunctionToPointerDecay</a>:</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca26ac11778b8142c489add68f63bb6dde">CK_NullToMemberPointer</a>:</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca69507b9309c485f20be46a41f657630c">CK_NullToPointer</a>:</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca25161f0bbb6d2b99bd5fbbf9c19ef751">CK_IntegralToPointer</a>:</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca71a69f66ffd32b22a11ee92d49359612">CK_PointerToIntegral</a>:</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca2aba1f25bc41c5f972576e6b3aff5d3c">CK_PointerToBoolean</a>:</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cad92f354774050cdc155c425c4268c701">CK_VectorSplat</a>:</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cad71cad80dd5957bfc6e8aa8f3a36f814">CK_IntegralCast</a>:</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca10227766dc73da8ee82588b158be3ec5">CK_IntegralToBoolean</a>:</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca2cf53b5b93effb16c027b884ed149c8d">CK_IntegralToFloating</a>:</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca0d5ae3f886d5297b84191286796cff35">CK_FloatingToIntegral</a>:</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca51c66fc8d55bbf9fbbe237705b1d01aa">CK_FloatingToBoolean</a>:</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cab482ba41f148596616a763a65f09584c">CK_FloatingCast</a>:</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca1cad6c2d96d3c0f2af106f2b1368492e" title="A conversion of a floating point real to a floating point complex of the original type...">CK_FloatingRealToComplex</a>:</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cae5c5fd1deef6203422d504a5f8bdc6ce" title="Converts a floating point complex to floating point real of the source's element type. Just discards the imaginary component. _Complex long double -> long double.">CK_FloatingComplexToReal</a>:</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca2bd6941fcc6aebca94562ecd98a7024e" title="Converts a floating point complex to bool by comparing against 0+0i.">CK_FloatingComplexToBoolean</a>:</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca4afeb9e95e7e3b7306549eadbdbe9c80" title="Converts between different floating point complex types. _Complex float -> _Complex double...">CK_FloatingComplexCast</a>:</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca43029dd8d1bc9710d1e43b8c0d294e71" title="Converts from a floating complex to an integral complex. _Complex float -> _Complex int...">CK_FloatingComplexToIntegralComplex</a>:</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca5cbf9648982576f016ac45aeb4ff06a1" title="Converts from an integral real to an integral complex whose element type matches the source...">CK_IntegralRealToComplex</a>:</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca354a7827d46025f132fd402f609f1e85" title="Converts an integral complex to an integral real of the source's element type by discarding the imagi...">CK_IntegralComplexToReal</a>:</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca8e687c96123e650206d3feb3aba3ff5a" title="Converts an integral complex to bool by comparing against 0+0i.">CK_IntegralComplexToBoolean</a>:</div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cab716d5bd471b943dda830dd2659cacce" title="Converts between different integral complex types. _Complex char -> _Complex long long _Complex unsig...">CK_IntegralComplexCast</a>:</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cab4da0cbf1af3ba6fc7b47af7c548ff31" title="Converts from an integral complex to a floating complex. _Complex unsigned -> _Complex float...">CK_IntegralComplexToFloatingComplex</a>:</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca82cc4f2178c9c3b36d0790c155939350">CK_DerivedToBaseMemberPointer</a>:</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca3c6a5409bb52618fc54e2a1b7fea53e8">CK_BaseToDerivedMemberPointer</a>:</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca71aec4768318edbbc08dbe65bc4f0e8d">CK_MemberPointerToBoolean</a>:</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cafe996870a0a2acb7913b2dfff4514961">CK_ReinterpretMemberPointer</a>:</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cac5436c20ce687d8a80eac6656ccd4053">CK_AnyPointerToBlockPointerCast</a>:</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca9f5583b92f81ac9a5b9fb5ad43e8435c" title="[ARC] Produces a retainable object pointer so that it may be consumed, e.g. by being passed to a cons...">CK_ARCProduceObject</a>:</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cabd5bc09cee26b551eb8174e32f1239cf" title="[ARC] Consumes a retainable object pointer that has just been produced, e.g. as the return value of a...">CK_ARCConsumeObject</a>:</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca54bc1edcd89f791f8516abeea370fa49" title="[ARC] Reclaim a retainable object pointer object that may have been produced and autoreleased as part...">CK_ARCReclaimReturnedObject</a>:</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca88a24e1d8c6ee42652b389edc898488f" title="[ARC] Causes a value of block type to be copied to the heap, if it is not already there...">CK_ARCExtendBlockObject</a>:</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca3d6e9ee43c0dc11f3efca79e7c563a20" title="Causes a block literal to by copied to the heap and then autoreleased.">CK_CopyAndAutoreleaseBlockObject</a>:</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8c732ee8cf21b88883264ad57ab76576">EmitUnsupportedLValue</a>(E, <span class="stringliteral">"unexpected cast lvalue"</span>);</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> </div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca083127f65375358e525293ded6aa20ff">CK_Dependent</a>:</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>     llvm_unreachable(<span class="stringliteral">"dependent cast kind in IR gen!"</span>);</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span> </div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8caac03ac448a686cc808b1b7490e2e696a">CK_BuiltinFnToFnPtr</a>:</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>     llvm_unreachable(<span class="stringliteral">"builtin functions are handled elsewhere"</span>);</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span> </div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>   <span class="comment">// These are never l-values; just use the aggregate emission code.</span></div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cab2c34ae82486ed6cd94d5cea5ef51704" title="Converts from T to _Atomic(T).">CK_NonAtomicToAtomic</a>:</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cafb2f9da9740fb15b339767da2bcedc8a" title="Converts from _Atomic(T) to T.">CK_AtomicToNonAtomic</a>:</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a77ac4a960c1c6a2e758738423648ce80">EmitAggExprToLValue</a>(E);</div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> </div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca256751070614007fb6d4b82e48460a97" title="CK_Dynamic - A C++ dynamic_cast.">CK_Dynamic</a>: {</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1CXXDynamicCastExpr.html" title="A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).">CXXDynamicCastExpr</a> *DCE = cast<CXXDynamicCastExpr>(E);</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a92592072e447e5f285c8a95da9f447ce">EmitDynamicCast</a>(V, DCE), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>   }</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span> </div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cad2d52a3df80ffd6ed33b81af15c872b0">CK_ConstructorConversion</a>:</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca84fedc22426b7cd5db4e84d590522adb">CK_UserDefinedConversion</a>:</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cacc999b93239de9e4bc022719ddd96159">CK_CPointerToObjCPointerCast</a>:</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca90f41f80fbcffc5e47ac9c9b448f5c00">CK_BlockPointerToObjCPointerCast</a>:</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca534ff1b7708ce501d6f39f65d98ffdcb">CK_NoOp</a>:</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca3b60e4a2d76963a5a2db0e0b720d8ce4">CK_LValueToRValue</a>:</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span> </div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8caafe5fe4f044e3c17524af98993c8b058">CK_UncheckedDerivedToBase</a>:</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca73a268da1a2e05cdf1ace06c46412caa">CK_DerivedToBase</a>: {</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1RecordType.html">RecordType</a> *DerivedClassTy =</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>       E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>()-><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_1RecordType.html">RecordType</a>>();</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>     <a class="code" href="classclang_1_1CXXRecordDecl.html" title="Represents a C++ struct/union/class.">CXXRecordDecl</a> *DerivedClassDecl =</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>       cast<CXXRecordDecl>(DerivedClassTy-><a class="code" href="classclang_1_1RecordType.html#a312ab3ebe179cc7d8692c07479c91076">getDecl</a>());</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span> </div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *This = LV.getAddress();</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span> </div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>     <span class="comment">// Perform the derived-to-base conversion</span></div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1Base.html">Base</a> =</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a75da1a9b3eb8a6aaeda1c075563021b3">GetAddressOfBaseClass</a>(This, DerivedClassDecl,</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>                             E-><a class="code" href="classclang_1_1CastExpr.html#a0b21e5af1691cff3b580f3c5f35fe459">path_begin</a>(), E-><a class="code" href="classclang_1_1CastExpr.html#a8faa0fba2075e167943ea782e86296d4">path_end</a>(),</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>                             <span class="comment">/*NullCheckValue=*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> </div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Base, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>   }</div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca8ea0e009738649ecec9ae75302358e8a">CK_ToUnion</a>:</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a77ac4a960c1c6a2e758738423648ce80">EmitAggExprToLValue</a>(E);</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8cacf9d54607fb757633eea67b88cd432b8">CK_BaseToDerived</a>: {</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1RecordType.html">RecordType</a> *DerivedClassTy = E-><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_1RecordType.html">RecordType</a>>();</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>     <a class="code" href="classclang_1_1CXXRecordDecl.html" title="Represents a C++ struct/union/class.">CXXRecordDecl</a> *DerivedClassDecl =</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>       cast<CXXRecordDecl>(DerivedClassTy-><a class="code" href="classclang_1_1RecordType.html#a312ab3ebe179cc7d8692c07479c91076">getDecl</a>());</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> </div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span> </div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>     <span class="comment">// Perform the base-to-derived conversion</span></div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Derived =</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4a3efbcf6257c66635aaaf1924c7072c">GetAddressOfDerivedClass</a>(LV.getAddress(), DerivedClassDecl,</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>                                E-><a class="code" href="classclang_1_1CastExpr.html#a0b21e5af1691cff3b580f3c5f35fe459">path_begin</a>(), E-><a class="code" href="classclang_1_1CastExpr.html#a8faa0fba2075e167943ea782e86296d4">path_end</a>(),</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>                                <span class="comment">/*NullCheckValue=*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> </div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>     <span class="comment">// C++11 [expr.static.cast]p2: Behavior is undefined if a downcast is</span></div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>     <span class="comment">// performed and the object is not of the derived type.</span></div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5dcd246aabc8392b439fc85c049965e9" title="Whether any type-checking sanitizers are enabled. If false, calls to EmitTypeCheck can be skipped...">SanitizePerformTypeCheck</a>)</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#abcdc546762ac7c5e06fc043cb509106a" title="Emit a check that V is the address of storage of the appropriate size and alignment for an object of ...">EmitTypeCheck</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a43ae653b5cbf0a84e147df511764ed28">TCK_DowncastReference</a>, E-><a class="code" href="classclang_1_1Expr.html#ab4fa508722ecc1546ad73cb31b0dc06c">getExprLoc</a>(),</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>                     Derived, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span> </div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Derived, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>   }</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca26d313dc7aa71eb9a90dba577004ecdd">CK_LValueBitCast</a>: {</div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>     <span class="comment">// This must be a reinterpret_cast (or c-style equivalent).</span></div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a> *CE = cast<ExplicitCastExpr>(E);</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> </div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(LV.getAddress(),</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>                                            <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(CE-><a class="code" href="classclang_1_1ExplicitCastExpr.html#ac788ee017b63929c45cf3883910c1adb">getTypeAsWritten</a>()));</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>   }</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca49cdf8abcaeac51e47994305a998f3bd" title="Converting between two Objective-C object types, which can occur when performing reference binding to...">CK_ObjCObjectLValueCast</a>: {</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1CastExpr.html#a37e3d80c4ca590eadbe49e400c50134b">getSubExpr</a>());</div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> ToType = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>().<a class="code" href="classclang_1_1ASTContext.html#a606b062a2b948921c139286220a2549b" title="Return the uniqued reference to the type for an lvalue reference to the specified type...">getLValueReferenceType</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>     <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(LV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>(),</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>                                            <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(ToType));</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>   }</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#aa8bdb68daa57cbb2096f354001e2df8ca8e560e545d9c0c051691299879d30932">CK_ZeroToOCLEvent</a>:</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>     llvm_unreachable(<span class="stringliteral">"NULL to OpenCL event lvalue cast is not valid"</span>);</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>   llvm_unreachable(<span class="stringliteral">"Unhandled lvalue cast kind?"</span>);</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span> }</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span> </div>
+<div class="line"><a name="l02839"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5e77606a3b6a435cd98855df6ef64d50"> 2839</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a5e77606a3b6a435cd98855df6ef64d50">CodeGenFunction::EmitOpaqueValueLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1OpaqueValueExpr.html">OpaqueValueExpr</a> *e) {</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>   assert(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction_1_1OpaqueValueMappingData.html#a683a2935cc385441e0ffedfb71f9ee95">OpaqueValueMappingData::shouldBindAsLValue</a>(e));</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9eb7e3aa4d6cc8c79099fbe5a3a880f7">getOpaqueLValueMapping</a>(e);</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"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad04099f59689c86396530850a8842b43"> 2844</a></span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad04099f59689c86396530850a8842b43">CodeGenFunction::EmitRValueForField</a>(<a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV,</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>                                            <span class="keyword">const</span> <a class="code" href="classclang_1_1FieldDecl.html">FieldDecl</a> *FD,</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</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="l02847"></a><span class="lineno"> 2847</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> FT = FD-><a class="code" href="classclang_1_1ValueDecl.html#aefa6d3327144aee23d2935f41d993484">getType</a>();</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> FieldLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0fe5273873e8ce1fab483cd99ed84000">EmitLValueForField</a>(LV, FD);</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>   <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac1be3afe566ffd19818efe9f6b07a8ea">getEvaluationKind</a>(FT)) {</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9ad0c74fbe072df321c2078f52f052d07c">TEK_Complex</a>:</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a7e337836177fcde90cd36b8a241ab510">RValue::getComplex</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a26d8547dd8e031970116491629669c39" title="EmitLoadOfComplex - Load a complex number from the specified l-value.">EmitLoadOfComplex</a>(FieldLV, Loc));</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9a6bdd6972cc7f7a6326c359a2a07df29a">TEK_Aggregate</a>:</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>     <span class="keywordflow">return</span> FieldLV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a50e578076cdf6a5e42dca66894e37b8e">asAggregateRValue</a>();</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9aa4a7b0b5cf5c3854e35ca0c172e93269">TEK_Scalar</a>:</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6ec6fabfbe7aa87203af03a05ab5d157">EmitLoadOfLValue</a>(FieldLV, Loc);</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>   }</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>   llvm_unreachable(<span class="stringliteral">"bad evaluation kind"</span>);</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span> }</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span> </div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span> <span class="comment">//===--------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span> <span class="comment">//                             Expression Emission</span></div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span> <span class="comment">//===--------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> </div>
+<div class="line"><a name="l02864"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2cb5c6b2c4097d1fe8f17b236a38ec00"> 2864</a></span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2cb5c6b2c4097d1fe8f17b236a38ec00">CodeGenFunction::EmitCallExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CallExpr.html">CallExpr</a> *E,</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>                                      <a class="code" href="classclang_1_1CodeGen_1_1ReturnValueSlot.html">ReturnValueSlot</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1eb2b28a846f4bcb0c7db1f39813d1af">ReturnValue</a>) {</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CGDebugInfo.html">CGDebugInfo</a> *DI = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aae2a6ad5f0ab2ff7b94e717a18352512">getDebugInfo</a>()) {</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</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 = E-><a class="code" href="classclang_1_1CallExpr.html#a4852265598bd0c47f24844f91d0e700c">getLocStart</a>();</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>     <span class="comment">// Force column info to be generated so we can differentiate</span></div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>     <span class="comment">// multiple call sites on the same line in the debug info.</span></div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a>* Callee = E-><a class="code" href="classclang_1_1CallExpr.html#a88bb91e7e67e378fd6a895c1f679901d" title="If the callee is a FunctionDecl, return it. Otherwise return 0.">getDirectCallee</a>();</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>     <span class="keywordtype">bool</span> ForceColumnInfo = Callee && Callee-><a class="code" href="classclang_1_1FunctionDecl.html#acdcff3767048184ade7d27e0006cfabd" title="Determine whether the "inline" keyword was specified for this function.">isInlineSpecified</a>();</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>     DI->EmitLocation(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>, Loc, ForceColumnInfo);</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>   }</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span> </div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>   <span class="comment">// Builtins never have block type.</span></div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1CallExpr.html#a3a2b7cbceb661c81f0d6eb937610eb75">getCallee</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#ad6cd1a04cac76bfb304bbc02bf23a9bb">isBlockPointerType</a>())</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a867b58505007645a03b1769271828bd1">EmitBlockCallExpr</a>(E, ReturnValue);</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span> </div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a> *CE = dyn_cast<CXXMemberCallExpr>(E))</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a50221316407907ed3eae500ca54cae33">EmitCXXMemberCallExpr</a>(CE, ReturnValue);</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="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CUDAKernelCallExpr.html" title="Represents a call to a CUDA kernel function.">CUDAKernelCallExpr</a> *CE = dyn_cast<CUDAKernelCallExpr>(E))</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa229091cd1f8b3c8e8dc46adfd6d835e">EmitCUDAKernelCallExpr</a>(CE, ReturnValue);</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span> </div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Decl.html">Decl</a> *TargetDecl = E-><a class="code" href="classclang_1_1CallExpr.html#a68507440cf707685b486b1f446d28f53">getCalleeDecl</a>();</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FunctionDecl.html">FunctionDecl</a> *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl)) {</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>     <span class="keywordflow">if</span> (<span class="keywordtype">unsigned</span> builtinID = FD->getBuiltinID())</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa7e7d0c49f74bb92a2e3c650e0bcec11">EmitBuiltinExpr</a>(FD, builtinID, E);</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>   }</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span> </div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</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> *CE = dyn_cast<CXXOperatorCallExpr>(E))</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXMethodDecl.html" title="Represents a static or instance method of a struct/union/class.">CXXMethodDecl</a> *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl))</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afc4766f77c0a6f6ced565b4700cbcce4">EmitCXXOperatorMemberCallExpr</a>(CE, MD, ReturnValue);</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span> </div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXPseudoDestructorExpr.html" title="Represents a C++ pseudo-destructor (C++ [expr.pseudo]).">CXXPseudoDestructorExpr</a> *PseudoDtor</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>           = dyn_cast<CXXPseudoDestructorExpr>(E-><a class="code" href="classclang_1_1CallExpr.html#a3a2b7cbceb661c81f0d6eb937610eb75">getCallee</a>()-><a class="code" href="classclang_1_1Expr.html#a6128786ad6c6ad61b66ad4ddf09b1bd8">IgnoreParens</a>())) {</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>     <a class="code" href="classclang_1_1QualType.html">QualType</a> DestroyedType = PseudoDtor->getDestroyedType();</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a7f36282ddf1577e2efd3a888053b2f87">getLangOpts</a>().ObjCAutoRefCount &&</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>         DestroyedType-><a class="code" href="classclang_1_1Type.html#a51d4c15edd09e2d58c0a5342abd06307">isObjCLifetimeType</a>() &&</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>         (DestroyedType.<a class="code" href="classclang_1_1QualType.html#abf2b347a1ba0ed6b4fad08600273324f" title="getObjCLifetime - Returns lifetime attribute of this type.">getObjCLifetime</a>() == <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a> ||</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>          DestroyedType.<a class="code" href="classclang_1_1QualType.html#abf2b347a1ba0ed6b4fad08600273324f" title="getObjCLifetime - Returns lifetime attribute of this type.">getObjCLifetime</a>() == <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300ad62a7a19d7027c37d407d2ca7638a89c" title="Reading or writing from this object requires a barrier call.">Qualifiers::OCL_Weak</a>)) {</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>       <span class="comment">// Automatic Reference Counting:</span></div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>       <span class="comment">//   If the pseudo-expression names a retainable object with weak or</span></div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>       <span class="comment">//   strong lifetime, the object shall be released.</span></div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>       <a class="code" href="classclang_1_1Expr.html">Expr</a> *BaseExpr = PseudoDtor->getBase();</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>       <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *BaseValue = <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>       <a class="code" href="classclang_1_1Qualifiers.html">Qualifiers</a> BaseQuals;</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 this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar.</span></div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>       <span class="keywordflow">if</span> (PseudoDtor->isArrow()) {</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>         BaseValue = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(BaseExpr);</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>         <span class="keyword">const</span> <a class="code" href="classclang_1_1PointerType.html">PointerType</a> *PTy = BaseExpr-><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_1PointerType.html">PointerType</a>>();</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>         BaseQuals = PTy-><a class="code" href="classclang_1_1PointerType.html#a3d0af079431148f7da7e2c400052cc66">getPointeeType</a>().<a class="code" href="classclang_1_1QualType.html#a4a3d75cf019a2e769498ef8d6878888b" title="Retrieve the set of qualifiers applied to this type.">getQualifiers</a>();</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>         <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> BaseLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(BaseExpr);</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>         BaseValue = BaseLV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>         <a class="code" href="classclang_1_1QualType.html">QualType</a> BaseTy = BaseExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>         BaseQuals = BaseTy.<a class="code" href="classclang_1_1QualType.html#a4a3d75cf019a2e769498ef8d6878888b" title="Retrieve the set of qualifiers applied to this type.">getQualifiers</a>();</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>       }</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span> </div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>       <span class="keywordflow">switch</span> (PseudoDtor->getDestroyedType().getObjCLifetime()) {</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a29b319bca942e44bf183ca2749b072b3" title="There is no lifetime qualification on this type.">Qualifiers::OCL_None</a>:</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a1868aff47acf923ca643cb6950363615">Qualifiers::OCL_ExplicitNone</a>:</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300afd7d211973aef2cc5945b96a963f0e4f" title="Assigning into this object requires a lifetime extension.">Qualifiers::OCL_Autoreleasing</a>:</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span> </div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a>:</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a585a58940cba78b5edc132481e3af6ec">EmitARCRelease</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateLoad(BaseValue,</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>                           PseudoDtor->getDestroyedType().isVolatileQualified()),</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>                        <a class="code" href="namespaceclang_1_1CodeGen.html#abd4c22c5bca7ad596b2a7bdcfe7dcea0a1fa599feff7af33fae2bda52a0a6a516">ARCPreciseLifetime</a>);</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span> </div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>       <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300ad62a7a19d7027c37d407d2ca7638a89c" title="Reading or writing from this object requires a barrier call.">Qualifiers::OCL_Weak</a>:</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>         <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafb0889b796846ed4e1efa47ca06338b">EmitARCDestroyWeak</a>(BaseValue);</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>       }</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>       <span class="comment">// C++ [expr.pseudo]p1:</span></div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>       <span class="comment">//   The result shall only be used as the operand for the function call</span></div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>       <span class="comment">//   operator (), and the result of such a call has type void. The only</span></div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>       <span class="comment">//   effect is the evaluation of the postfix-expression before the dot or</span></div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>       <span class="comment">//   arrow.</span></div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>       <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1CallExpr.html#a3a2b7cbceb661c81f0d6eb937610eb75">getCallee</a>());</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>     }</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span> </div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a1a8427ae63385ddc17ad8c68352d95b2">RValue::get</a>(0);</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>   }</div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *Callee = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(E-><a class="code" href="classclang_1_1CallExpr.html#a3a2b7cbceb661c81f0d6eb937610eb75">getCallee</a>());</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a41637beb876ec52a99f9f316445ff1bb">EmitCall</a>(E-><a class="code" href="classclang_1_1CallExpr.html#a3a2b7cbceb661c81f0d6eb937610eb75">getCallee</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), Callee, E-><a class="code" href="classclang_1_1CallExpr.html#a4852265598bd0c47f24844f91d0e700c">getLocStart</a>(),</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>                   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1eb2b28a846f4bcb0c7db1f39813d1af">ReturnValue</a>, E-><a class="code" href="classclang_1_1CallExpr.html#a6f97281c2e5e3820685951be98b661a3">arg_begin</a>(), E-><a class="code" href="classclang_1_1CallExpr.html#a7131a2da85b34d34e00ec7c6004b0836">arg_end</a>(), TargetDecl);</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span> }</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> </div>
+<div class="line"><a name="l02954"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a545eb0e77d890696edabc24ae3a48885"> 2954</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a545eb0e77d890696edabc24ae3a48885">CodeGenFunction::EmitBinaryOperatorLValue</a>(<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> *E) {</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>   <span class="comment">// Comma expressions just emit their LHS then their RHS as an l-value.</span></div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae3c9652c3c01080bd794e8e03988e278">BO_Comma</a>) {</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a6d658adb4ef629c25cc3821f5a3e01ec" title="EmitIgnoredExpr - Emit an expression in a context which ignores the result.">EmitIgnoredExpr</a>(E-><a class="code" href="classclang_1_1BinaryOperator.html#ad8b108ac1a7795b9f388d8dece6b8924">getLHS</a>());</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aebc753533aefb02b31dc6d12b1fb6e06">EnsureInsertPoint</a>();</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(E-><a class="code" href="classclang_1_1BinaryOperator.html#a1ab10aae0ffa01be5d1a979e6da285e6">getRHS</a>());</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>   }</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> </div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a31e63255bd536c2d74a66ac47160ed53">BO_PtrMemD</a> ||</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>       E-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae432d0b89cd5293af333b8854e20fd40">BO_PtrMemI</a>)</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a40c1bc1591864d2dc02d650579284d82">EmitPointerToDataMemberBinaryExpr</a>(E);</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span> </div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>   assert(E-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af0f6693357ca6bc7488c1d4de4cbe303">BO_Assign</a> && <span class="stringliteral">"unexpected binary l-value"</span>);</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>   <span class="comment">// Note that in all of these cases, __block variables need the RHS</span></div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>   <span class="comment">// evaluated first just in case the variable gets moved by the RHS.</span></div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> </div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>   <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac1be3afe566ffd19818efe9f6b07a8ea">getEvaluationKind</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>())) {</div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9aa4a7b0b5cf5c3854e35ca0c172e93269">TEK_Scalar</a>: {</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>     <span class="keywordflow">switch</span> (E-><a class="code" href="classclang_1_1BinaryOperator.html#ad8b108ac1a7795b9f388d8dece6b8924">getLHS</a>()-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#abf2b347a1ba0ed6b4fad08600273324f" title="getObjCLifetime - Returns lifetime attribute of this type.">getObjCLifetime</a>()) {</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a056719970802d94ba3740489f709a96e">Qualifiers::OCL_Strong</a>:</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a40497037ed1f343c5ef7aa5b2dc652f5">EmitARCStoreStrong</a>(E, <span class="comment">/*ignored*/</span> <span class="keyword">false</span>).first;</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> </div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300afd7d211973aef2cc5945b96a963f0e4f" title="Assigning into this object requires a lifetime extension.">Qualifiers::OCL_Autoreleasing</a>:</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>       <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0ef8a2405698ceeb0f76138b79ab6def">EmitARCStoreAutoreleasing</a>(E).first;</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span> </div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>     <span class="comment">// No reason to do any of these differently.</span></div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a29b319bca942e44bf183ca2749b072b3" title="There is no lifetime qualification on this type.">Qualifiers::OCL_None</a>:</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300a1868aff47acf923ca643cb6950363615">Qualifiers::OCL_ExplicitNone</a>:</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>     <span class="keywordflow">case</span> <a class="code" href="classclang_1_1Qualifiers.html#a1280e3f4075ff54f856987cf002ba300ad62a7a19d7027c37d407d2ca7638a89c" title="Reading or writing from this object requires a barrier call.">Qualifiers::OCL_Weak</a>:</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>     }</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> </div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>     <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> RV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab55962fe5983453b24c64f76125c760c">EmitAnyExpr</a>(E-><a class="code" href="classclang_1_1BinaryOperator.html#a1ab10aae0ffa01be5d1a979e6da285e6">getRHS</a>());</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#acfb6c861f8e1ac9383bf54b05b5292cd" title="Same as EmitLValue but additionally we generate checking code to guard against undefined behavior...">EmitCheckedLValue</a>(E-><a class="code" href="classclang_1_1BinaryOperator.html#ad8b108ac1a7795b9f388d8dece6b8924">getLHS</a>(), <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a506527ab7d0b728228596e9a81c811c6a958228d51bdf7739b42b3131a3f64ecd" title="Checking the destination of a store. Must be suitably sized and aligned.">TCK_Store</a>);</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aab00f3161bf4956de6c490615544a734">EmitStoreThroughLValue</a>(RV, LV);</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>     <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>   }</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> </div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9ad0c74fbe072df321c2078f52f052d07c">TEK_Complex</a>:</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aaf50f762e9d34a08a2a58a72d1b260bd" title="Emit an l-value for an assignment (simple or compound) of complex type.">EmitComplexAssignmentLValue</a>(E);</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span> </div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang_1_1CodeGen.html#a8e206ea4edfe305918f0b28322f7aef9a6bdd6972cc7f7a6326c359a2a07df29a">TEK_Aggregate</a>:</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a77ac4a960c1c6a2e758738423648ce80">EmitAggExprToLValue</a>(E);</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>   }</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>   llvm_unreachable(<span class="stringliteral">"bad evaluation kind"</span>);</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> }</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> </div>
+<div class="line"><a name="l03002"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afb4efb5e2b2d3b9044ee914250db74d6"> 3002</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#afb4efb5e2b2d3b9044ee914250db74d6">CodeGenFunction::EmitCallExprLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CallExpr.html">CallExpr</a> *E) {</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>   <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> RV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a2cb5c6b2c4097d1fe8f17b236a38ec00">EmitCallExpr</a>(E);</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> </div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>   <span class="keywordflow">if</span> (!RV.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#aeb42ff4f93c5721cf244b300ba864e3f">isScalar</a>())</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(RV.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#ae56c586d571b8d6d1cea9a78b89d9439" title="getAggregateAddr() - Return the Value* of the address of the aggregate.">getAggregateAddr</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</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>   assert(E-><a class="code" href="classclang_1_1CallExpr.html#abacb26ed953d3bdb1f8bb67cdeaba298">getCallReturnType</a>()-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>() &&</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>          <span class="stringliteral">"Can't have a scalar return unless the return type is a "</span></div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>          <span class="stringliteral">"reference type!"</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>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(RV.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span> }</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span> </div>
+<div class="line"><a name="l03015"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9906e0701ca9696a5ea1d63614dff70e"> 3015</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a9906e0701ca9696a5ea1d63614dff70e">CodeGenFunction::EmitVAArgExprLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1VAArgExpr.html" title="VAArgExpr, used for the builtin function __builtin_va_arg.">VAArgExpr</a> *E) {</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>   <span class="comment">// FIXME: This shouldn't require another copy.</span></div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a77ac4a960c1c6a2e758738423648ce80">EmitAggExprToLValue</a>(E);</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> </div>
+<div class="line"><a name="l03020"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0c0910294a1b4fe32bdeb1be57989bbc"> 3020</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0c0910294a1b4fe32bdeb1be57989bbc">CodeGenFunction::EmitCXXConstructLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXConstructExpr.html" title="Represents a call to a C++ constructor.">CXXConstructExpr</a> *E) {</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>   assert(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><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>()-><a class="code" href="classclang_1_1CXXRecordDecl.html#a5ba24967342c02411fb14790a24b8a8a" title="Determine whether this class has a trivial destructor (C++ [class.dtor]p3)">hasTrivialDestructor</a>()</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>          && <span class="stringliteral">"binding l-value to type which needs a temporary"</span>);</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>   <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html" title="An aggregate value slot.">AggValueSlot</a> Slot = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a28025dd0dfd2cde1cde5445690301c92">CreateAggTemp</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0a37f4ebe1d91b4b093ca0221ce0aecf">EmitCXXConstructExpr</a>(E, Slot);</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Slot.getAddr(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> }</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> </div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a></div>
+<div class="line"><a name="l03029"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae39a300d445536ce605f20e9af50a855"> 3029</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ae39a300d445536ce605f20e9af50a855">CodeGenFunction::EmitCXXTypeidLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXTypeidExpr.html">CXXTypeidExpr</a> *E) {</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#affb497fd7ee89ab9d8616aadbc3806f6">EmitCXXTypeidExpr</a>(E), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> }</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span> </div>
+<div class="line"><a name="l03033"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0a5b39d970239f27db1d55212e540876"> 3033</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0a5b39d970239f27db1d55212e540876">CodeGenFunction::EmitCXXUuidofExpr</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXUuidofExpr.html">CXXUuidofExpr</a> *E) {</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a982c1e3091df3de75723921687460d3d">Builder</a>.CreateBitCast(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#abc9c1fa13280a3a2613a45091afa9ed0" title="GetAddrOfUuidDescriptor - Get the address of a uuid descriptor .">GetAddrOfUuidDescriptor</a>(E),</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>                                <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a1ccd343226e5bdfd99c6017f0ddfda20">ConvertType</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>())->getPointerTo());</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> </div>
+<div class="line"><a name="l03038"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a368b3b60247cf18658f197a77ce503e3"> 3038</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a368b3b60247cf18658f197a77ce503e3">CodeGenFunction::EmitCXXUuidofLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXUuidofExpr.html">CXXUuidofExpr</a> *E) {</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a0a5b39d970239f27db1d55212e540876">EmitCXXUuidofExpr</a>(E), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> }</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> </div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a></div>
+<div class="line"><a name="l03043"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad1d13446921a3b93db7f477cc8fcf142"> 3043</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad1d13446921a3b93db7f477cc8fcf142">CodeGenFunction::EmitCXXBindTemporaryLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1CXXBindTemporaryExpr.html" title="Represents binding an expression to a temporary.">CXXBindTemporaryExpr</a> *E) {</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>   <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html" title="An aggregate value slot.">AggValueSlot</a> Slot = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a28025dd0dfd2cde1cde5445690301c92">CreateAggTemp</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <span class="stringliteral">"temp.lvalue"</span>);</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>   Slot.<a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a57c314a91cd01bceabd0cb2045d87518">setExternallyDestructed</a>();</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ad58a7f0f413e2aea5174df10adc6d1b5">EmitAggExpr</a>(E-><a class="code" href="classclang_1_1CXXBindTemporaryExpr.html#aaf4a9a110306f2635542e15ac4a85d7e">getSubExpr</a>(), Slot);</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a3d8ede2502a271f3f15af669e4d7f0f0" title="Emits all the code to cause the given temporary to be cleaned up.">EmitCXXTemporary</a>(E-><a class="code" href="classclang_1_1CXXBindTemporaryExpr.html#adef4eac5211f775751b7178963aea42c">getTemporary</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), Slot.<a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a14cb9ceb0a07bd9c0090df861f550105">getAddr</a>());</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Slot.<a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a14cb9ceb0a07bd9c0090df861f550105">getAddr</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span> }</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span> </div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a></div>
+<div class="line"><a name="l03052"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac5330124ba9586c25199ceba4b228829"> 3052</a></span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac5330124ba9586c25199ceba4b228829">CodeGenFunction::EmitLambdaLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1LambdaExpr.html" title="A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...">LambdaExpr</a> *E) {</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>   <a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html" title="An aggregate value slot.">AggValueSlot</a> Slot = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a28025dd0dfd2cde1cde5445690301c92">CreateAggTemp</a>(E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>(), <span class="stringliteral">"temp.lvalue"</span>);</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>   <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a11305d4b940e2aa9f49b473684109f75">EmitLambdaExpr</a>(E, Slot);</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(Slot.<a class="code" href="classclang_1_1CodeGen_1_1AggValueSlot.html#a14cb9ceb0a07bd9c0090df861f550105">getAddr</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</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> </div>
+<div class="line"><a name="l03058"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a194a70daa28c50242ee2846b31ec4e04"> 3058</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a194a70daa28c50242ee2846b31ec4e04">CodeGenFunction::EmitObjCMessageExprLValue</a>(<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> *E) {</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>   <a class="code" href="classclang_1_1CodeGen_1_1RValue.html">RValue</a> RV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a08d7699a25157488e38e0117a78a6f5b">EmitObjCMessageExpr</a>(E);</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>   <span class="keywordflow">if</span> (!RV.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#aeb42ff4f93c5721cf244b300ba864e3f">isScalar</a>())</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(RV.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#ae56c586d571b8d6d1cea9a78b89d9439" title="getAggregateAddr() - Return the Value* of the address of the aggregate.">getAggregateAddr</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span> </div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>   assert(E-><a class="code" href="classclang_1_1ObjCMessageExpr.html#a18c98ce48ed8a78cb0290d74feab687a">getMethodDecl</a>()-><a class="code" href="classclang_1_1ObjCMethodDecl.html#a5019b51f490a8eb6c6a6c89938486a5f">getResultType</a>()-><a class="code" href="classclang_1_1Type.html#ab2b860560d2ac12cd365aa09b143d195">isReferenceType</a>() &&</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>          <span class="stringliteral">"Can't have a scalar return unless the return type is a "</span></div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>          <span class="stringliteral">"reference type!"</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="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(RV.<a class="code" href="classclang_1_1CodeGen_1_1RValue.html#a375d011820c192d736c37b316abf1cb9" title="getScalarVal() - Return the Value* of this scalar value.">getScalarVal</a>(), E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span> }</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> </div>
+<div class="line"><a name="l03071"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab8d4961d4562ad60fdd26c821e2f842d"> 3071</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ab8d4961d4562ad60fdd26c821e2f842d">CodeGenFunction::EmitObjCSelectorLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCSelectorExpr.html" title="ObjCSelectorExpr used for @selector in Objective-C.">ObjCSelectorExpr</a> *E) {</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *V =</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#a221633f2ae695a5fe9ab259baad8630d">GetSelector</a>(*<span class="keyword">this</span>, E-><a class="code" href="classclang_1_1ObjCSelectorExpr.html#ad46ef0145cfc29ba528203e2da6cdccc">getSelector</a>(), <span class="keyword">true</span>);</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aafd7728d0f086ddf927150fcdcd86df8">MakeAddrLValue</a>(V, E-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> }</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> </div>
+<div class="line"><a name="l03077"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac23a0355d2d20770b02f2d92c5872c81"> 3077</a></span> <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac23a0355d2d20770b02f2d92c5872c81">CodeGenFunction::EmitIvarOffset</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCInterfaceDecl.html" title="Represents an ObjC class declaration.">ObjCInterfaceDecl</a> *Interface,</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>                                              <span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCIvarDecl.html">ObjCIvarDecl</a> *Ivar) {</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#ab142e96801e47d133c85c6c8d180b036">EmitIvarOffset</a>(*<span class="keyword">this</span>, Interface, Ivar);</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</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"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4357c93c47371c808bda8a2d1033424a"> 3082</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4357c93c47371c808bda8a2d1033424a">CodeGenFunction::EmitLValueForIvar</a>(<a class="code" href="classclang_1_1QualType.html">QualType</a> ObjectTy,</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>                                           <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *BaseValue,</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>                                           <span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCIvarDecl.html">ObjCIvarDecl</a> *Ivar,</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>                                           <span class="keywordtype">unsigned</span> CVRQualifiers) {</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ac90e716619f634d438c02ba73caaafeb">CGM</a>.<a class="code" href="classclang_1_1CodeGen_1_1CodeGenModule.html#a16bb1e08ec65a39764922030379aa5bc">getObjCRuntime</a>().<a class="code" href="classclang_1_1CodeGen_1_1CGObjCRuntime.html#a4a9b1ed52de4de25683e18297db5d31d">EmitObjCValueForIvar</a>(*<span class="keyword">this</span>, ObjectTy, BaseValue,</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>                                                    Ivar, CVRQualifiers);</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span> }</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span> </div>
+<div class="line"><a name="l03090"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa957d8aa0a8acf9e711c5de255cf9a15"> 3090</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa957d8aa0a8acf9e711c5de255cf9a15">CodeGenFunction::EmitObjCIvarRefLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1ObjCIvarRefExpr.html" title="ObjCIvarRefExpr - A reference to an ObjC instance variable.">ObjCIvarRefExpr</a> *E) {</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>   <span class="comment">// FIXME: A lot of the code below could be shared with EmitMemberExpr.</span></div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>   <a class="code" href="UninitializedValues_8cpp.html#a896c037a32087c5c20d97e64a1786880">llvm::Value</a> *BaseValue = 0;</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *BaseExpr = E-><a class="code" href="classclang_1_1ObjCIvarRefExpr.html#a27fdb40e00a21993a9845fcdc00645f9">getBase</a>();</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>   <a class="code" href="classclang_1_1Qualifiers.html">Qualifiers</a> BaseQuals;</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>   <a class="code" href="classclang_1_1QualType.html">QualType</a> ObjectTy;</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>   <span class="keywordflow">if</span> (E-><a class="code" href="classclang_1_1ObjCIvarRefExpr.html#af46e182f53b825c983ee375b96036ec7">isArrow</a>()) {</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>     BaseValue = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#ada2bbe60d33f290a0ef688d71c491ca8">EmitScalarExpr</a>(BaseExpr);</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>     ObjectTy = BaseExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>()-><a class="code" href="classclang_1_1Type.html#a3a0edf987679f04072a1243b6118add1">getPointeeType</a>();</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>     BaseQuals = ObjectTy.<a class="code" href="classclang_1_1QualType.html#a4a3d75cf019a2e769498ef8d6878888b" title="Retrieve the set of qualifiers applied to this type.">getQualifiers</a>();</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>     <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> BaseLV = <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa0edab9cd404123428caf6cf599aa09e">EmitLValue</a>(BaseExpr);</div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>     <span class="comment">// FIXME: this isn't right for bitfields.</span></div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>     BaseValue = BaseLV.<a class="code" href="classclang_1_1CodeGen_1_1LValue.html#a5ed4224f90d6bb056bc6df1523c3b7dd">getAddress</a>();</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>     ObjectTy = BaseExpr-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>();</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>     BaseQuals = ObjectTy.<a class="code" href="classclang_1_1QualType.html#a4a3d75cf019a2e769498ef8d6878888b" title="Retrieve the set of qualifiers applied to this type.">getQualifiers</a>();</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> </div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>   <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> LV =</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>     <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a4357c93c47371c808bda8a2d1033424a">EmitLValueForIvar</a>(ObjectTy, BaseValue, E-><a class="code" href="classclang_1_1ObjCIvarRefExpr.html#abaa63a7fb7b5fc4bf2d40c6ad41eca2c">getDecl</a>(),</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>                       BaseQuals.<a class="code" href="classclang_1_1Qualifiers.html#a19c0ea3017053bd2778611dd129a9b74">getCVRQualifiers</a>());</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>   <a class="code" href="CGExpr_8cpp.html#a0fd3115f4c271aaf43164db746e012dc">setObjCGCLValueClass</a>(<a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#a8a474f8f10090f44fc3e331d1e4b9ce0">getContext</a>(), E, LV);</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>   <span class="keywordflow">return</span> LV;</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span> }</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span> </div>
+<div class="line"><a name="l03115"></a><span class="lineno"><a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa135b08f6a2cb7af7cf60c45829895c9"> 3115</a></span> <a class="code" href="classclang_1_1CodeGen_1_1LValue.html">LValue</a> <a class="code" href="classclang_1_1CodeGen_1_1CodeGenFunction.html#aa135b08f6a2cb7af7cf60c45829895c9">CodeGenFunction::EmitStmtExprLValue</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1StmtExpr.html">StmtExpr</a> *E) {</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>   <span class="comment">// Can only get l-value for message expression returning aggregate type</span></div>
+<div class="line"><a name=&q