[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/HeaderMap_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8cpp_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8cpp_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8cpp_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,307 @@
+<!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: HeaderMap.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_925be8e1c75f746b0aee1084b3b1a980.html">Lex</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderMap.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderMap_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">//===--- HeaderMap.cpp - A file that acts like dir of symlinks ------------===//</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">//                     The LLVM Compiler Infrastructure</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">// This file implements the HeaderMap interface.</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="HeaderMap_8h.html">clang/Lex/HeaderMap.h</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor">#include "<a class="code" href="CharInfo_8h.html">clang/Basic/CharInfo.h</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor">#include "<a class="code" href="FileManager_8h.html" title="Defines the clang::FileManager interface and associated types.">clang/Basic/FileManager.h</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "llvm/ADT/OwningPtr.h"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "llvm/ADT/SmallString.h"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include "llvm/Support/DataTypes.h"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "llvm/Support/MathExtras.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "llvm/Support/MemoryBuffer.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <cstdio></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="keyword">using namespace </span>clang;</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">// Data Structures and Manifest Constants</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca98ea9bd475b6ca5927053cf20a1bf30d">   30</a></span>   <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca98ea9bd475b6ca5927053cf20a1bf30d">HMAP_HeaderMagicNumber</a> = (<span class="charliteral">'h'</span> << 24) | (<span class="charliteral">'m'</span> << 16) | (<span class="charliteral">'a'</span> << 8) | <span class="charliteral">'p'</span>,</div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca041be902d8404f4e1d55dafb98f89e46">   31</a></span>   <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca041be902d8404f4e1d55dafb98f89e46">HMAP_HeaderVersion</a> = 1,</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca95aa4b5fa3fee34c80e94597c4204562">   33</a></span>   <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca95aa4b5fa3fee34c80e94597c4204562">HMAP_EmptyBucketKey</a> = 0</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> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keyword">namespace </span>clang {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="structclang_1_1HMapBucket.html">   37</a></span> <span class="keyword">struct </span><a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">   38</a></span>   uint32_t <a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a>;          <span class="comment">// Offset (into strings) of key.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">   40</a></span>   uint32_t <a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">Prefix</a>;     <span class="comment">// Offset (into strings) of value prefix.</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">   41</a></span>   uint32_t <a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">Suffix</a>;     <span class="comment">// Offset (into strings) of value suffix.</span></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> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html">   44</a></span> <span class="keyword">struct </span><a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#aef34aeced688b0a72d369b10b0818876">   45</a></span>   uint32_t <a class="code" href="structclang_1_1HMapHeader.html#aef34aeced688b0a72d369b10b0818876">Magic</a>;           <span class="comment">// Magic word, also indicates byte order.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#a2f9a55bbd7412337d3e6106eb6cb3595">   46</a></span>   uint16_t <a class="code" href="structclang_1_1HMapHeader.html#a2f9a55bbd7412337d3e6106eb6cb3595">Version</a>;         <span class="comment">// Version number -- currently 1.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#a635ce0f56847a6bb1b9cfae114504226">   47</a></span>   uint16_t <a class="code" href="structclang_1_1HMapHeader.html#a635ce0f56847a6bb1b9cfae114504226">Reserved</a>;        <span class="comment">// Reserved for future use - zero for now.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#a42f69bd94fa2bd5abf1e746de5cde630">   48</a></span>   uint32_t <a class="code" href="structclang_1_1HMapHeader.html#a42f69bd94fa2bd5abf1e746de5cde630">StringsOffset</a>;   <span class="comment">// Offset to start of string pool.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#a1fca736da8ff889c0270563ae2297d77">   49</a></span>   uint32_t <a class="code" href="structclang_1_1HMapHeader.html#a1fca736da8ff889c0270563ae2297d77">NumEntries</a>;      <span class="comment">// Number of entries in the string table.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#a495b1ee5887446316615dcc1505c9f24">   50</a></span>   uint32_t <a class="code" href="structclang_1_1HMapHeader.html#a495b1ee5887446316615dcc1505c9f24">NumBuckets</a>;      <span class="comment">// Number of buckets (always a power of 2).</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="code" href="structclang_1_1HMapHeader.html#a70798627c8da5abb3eba233a506eef1d">   51</a></span>   uint32_t <a class="code" href="structclang_1_1HMapHeader.html#a70798627c8da5abb3eba233a506eef1d">MaxValueLength</a>;  <span class="comment">// Length of longest result path (excluding nul).</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">// An array of 'NumBuckets' HMapBucket objects follows this header.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="comment">// Strings follow the buckets, at StringsOffset.</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> };</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> } <span class="comment">// end namespace clang.</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/// HashHMapKey - This is the 'well known' hash function required by the file</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/// format, used to look up keys in the hash table.  The hash table uses simple</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/// linear probing based on this function.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="HeaderMap_8cpp.html#ad0879de56deb60dedfd353d15dba30c2">   60</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="HeaderMap_8cpp.html#ad0879de56deb60dedfd353d15dba30c2">HashHMapKey</a>(StringRef Str) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordtype">unsigned</span> Result = 0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a> = Str.begin(), *End = Str.end();</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span> (; S != End; S++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     Result += <a class="code" href="namespaceclang.html#a4da5e31b959a5058d047f4ac3af66a97">toLowercase</a>(*S) * 13;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordflow">return</span> Result;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> }</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">// Verification and Construction</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/// HeaderMap::Create - This attempts to load the specified file as a header</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/// map.  If it doesn't look like a HeaderMap, it gives up and returns null.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/// If it looks like a HeaderMap but is obviously corrupted, it puts a reason</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/// into the string error argument and returns null.</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderMap.html#ae54eb6c840cd1b8245a0e5298c05f7b6">   79</a></span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> *<a class="code" href="classclang_1_1HeaderMap.html#ae54eb6c840cd1b8245a0e5298c05f7b6">HeaderMap::Create</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE, <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FM) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="comment">// If the file is too small to be a header map, ignore it.</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">unsigned</span> FileSize = FE-><a class="code" href="classclang_1_1FileEntry.html#aee560da94e38d95f08dfa9779acc9367">getSize</a>();</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordflow">if</span> (FileSize <= <span class="keyword">sizeof</span>(<a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a>)) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <a class="code" href="classllvm_1_1OwningPtr.html">OwningPtr<const llvm::MemoryBuffer></a> FileBuffer(FM.<a class="code" href="classclang_1_1FileManager.html#a4aedd4bd4b3dc2a8df7f3dba692464a8" title="Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful, otherwise returning null.">getBufferForFile</a>(FE));</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">if</span> (!FileBuffer) <span class="keywordflow">return</span> 0;  <span class="comment">// Unreadable file?</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *FileStart = FileBuffer->getBufferStart();</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="comment">// We know the file is at least as big as the header, check it now.</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a> *Header = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a>*<span class="keyword">></span>(FileStart);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">// Sniff it to see if it's a headermap by checking the magic number and</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="comment">// version.</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordtype">bool</span> NeedsByteSwap;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordflow">if</span> (Header-><a class="code" href="structclang_1_1HMapHeader.html#aef34aeced688b0a72d369b10b0818876">Magic</a> == <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca98ea9bd475b6ca5927053cf20a1bf30d">HMAP_HeaderMagicNumber</a> &&</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       Header-><a class="code" href="structclang_1_1HMapHeader.html#a2f9a55bbd7412337d3e6106eb6cb3595">Version</a> == <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca041be902d8404f4e1d55dafb98f89e46">HMAP_HeaderVersion</a>)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     NeedsByteSwap = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Header-><a class="code" href="structclang_1_1HMapHeader.html#aef34aeced688b0a72d369b10b0818876">Magic</a> == llvm::ByteSwap_32(<a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca98ea9bd475b6ca5927053cf20a1bf30d">HMAP_HeaderMagicNumber</a>) &&</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>            Header-><a class="code" href="structclang_1_1HMapHeader.html#a2f9a55bbd7412337d3e6106eb6cb3595">Version</a> == llvm::ByteSwap_16(<a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca041be902d8404f4e1d55dafb98f89e46">HMAP_HeaderVersion</a>))</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     NeedsByteSwap = <span class="keyword">true</span>;  <span class="comment">// Mixed endianness headermap.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">return</span> 0;  <span class="comment">// Not a header map.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span> (Header-><a class="code" href="structclang_1_1HMapHeader.html#a635ce0f56847a6bb1b9cfae114504226">Reserved</a> != 0) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="comment">// Okay, everything looks good, create the header map.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a>(FileBuffer.take(), NeedsByteSwap);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderMap.html#a716a27ec1805d5975d59ea2a5ef9b742">  109</a></span> <a class="code" href="classclang_1_1HeaderMap.html#a716a27ec1805d5975d59ea2a5ef9b742">HeaderMap::~HeaderMap</a>() {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keyword">delete</span> FileBuffer;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">//  Utility Methods</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/// getFileName - Return the filename of the headermap.</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderMap.html#afddebce90d1f900746a22562e1440686">  119</a></span> <span class="comment"></span><span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classclang_1_1HeaderMap.html#afddebce90d1f900746a22562e1440686" title="getFileName - Return the filename of the headermap.">HeaderMap::getFileName</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">return</span> FileBuffer->getBufferIdentifier();</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keywordtype">unsigned</span> HeaderMap::getEndianAdjustedWord(<span class="keywordtype">unsigned</span> <a class="code" href="namespaceclang_1_1tooling.html#ad61cfdb049c401f2669516dc65c93f91">X</a>)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordflow">if</span> (!NeedsBSwap) <span class="keywordflow">return</span> <a class="code" href="namespaceclang_1_1tooling.html#ad61cfdb049c401f2669516dc65c93f91">X</a>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">return</span> llvm::ByteSwap_32(X);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment"></span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/// getHeader - Return a reference to the file header, in unbyte-swapped form.</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/// This method cannot fail.</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a> &HeaderMap::getHeader()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="comment">// We know the file is at least as big as the header.  Return it.</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a>*<span class="keyword">></span>(FileBuffer->getBufferStart());</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment"></span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/// getBucket - Return the specified hash table bucket from the header map,</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/// bswap'ing its fields as appropriate.  If the bucket number is not valid,</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">/// this return a bucket with an empty key (0).</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment"></span><a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> HeaderMap::getBucket(<span class="keywordtype">unsigned</span> BucketNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> Result;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   Result.<a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a> = <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca95aa4b5fa3fee34c80e94597c4204562">HMAP_EmptyBucketKey</a>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> *BucketArray =</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a>*<span class="keyword">></span>(FileBuffer->getBufferStart() +</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                         <span class="keyword">sizeof</span>(<a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a>));</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> *BucketPtr = BucketArray+BucketNo;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">if</span> ((<span class="keyword">const</span> <span class="keywordtype">char</span>*)(BucketPtr+1) > FileBuffer->getBufferEnd()) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     Result.<a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">Prefix</a> = 0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     Result.<a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">Suffix</a> = 0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">return</span> Result;  <span class="comment">// Invalid buffer, corrupt hmap.</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="comment">// Otherwise, the bucket is valid.  Load the values, bswapping as needed.</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   Result.<a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a>    = getEndianAdjustedWord(BucketPtr-><a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   Result.<a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">Prefix</a> = getEndianAdjustedWord(BucketPtr-><a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">Prefix</a>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   Result.<a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">Suffix</a> = getEndianAdjustedWord(BucketPtr-><a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">Suffix</a>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordflow">return</span> Result;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment"></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">/// getString - Look up the specified string in the string table.  If the string</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">/// index is not valid, it returns an empty string.</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment"></span><span class="keyword">const</span> <span class="keywordtype">char</span> *HeaderMap::getString(<span class="keywordtype">unsigned</span> StrTabIdx)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="comment">// Add the start of the string table to the idx.</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   StrTabIdx += getEndianAdjustedWord(getHeader().StringsOffset);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="comment">// Check for invalid index.</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">if</span> (StrTabIdx >= FileBuffer->getBufferSize())</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">return</span> 0;</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>   <span class="comment">// Otherwise, we have a valid pointer into the file.  Just return it.  We know</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="comment">// that the "string" can not overrun the end of the file, because the buffer</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="comment">// is nul terminated by virtue of being a MemoryBuffer.</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">return</span> FileBuffer->getBufferStart()+StrTabIdx;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">// The Main Drivers</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment"></span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">/// dump - Print the contents of this headermap to stderr.</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderMap.html#af5fa2d9ed296ecf5b210f5e7198e4d92">  181</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderMap.html#af5fa2d9ed296ecf5b210f5e7198e4d92" title="dump - Print the contents of this headermap to stderr.">HeaderMap::dump</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a> &Hdr = getHeader();</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordtype">unsigned</span> NumBuckets = getEndianAdjustedWord(Hdr.<a class="code" href="structclang_1_1HMapHeader.html#a495b1ee5887446316615dcc1505c9f24">NumBuckets</a>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   fprintf(stderr, <span class="stringliteral">"Header Map %s:\n  %d buckets, %d entries\n"</span>,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>           <a class="code" href="classclang_1_1HeaderMap.html#afddebce90d1f900746a22562e1440686" title="getFileName - Return the filename of the headermap.">getFileName</a>(), NumBuckets,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>           getEndianAdjustedWord(Hdr.<a class="code" href="structclang_1_1HMapHeader.html#a1fca736da8ff889c0270563ae2297d77">NumEntries</a>));</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumBuckets; ++i) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> B = getBucket(i);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">if</span> (B.<a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a> == <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca95aa4b5fa3fee34c80e94597c4204562">HMAP_EmptyBucketKey</a>) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *Key    = getString(B.<a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *Prefix = getString(B.<a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">Prefix</a>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *Suffix = getString(B.<a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">Suffix</a>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     fprintf(stderr, <span class="stringliteral">"  %d. %s -> '%s' '%s'\n"</span>, i, Key, Prefix, Suffix);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment"></span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">/// LookupFile - Check to see if the specified relative filename is located in</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">/// this HeaderMap.  If so, open it and return its FileEntry.</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderMap.html#a63ac37bf7a0dcc77856b4070066c35a9">  202</a></span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1HeaderMap.html#a63ac37bf7a0dcc77856b4070066c35a9">HeaderMap::LookupFile</a>(</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     StringRef Filename, <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FM)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a> &Hdr = getHeader();</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordtype">unsigned</span> NumBuckets = getEndianAdjustedWord(Hdr.<a class="code" href="structclang_1_1HMapHeader.html#a495b1ee5887446316615dcc1505c9f24">NumBuckets</a>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="comment">// If the number of buckets is not a power of two, the headermap is corrupt.</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="comment">// Don't probe infinitely.</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordflow">if</span> (NumBuckets & (NumBuckets-1))</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="comment">// Linearly probe the hash table.</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Bucket = <a class="code" href="HeaderMap_8cpp.html#ad0879de56deb60dedfd353d15dba30c2">HashHMapKey</a>(Filename);; ++Bucket) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> B = getBucket(Bucket & (NumBuckets-1));</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">if</span> (B.<a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a> == <a class="code" href="HeaderMap_8cpp.html#ab79db5277fcbe695243c6d68332cbf4ca95aa4b5fa3fee34c80e94597c4204562">HMAP_EmptyBucketKey</a>) <span class="keywordflow">return</span> 0; <span class="comment">// Hash miss.</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="comment">// See if the key matches.  If not, probe on.</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span> (!Filename.equals_lower(getString(B.<a class="code" href="structclang_1_1HMapBucket.html#abbb474c2327110388356067d59360f0e">Key</a>)))</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="comment">// If so, we have a match in the hash table.  Construct the destination</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="comment">// path.</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> DestPath;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     DestPath += getString(B.<a class="code" href="structclang_1_1HMapBucket.html#a290d945e9661ad1c1f75882502ed529f">Prefix</a>);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     DestPath += getString(B.<a class="code" href="structclang_1_1HMapBucket.html#a4aa5b5cac7aef93b14af497eba5310e8">Suffix</a>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">return</span> FM.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(DestPath.str());</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8d_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8d_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8d_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8d_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,178 @@
+<!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: HeaderMap.d Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">clang API Documentation</p>
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void
 (0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(11)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(12)"><span class="SelectionMark"> </span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_f65986501076cc710d4b9355ae3fe06d.html">clang</a></li><li class="navelem"><a class="el" href="dir_87e2a7550f83bd8cbfc92736891468fc.html">lib</a></li><li class="navelem"><a class="el" href="dir_925be8e1c75f746b0aee1084b3b1a980.html">Lex</a></li><li class="navelem"><a class="el" href="dir_c266f83cbdf5b0cb8b651438a3cfe616.html">Release+Asserts</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderMap.d</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderMap_8d.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Release+Asserts/HeaderMap.o \</div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Release+Asserts/HeaderMap.d: \</div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>  HeaderMap.cpp \</div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderMap.h \</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LLVM.h \</div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>  /home/tstellar/llvm/include/llvm/Support/Casting.h \</div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>  /home/tstellar/llvm/include/llvm/Support/type_traits.h \</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>  /home/tstellar/llvm/include/llvm/Support/DataTypes.h \</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>  /home/tstellar/llvm/include/llvm/ADT/None.h \</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>  /home/tstellar/llvm/include/llvm/Support/Compiler.h \</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>  /home/tstellar/llvm/include/llvm/Config/llvm-config.h \</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/CharInfo.h \</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>  /home/tstellar/llvm/include/llvm/ADT/StringRef.h \</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileManager.h \</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileSystemOptions.h \</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>  /home/tstellar/llvm/include/llvm/ADT/DenseMap.h \</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>  /home/tstellar/llvm/include/llvm/ADT/DenseMapInfo.h \</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>  /home/tstellar/llvm/include/llvm/Support/PointerLikeTypeTraits.h \</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>  /home/tstellar/llvm/include/llvm/Support/AlignOf.h \</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>  /home/tstellar/llvm/include/llvm/Support/MathExtras.h \</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>  /home/tstellar/llvm/include/llvm/Support/SwapByteOrder.h \</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>  /home/tstellar/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h \</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>  /home/tstellar/llvm/include/llvm/ADT/OwningPtr.h \</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>  /home/tstellar/llvm/include/llvm/ADT/SmallVector.h \</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>  /home/tstellar/llvm/include/llvm/ADT/StringMap.h \</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>  /home/tstellar/llvm/include/llvm/Support/<a class="code" href="Format_8cpp.html#a0805f884ee63233d49322f71926371de">Allocator</a>.h \</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  /home/tstellar/llvm/include/llvm/Support/FileSystem.h \</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  /home/tstellar/llvm/include/llvm/ADT/SmallString.h \</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>  /home/tstellar/llvm/include/llvm/ADT/Twine.h \</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>  /home/tstellar/llvm/include/llvm/Support/ErrorHandling.h \</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>  /home/tstellar/llvm/include/llvm/Support/TimeValue.h \</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>  /home/tstellar/llvm/include/llvm/Support/system_error.h \</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>  /home/tstellar/llvm/include/llvm/Support/MemoryBuffer.h \</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>  /home/tstellar/llvm/include/llvm/Support/CBindingWrapping.h \</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>  /home/tstellar/llvm/include/llvm-c/Core.h</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderMap.h:</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LLVM.h:</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> /home/tstellar/llvm/include/llvm/Support/Casting.h:</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> /home/tstellar/llvm/include/llvm/Support/type_traits.h:</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> /home/tstellar/llvm/include/llvm/Support/DataTypes.h:</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> /home/tstellar/llvm/include/llvm/ADT/None.h:</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> /home/tstellar/llvm/include/llvm/Support/Compiler.h:</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> /home/tstellar/llvm/include/llvm/Config/llvm-config.h:</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/CharInfo.h:</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> /home/tstellar/llvm/include/llvm/ADT/StringRef.h:</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileManager.h:</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> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileSystemOptions.h:</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> /home/tstellar/llvm/include/llvm/ADT/DenseMap.h:</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> /home/tstellar/llvm/include/llvm/ADT/DenseMapInfo.h:</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> /home/tstellar/llvm/include/llvm/Support/PointerLikeTypeTraits.h:</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> /home/tstellar/llvm/include/llvm/Support/AlignOf.h:</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> /home/tstellar/llvm/include/llvm/Support/MathExtras.h:</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> /home/tstellar/llvm/include/llvm/Support/SwapByteOrder.h:</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> /home/tstellar/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:</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> /home/tstellar/llvm/include/llvm/ADT/OwningPtr.h:</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> /home/tstellar/llvm/include/llvm/ADT/SmallVector.h:</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> /home/tstellar/llvm/include/llvm/ADT/StringMap.h:</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> /home/tstellar/llvm/include/llvm/Support/<a class="code" href="Format_8cpp.html#a0805f884ee63233d49322f71926371de">Allocator</a>.h:</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> /home/tstellar/llvm/include/llvm/Support/FileSystem.h:</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> /home/tstellar/llvm/include/llvm/ADT/SmallString.h:</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> /home/tstellar/llvm/include/llvm/ADT/Twine.h:</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> /home/tstellar/llvm/include/llvm/Support/ErrorHandling.h:</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> /home/tstellar/llvm/include/llvm/Support/TimeValue.h:</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> /home/tstellar/llvm/include/llvm/Support/system_error.h:</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> /home/tstellar/llvm/include/llvm/Support/MemoryBuffer.h:</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> /home/tstellar/llvm/include/llvm/Support/CBindingWrapping.h:</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> /home/tstellar/llvm/include/llvm-c/Core.h:</div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8h_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8h_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderMap_8h_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,152 @@
+<!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: HeaderMap.h 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_3e61bbac0c8515a3c083eb51d03eb390.html">include</a></li><li class="navelem"><a class="el" href="dir_ee4f288247dc2d9ccd0382aea6916312.html">clang</a></li><li class="navelem"><a class="el" href="dir_49bfb562b5f2c4dac4f33842ea680dda.html">Lex</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderMap.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderMap_8h.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">//===--- HeaderMap.h - A file that acts like dir of symlinks ----*- C++ -*-===//</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">//                     The LLVM Compiler Infrastructure</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">// This file defines the HeaderMap interface.</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">#ifndef LLVM_CLANG_LEX_HEADERMAP_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor"></span><span class="preprocessor">#define LLVM_CLANG_LEX_HEADERMAP_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "<a class="code" href="LLVM_8h.html" title="Forward declares and imports various common LLVM datatypes that clang wants to use unqualified...">clang/Basic/LLVM.h</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "llvm/Support/Compiler.h"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="keyword">namespace </span>llvm {</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>   <span class="keyword">class </span>MemoryBuffer;</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> }</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="keyword">namespace </span>clang {</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>   <span class="keyword">class </span>FileEntry;</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>   <span class="keyword">class </span>FileManager;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>   <span class="keyword">struct </span>HMapBucket;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>   <span class="keyword">struct </span>HMapHeader;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/// This class represents an Apple concept known as a 'header map'.  To the</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/// \#include file resolution process, it basically acts like a directory of</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/// symlinks to files.  Its advantages are that it is dense and more efficient</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/// to create and process than a directory of symlinks.</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderMap.html">   33</a></span> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> &) LLVM_DELETED_FUNCTION;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> &) LLVM_DELETED_FUNCTION;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keyword">const</span> llvm::MemoryBuffer *FileBuffer;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">bool</span> NeedsBSwap;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a>(<span class="keyword">const</span> llvm::MemoryBuffer *File, <span class="keywordtype">bool</span> BSwap)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>     : FileBuffer(File), NeedsBSwap(BSwap) {</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> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <a class="code" href="classclang_1_1HeaderMap.html#a716a27ec1805d5975d59ea2a5ef9b742">~HeaderMap</a>();</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  /// HeaderMap::Create - This attempts to load the specified file as a header</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  /// map.  If it doesn't look like a HeaderMap, it gives up and returns null.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"></span>  <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> *<a class="code" href="classclang_1_1HeaderMap.html#ae54eb6c840cd1b8245a0e5298c05f7b6">Create</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE, <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FM);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">  /// LookupFile - Check to see if the specified relative filename is located in</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">  /// this HeaderMap.  If so, open it and return its FileEntry.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">  /// If RawPath is not NULL and the file is found, RawPath will be set to the</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">  /// raw path at which the file was found in the file system. For example,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">  /// for a search path ".." and a filename "../file.h" this would be</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">  /// "../../file.h".</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1HeaderMap.html#a63ac37bf7a0dcc77856b4070066c35a9">LookupFile</a>(StringRef Filename, <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FM) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">  /// getFileName - Return the filename of the headermap.</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"></span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classclang_1_1HeaderMap.html#afddebce90d1f900746a22562e1440686" title="getFileName - Return the filename of the headermap.">getFileName</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  /// dump - Print the contents of this headermap to stderr.</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderMap.html#af5fa2d9ed296ecf5b210f5e7198e4d92" title="dump - Print the contents of this headermap to stderr.">dump</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">unsigned</span> getEndianAdjustedWord(<span class="keywordtype">unsigned</span> <a class="code" href="namespaceclang_1_1tooling.html#ad61cfdb049c401f2669516dc65c93f91">X</a>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keyword">const</span> <a class="code" href="structclang_1_1HMapHeader.html">HMapHeader</a> &getHeader() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <a class="code" href="structclang_1_1HMapBucket.html">HMapBucket</a> getBucket(<span class="keywordtype">unsigned</span> BucketNo) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *getString(<span class="keywordtype">unsigned</span> StrTabIdx) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> };</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> } <span class="comment">// end namespace clang.</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearchOptions_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearchOptions_8h_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearchOptions_8h_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearchOptions_8h_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,245 @@
+<!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: HeaderSearchOptions.h 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_3e61bbac0c8515a3c083eb51d03eb390.html">include</a></li><li class="navelem"><a class="el" href="dir_ee4f288247dc2d9ccd0382aea6916312.html">clang</a></li><li class="navelem"><a class="el" href="dir_49bfb562b5f2c4dac4f33842ea680dda.html">Lex</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderSearchOptions.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderSearchOptions_8h.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">//===--- HeaderSearchOptions.h ----------------------------------*- C++ -*-===//</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> </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="preprocessor">#ifndef LLVM_CLANG_LEX_HEADERSEARCHOPTIONS_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="preprocessor"></span><span class="preprocessor">#define LLVM_CLANG_LEX_HEADERSEARCHOPTIONS_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="preprocessor">#include "<a class="code" href="LLVM_8h.html" title="Forward declares and imports various common LLVM datatypes that clang wants to use unqualified...">clang/Basic/LLVM.h</a>"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="preprocessor">#include "llvm/ADT/IntrusiveRefCntPtr.h"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor">#include "llvm/ADT/SetVector.h"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor">#include "llvm/ADT/StringRef.h"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="keyword">namespace </span>clang {</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="keyword">namespace </span>frontend {<span class="comment"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">  /// IncludeDirGroup - Identifiers the group a include entry belongs to, which</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">  /// represents its relative positive in the search list.  A \#include of a ""</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">  /// path starts at the -iquote group, then searches the Angled group, then</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">  /// searches the system group, etc.</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063a">   27</a></span> <span class="comment"></span>  <span class="keyword">enum</span> <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063a">IncludeDirGroup</a> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aabe59df1a2dfe245f9dcfb2fc5516ad57">   28</a></span>     <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aabe59df1a2dfe245f9dcfb2fc5516ad57" title="'#include ""' paths, added by 'gcc -iquote'.">Quoted</a> = 0,     <span class="comment">///< '\#include ""' paths, added by 'gcc -iquote'.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa18303c35ec8f80fe77f3ff0d5e0d123f">   29</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa18303c35ec8f80fe77f3ff0d5e0d123f" title="Paths for '#include <>' added by '-I'.">Angled</a>,         <span class="comment">///< Paths for '\#include <>' added by '-I'.</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aae74586d678e9b375a845823cc7ec20cc">   30</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aae74586d678e9b375a845823cc7ec20cc">IndexHeaderMap</a>, <span class="comment">///< Like Angled, but marks header maps used when</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"></span><span class="comment">                       ///  building frameworks.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa7ab4b46f5b11d87091cd7b67402da1ea">   32</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa7ab4b46f5b11d87091cd7b67402da1ea" title="building frameworks.">System</a>,         <span class="comment">///< Like Angled, but marks system directories.</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aac3871ca76b28c20ad0fed2b450a10025">   33</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aac3871ca76b28c20ad0fed2b450a10025">ExternCSystem</a>,  <span class="comment">///< Like System, but headers are implicitly wrapped in</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"></span><span class="comment">                    ///  extern "C".</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa25ce4dfbbc76e13bee75700048bd6386">   35</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa25ce4dfbbc76e13bee75700048bd6386" title="Like System, but only used for C.">CSystem</a>,        <span class="comment">///< Like System, but only used for C.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa1818044ff45a4f5799bdea1372c57edd">   36</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aa1818044ff45a4f5799bdea1372c57edd" title="Like System, but only used for C++.">CXXSystem</a>,      <span class="comment">///< Like System, but only used for C++.</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aad8ae01da6e74473aec4f3503a293b8f3">   37</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aad8ae01da6e74473aec4f3503a293b8f3" title="Like System, but only used for ObjC.">ObjCSystem</a>,     <span class="comment">///< Like System, but only used for ObjC.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aaf1e7a3bffd6687e28703345aefc52e99">   38</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aaf1e7a3bffd6687e28703345aefc52e99" title="Like System, but only used for ObjC++.">ObjCXXSystem</a>,   <span class="comment">///< Like System, but only used for ObjC++.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aaf30f2edbc8421eedc452b2e20537e96c">   39</a></span> <span class="comment"></span>    <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063aaf30f2edbc8421eedc452b2e20537e96c" title="Like System, but searched after the system directories.">After</a>           <span class="comment">///< Like System, but searched after the system directories.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"></span>  };</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> }</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/// HeaderSearchOptions - Helper class for storing options related to the</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/// initialization of the HeaderSearch object.</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html">   45</a></span> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classclang_1_1HeaderSearchOptions.html">HeaderSearchOptions</a> : <span class="keyword">public</span> <a class="code" href="classllvm_1_1RefCountedBase.html">RefCountedBase</a><HeaderSearchOptions> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html">   47</a></span>   <span class="keyword">struct </span><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html">Entry</a> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a288b55e3fcc00ead4f5a98e5993a792b">   48</a></span>     std::string <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a288b55e3fcc00ead4f5a98e5993a792b">Path</a>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a15fac189b02d8e6498f5ca42acc025a3">   49</a></span>     <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063a">frontend::IncludeDirGroup</a> <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a15fac189b02d8e6498f5ca42acc025a3">Group</a>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a9c22b253b2d1671ec495aa86faee1085">   50</a></span>     <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a9c22b253b2d1671ec495aa86faee1085">IsFramework</a> : 1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="comment"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">    /// IgnoreSysRoot - This is false if an absolute path should be treated</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">    /// relative to the sysroot, or true if it should always be the absolute</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">    /// path.</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#aca2c90ab43e0ea8786f0fb7b5c03b166">   55</a></span> <span class="comment"></span>    <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#aca2c90ab43e0ea8786f0fb7b5c03b166">IgnoreSysRoot</a> : 1;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a665cbdb768a4028e3e7235f8693858f5">   57</a></span>     <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a665cbdb768a4028e3e7235f8693858f5">Entry</a>(StringRef path, <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063a">frontend::IncludeDirGroup</a> group, <span class="keywordtype">bool</span> isFramework,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>           <span class="keywordtype">bool</span> ignoreSysRoot)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       : <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a288b55e3fcc00ead4f5a98e5993a792b">Path</a>(path), <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a15fac189b02d8e6498f5ca42acc025a3">Group</a>(group), <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#a9c22b253b2d1671ec495aa86faee1085">IsFramework</a>(isFramework),</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html#aca2c90ab43e0ea8786f0fb7b5c03b166">IgnoreSysRoot</a>(ignoreSysRoot) {}</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   };</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html">   63</a></span>   <span class="keyword">struct </span><a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html">SystemHeaderPrefix</a> {<span class="comment"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">    /// A prefix to be matched against paths in \#include directives.</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#a68ef3c825ab0b45730817c848f93cdb1">   65</a></span> <span class="comment"></span>    std::string <a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#a68ef3c825ab0b45730817c848f93cdb1" title="A prefix to be matched against paths in #include directives.">Prefix</a>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">    /// True if paths beginning with this prefix should be treated as system</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">    /// headers.</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#a6c1e944ba65c02eec8f87f3749960403">   69</a></span> <span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#a6c1e944ba65c02eec8f87f3749960403">IsSystemHeader</a>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#ad17c7534e6869445a1f10c9703ea19e7">   71</a></span>     <a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#ad17c7534e6869445a1f10c9703ea19e7">SystemHeaderPrefix</a>(StringRef <a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#a68ef3c825ab0b45730817c848f93cdb1" title="A prefix to be matched against paths in #include directives.">Prefix</a>, <span class="keywordtype">bool</span> <a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html#a6c1e944ba65c02eec8f87f3749960403">IsSystemHeader</a>)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       : Prefix(Prefix), IsSystemHeader(IsSystemHeader) {}</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   };</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">  /// If non-empty, the directory to use as a "virtual system root" for include</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">  /// paths.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a7b2c49429c3e24836a745727bd14dfbb">   77</a></span> <span class="comment"></span>  std::string <a class="code" href="classclang_1_1HeaderSearchOptions.html#a7b2c49429c3e24836a745727bd14dfbb">Sysroot</a>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">  /// User specified include entries.</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#ac2921b3f83d750de31ce2dbf7aa62c9c">   80</a></span> <span class="comment"></span>  std::vector<Entry> <a class="code" href="classclang_1_1HeaderSearchOptions.html#ac2921b3f83d750de31ce2dbf7aa62c9c" title="User specified include entries.">UserEntries</a>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"></span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">  /// User-specified system header prefixes.</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a5245b2e519d69e1e3c93eae9aab82cb9">   83</a></span> <span class="comment"></span>  std::vector<SystemHeaderPrefix> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a5245b2e519d69e1e3c93eae9aab82cb9" title="User-specified system header prefixes.">SystemHeaderPrefixes</a>;</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">  /// The directory which holds the compiler resource files (builtin includes,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">  /// etc.).</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#ac3915152e45f4ff70c81bd8f48947006">   87</a></span> <span class="comment"></span>  std::string <a class="code" href="classclang_1_1HeaderSearchOptions.html#ac3915152e45f4ff70c81bd8f48947006">ResourceDir</a>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">  /// \brief The directory used for the module cache.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a8c2a9d11a35b6c25f5700273fc816610">   90</a></span> <span class="comment"></span>  std::string <a class="code" href="classclang_1_1HeaderSearchOptions.html#a8c2a9d11a35b6c25f5700273fc816610" title="The directory used for the module cache.">ModuleCachePath</a>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  /// \brief Whether we should disable the use of the hash string within the</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">  /// module cache.</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">  /// Note: Only used for testing!</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#af41794d056b511092d3b9016bad29a72">   96</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#af41794d056b511092d3b9016bad29a72" title="Whether we should disable the use of the hash string within the module cache.">DisableModuleHash</a> : 1;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">  /// \brief Interpret module maps.  This option is implied by full modules.</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a345ccf6903b35488958d5a0cc54862bd">   99</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a345ccf6903b35488958d5a0cc54862bd" title="Interpret module maps. This option is implied by full modules.">ModuleMaps</a> : 1;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment"></span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">  /// \brief The interval (in seconds) between pruning operations.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">  /// This operation is expensive, because it requires Clang to walk through</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">  /// the directory structure of the module cache, stat()'ing and removing</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">  /// files.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">  /// The default value is large, e.g., the operation runs once a week.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a1ae175391f10d03bf5f0630dfad836a5">  108</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a1ae175391f10d03bf5f0630dfad836a5" title="The interval (in seconds) between pruning operations.">ModuleCachePruneInterval</a>;</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">  /// \brief The time (in seconds) after which an unused module file will be</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">  /// considered unused and will, therefore, be pruned.</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">  /// When the module cache is pruned, any module file that has not been</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">  /// accessed in this many seconds will be removed. The default value is</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">  /// large, e.g., a month, to avoid forcing infrequently-used modules to be</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">  /// regenerated often.</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#ae38bd3c3f7c7d3e696eba59d484f7b32">  117</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#ae38bd3c3f7c7d3e696eba59d484f7b32" title="The time (in seconds) after which an unused module file will be considered unused and will...">ModuleCachePruneAfter</a>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">  /// \brief The set of macro names that should be ignored for the purposes</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">  /// of computing the module hash.</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a2144688937661163b5188a19edd834c6">  121</a></span> <span class="comment"></span>  llvm::SetVector<std::string> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a2144688937661163b5188a19edd834c6" title="The set of macro names that should be ignored for the purposes of computing the module hash...">ModulesIgnoreMacros</a>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment"></span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">  /// \brief The set of user-provided module-map-files.</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a207b52718d27dc4d4ac3c2e9c6ffcc0c">  124</a></span> <span class="comment"></span>  llvm::SetVector<std::string> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a207b52718d27dc4d4ac3c2e9c6ffcc0c" title="The set of user-provided module-map-files.">ModuleMapFiles</a>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment"></span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">  /// Include the compiler builtin includes.</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a9728d4297286c77fd6d306eda1d3aade">  127</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a9728d4297286c77fd6d306eda1d3aade" title="Include the compiler builtin includes.">UseBuiltinIncludes</a> : 1;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment"></span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">  /// Include the system standard include search directories.</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#accb2fa9a6d1af19217718168dedde735">  130</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#accb2fa9a6d1af19217718168dedde735" title="Include the system standard include search directories.">UseStandardSystemIncludes</a> : 1;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment"></span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">  /// Include the system standard C++ library include search directories.</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#aa50fb306fc3b3afd9772e2769cd798d5">  133</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#aa50fb306fc3b3afd9772e2769cd798d5" title="Include the system standard C++ library include search directories.">UseStandardCXXIncludes</a> : 1;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment"></span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">  /// Use libc++ instead of the default libstdc++.</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a9583c71fac1ed1bc2683a06e7895ee52">  136</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a9583c71fac1ed1bc2683a06e7895ee52" title="Use libc++ instead of the default libstdc++.">UseLibcxx</a> : 1;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment"></span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">  /// Whether header search information should be output as for -v.</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a0d5fa11981326cf2420f09932cedfb4a">  139</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a0d5fa11981326cf2420f09932cedfb4a" title="Whether header search information should be output as for -v.">Verbose</a> : 1;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a58aa6c7f01f7b1d30dae0ab7eb2438b5">  142</a></span>   <a class="code" href="classclang_1_1HeaderSearchOptions.html#a58aa6c7f01f7b1d30dae0ab7eb2438b5">HeaderSearchOptions</a>(StringRef _Sysroot = <span class="stringliteral">"/"</span>)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     : <a class="code" href="classclang_1_1HeaderSearchOptions.html#a7b2c49429c3e24836a745727bd14dfbb">Sysroot</a>(_Sysroot), <a class="code" href="classclang_1_1HeaderSearchOptions.html#af41794d056b511092d3b9016bad29a72" title="Whether we should disable the use of the hash string within the module cache.">DisableModuleHash</a>(0), <a class="code" href="classclang_1_1HeaderSearchOptions.html#a345ccf6903b35488958d5a0cc54862bd" title="Interpret module maps. This option is implied by full modules.">ModuleMaps</a>(0),</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       <a class="code" href="classclang_1_1HeaderSearchOptions.html#a1ae175391f10d03bf5f0630dfad836a5" title="The interval (in seconds) between pruning operations.">ModuleCachePruneInterval</a>(7*24*60*60),</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       <a class="code" href="classclang_1_1HeaderSearchOptions.html#ae38bd3c3f7c7d3e696eba59d484f7b32" title="The time (in seconds) after which an unused module file will be considered unused and will...">ModuleCachePruneAfter</a>(31*24*60*60),</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       <a class="code" href="classclang_1_1HeaderSearchOptions.html#a9728d4297286c77fd6d306eda1d3aade" title="Include the compiler builtin includes.">UseBuiltinIncludes</a>(<a class="code" href="stdbool_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>),</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       <a class="code" href="classclang_1_1HeaderSearchOptions.html#accb2fa9a6d1af19217718168dedde735" title="Include the system standard include search directories.">UseStandardSystemIncludes</a>(<a class="code" href="stdbool_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>), <a class="code" href="classclang_1_1HeaderSearchOptions.html#aa50fb306fc3b3afd9772e2769cd798d5" title="Include the system standard C++ library include search directories.">UseStandardCXXIncludes</a>(<a class="code" href="stdbool_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>),</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       <a class="code" href="classclang_1_1HeaderSearchOptions.html#a9583c71fac1ed1bc2683a06e7895ee52" title="Use libc++ instead of the default libstdc++.">UseLibcxx</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>), <a class="code" href="classclang_1_1HeaderSearchOptions.html#a0d5fa11981326cf2420f09932cedfb4a" title="Whether header search information should be output as for -v.">Verbose</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>) {}</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">  /// AddPath - Add the \p Path path to the specified \p Group list.</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a18bc3848e478f8a45338dfaa5285f0af">  151</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a18bc3848e478f8a45338dfaa5285f0af" title="AddPath - Add the Path path to the specified Group list.">AddPath</a>(StringRef Path, <a class="code" href="namespaceclang_1_1frontend.html#add3c3955b811cfaec91d27507d77063a">frontend::IncludeDirGroup</a> Group,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                <span class="keywordtype">bool</span> IsFramework, <span class="keywordtype">bool</span> IgnoreSysRoot) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <a class="code" href="classclang_1_1HeaderSearchOptions.html#ac2921b3f83d750de31ce2dbf7aa62c9c" title="User specified include entries.">UserEntries</a>.push_back(<a class="code" href="structclang_1_1HeaderSearchOptions_1_1Entry.html">Entry</a>(Path, Group, IsFramework, IgnoreSysRoot));</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="comment"></span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">  /// AddSystemHeaderPrefix - Override whether \#include directives naming a</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">  /// path starting with \p Prefix should be considered as naming a system</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">  /// header.</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearchOptions.html#a478b5321b95fc131b2cb15cbf867f68b">  159</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearchOptions.html#a478b5321b95fc131b2cb15cbf867f68b">AddSystemHeaderPrefix</a>(StringRef Prefix, <span class="keywordtype">bool</span> IsSystemHeader) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <a class="code" href="classclang_1_1HeaderSearchOptions.html#a5245b2e519d69e1e3c93eae9aab82cb9" title="User-specified system header prefixes.">SystemHeaderPrefixes</a>.push_back(<a class="code" href="structclang_1_1HeaderSearchOptions_1_1SystemHeaderPrefix.html">SystemHeaderPrefix</a>(Prefix, IsSystemHeader));</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</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="comment">// end namespace clang</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8cpp_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8cpp_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8cpp_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,1279 @@
+<!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: HeaderSearch.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_925be8e1c75f746b0aee1084b3b1a980.html">Lex</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderSearch.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderSearch_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">//===--- HeaderSearch.cpp - Resolve Header File Locations ---===//</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">//                     The LLVM Compiler Infrastructure</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">//  This file implements the DirectoryLookup and HeaderSearch interfaces.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="preprocessor">#include "<a class="code" href="HeaderSearch_8h.html">clang/Lex/HeaderSearch.h</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor">#include "<a class="code" href="Diagnostic_8h.html" title="Defines the Diagnostic-related interfaces.">clang/Basic/Diagnostic.h</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor">#include "<a class="code" href="FileManager_8h.html" title="Defines the clang::FileManager interface and associated types.">clang/Basic/FileManager.h</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "<a class="code" href="IdentifierTable_8h.html" title="Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.">clang/Basic/IdentifierTable.h</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "<a class="code" href="HeaderMap_8h.html">clang/Lex/HeaderMap.h</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include "<a class="code" href="HeaderSearchOptions_8h.html">clang/Lex/HeaderSearchOptions.h</a>"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "<a class="code" href="Lexer_8h.html">clang/Lex/Lexer.h</a>"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "llvm/ADT/SmallString.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include "llvm/Support/Capacity.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "llvm/Support/FileSystem.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "llvm/Support/Path.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "llvm/Support/raw_ostream.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <cstdio></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#if defined(LLVM_ON_UNIX)</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include <<a class="code" href="limits_8h.html">limits.h</a>></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="keyword">using namespace </span>clang;</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">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *</div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a4e3b8ee201e46b609f2c4494aa354314">   33</a></span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a4e3b8ee201e46b609f2c4494aa354314" title="Retrieve the controlling macro for this header file, if any.">HeaderFileInfo::getControllingMacro</a>(<a class="code" href="classclang_1_1ExternalIdentifierLookup.html" title="An abstract class used to resolve numerical identifier references (meaningful only to some external s...">ExternalIdentifierLookup</a> *External) {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordflow">if</span> (<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a>)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>     <span class="keywordflow">return</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordflow">if</span> (!<a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a> || !External)</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a> = External-><a class="code" href="classclang_1_1ExternalIdentifierLookup.html#a1ffa0934408f340d0b17b078475eb786" title="Return the identifier associated with the given ID number.">GetIdentifier</a>(<a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordflow">return</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a>;</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> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html#a8aee3b4ce939e93bac8d22ccd3908db0">   44</a></span> <a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html#a8aee3b4ce939e93bac8d22ccd3908db0">ExternalHeaderFileInfoSource::~ExternalHeaderFileInfoSource</a>() {}</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a4175174ceb513dfff19029309e6f16f9">   46</a></span> HeaderSearch::HeaderSearch(<a class="code" href="classllvm_1_1IntrusiveRefCntPtr.html">IntrusiveRefCntPtr<HeaderSearchOptions></a> HSOpts,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                            <a class="code" href="classclang_1_1SourceManager.html" title="This class handles loading and caching of source files into memory.">SourceManager</a> &<a class="code" href="Format_8cpp.html#a8b28f9f83ac8256fbde7e45b0f874f27">SourceMgr</a>, <a class="code" href="classclang_1_1DiagnosticsEngine.html" title="Concrete class used by the front-end to report problems and issues.">DiagnosticsEngine</a> &Diags,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                            <span class="keyword">const</span> <a class="code" href="classclang_1_1LangOptions.html" title="Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...">LangOptions</a> &LangOpts, </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                            <span class="keyword">const</span> <a class="code" href="classclang_1_1TargetInfo.html" title="Exposes information about the current target.">TargetInfo</a> *Target)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   : HSOpts(HSOpts), FileMgr(SourceMgr.getFileManager()), FrameworkMap(64),</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     ModMap(SourceMgr, *Diags.getClient(), LangOpts, Target, *this)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   AngledDirIdx = 0;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   SystemDirIdx = 0;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   NoCurDirSearch = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   ExternalLookup = 0;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   ExternalSource = 0;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   NumIncluded = 0;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   NumMultiIncludeFileOptzn = 0;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   NumFrameworkLookups = NumSubFrameworkLookups = 0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a3229c762bd42c6822d9b97b1c7d48f9c">   64</a></span> <a class="code" href="classclang_1_1HeaderSearch.html#a3229c762bd42c6822d9b97b1c7d48f9c">HeaderSearch::~HeaderSearch</a>() {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">// Delete headermaps.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = HeaderMaps.size(); i != e; ++i)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keyword">delete</span> HeaderMaps[i].second;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a8a029d1cc56f832b011800d7eaf3ae49">   70</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a8a029d1cc56f832b011800d7eaf3ae49">HeaderSearch::PrintStats</a>() {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   fprintf(stderr, <span class="stringliteral">"\n*** HeaderSearch Stats:\n"</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   fprintf(stderr, <span class="stringliteral">"%d files tracked.\n"</span>, (<span class="keywordtype">int</span>)FileInfo.size());</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordtype">unsigned</span> NumOnceOnlyFiles = 0, MaxNumIncludes = 0, NumSingleIncludedFiles = 0;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = FileInfo.size(); i != e; ++i) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     NumOnceOnlyFiles += FileInfo[i].isImport;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">if</span> (MaxNumIncludes < FileInfo[i].NumIncludes)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>       MaxNumIncludes = FileInfo[i].NumIncludes;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     NumSingleIncludedFiles += FileInfo[i].NumIncludes == 1;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   fprintf(stderr, <span class="stringliteral">"  %d #import/#pragma once files.\n"</span>, NumOnceOnlyFiles);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   fprintf(stderr, <span class="stringliteral">"  %d included exactly once.\n"</span>, NumSingleIncludedFiles);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   fprintf(stderr, <span class="stringliteral">"  %d max times a file is included.\n"</span>, MaxNumIncludes);</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>   fprintf(stderr, <span class="stringliteral">"  %d #include/#include_next/#import.\n"</span>, NumIncluded);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   fprintf(stderr, <span class="stringliteral">"    %d #includes skipped due to"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>           <span class="stringliteral">" the multi-include optimization.\n"</span>, NumMultiIncludeFileOptzn);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   fprintf(stderr, <span class="stringliteral">"%d framework lookups.\n"</span>, NumFrameworkLookups);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   fprintf(stderr, <span class="stringliteral">"%d subframework lookups.\n"</span>, NumSubFrameworkLookups);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/// CreateHeaderMap - This method returns a HeaderMap for the specified</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/// FileEntry, uniquing them through the 'HeaderMaps' datastructure.</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#abaf93767d5315f95f30c4503e1871960">   94</a></span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> *<a class="code" href="classclang_1_1HeaderSearch.html#abaf93767d5315f95f30c4503e1871960">HeaderSearch::CreateHeaderMap</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="comment">// We expect the number of headermaps to be small, and almost always empty.</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="comment">// If it ever grows, use of a linear search should be re-evaluated.</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">if</span> (!HeaderMaps.empty()) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = HeaderMaps.size(); i != e; ++i)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       <span class="comment">// Pointer equality comparison of FileEntries works because they are</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       <span class="comment">// already uniqued by inode.</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       <span class="keywordflow">if</span> (HeaderMaps[i].first == FE)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keywordflow">return</span> HeaderMaps[i].second;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> *HM = <a class="code" href="classclang_1_1HeaderMap.html#ae54eb6c840cd1b8245a0e5298c05f7b6">HeaderMap::Create</a>(FE, FileMgr)) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     HeaderMaps.push_back(std::make_pair(FE, HM));</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">return</span> HM;</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> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#aeb1c6a529254c02067366e135f6613bc">  113</a></span> std::string <a class="code" href="classclang_1_1HeaderSearch.html#aeb1c6a529254c02067366e135f6613bc" title="Retrieve the name of the module file that should be used to load the given module.">HeaderSearch::getModuleFileName</a>(<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a>) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="comment">// If we don't have a module cache path, we can't do anything.</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">if</span> (ModuleCachePath.empty()) </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">return</span> std::string();</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<256></a> Result(ModuleCachePath);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   llvm::sys::path::append(Result, Module-><a class="code" href="classclang_1_1Module.html#ab9ac0815c7df4b9466e2a7212fd2d300" title="Retrieve the top-level module for this (sub)module, which may be this module.">getTopLevelModule</a>()-><a class="code" href="classclang_1_1Module.html#a51eba6562bd16dec5a8e7c2c5ed76890" title="The name of this module.">Name</a> + <span class="stringliteral">".pcm"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">return</span> Result.str().str();</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a43e04e8506b401ab2391f27977de626c">  124</a></span> std::string <a class="code" href="classclang_1_1HeaderSearch.html#aeb1c6a529254c02067366e135f6613bc" title="Retrieve the name of the module file that should be used to load the given module.">HeaderSearch::getModuleFileName</a>(StringRef ModuleName) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="comment">// If we don't have a module cache path, we can't do anything.</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordflow">if</span> (ModuleCachePath.empty()) </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">return</span> std::string();</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<256></a> Result(ModuleCachePath);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   llvm::sys::path::append(Result, ModuleName + <span class="stringliteral">".pcm"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">return</span> Result.str().str();</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a4447cb9f032b68e211933f59436723c4">  135</a></span> <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *<a class="code" href="classclang_1_1HeaderSearch.html#a4447cb9f032b68e211933f59436723c4" title="Lookup a module Search for a module with the given name.">HeaderSearch::lookupModule</a>(StringRef ModuleName, <span class="keywordtype">bool</span> AllowSearch) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="comment">// Look in the module map to determine if there is a module by this name.</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#af4c8a3d331c1f6f1e046e7f87adc7973" title="Retrieve a module with the given name.">findModule</a>(ModuleName);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">if</span> (Module || !AllowSearch)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">return</span> Module;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="comment">// Look through the various header search paths to load any available module</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="comment">// maps, searching for a module map that describes this module.</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Idx = 0, N = SearchDirs.size(); Idx != N; ++Idx) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">if</span> (SearchDirs[Idx].isFramework()) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       <span class="comment">// Search for or infer a module map for a framework.</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> FrameworkDirName;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       FrameworkDirName += SearchDirs[Idx].getFrameworkDir()->getName();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       llvm::sys::path::append(FrameworkDirName, ModuleName + <span class="stringliteral">".framework"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *FrameworkDir </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>             = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(FrameworkDirName)) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         <span class="keywordtype">bool</span> IsSystem</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>           = SearchDirs[Idx].getDirCharacteristic() != <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dab0548ddada8d87ad92e94d67e5af0a4f">SrcMgr::C_User</a>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         Module = loadFrameworkModule(ModuleName, FrameworkDir, IsSystem);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         <span class="keywordflow">if</span> (Module)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="comment">// FIXME: Figure out how header maps and module maps will work together.</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">// Only deal with normal search directories.</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">if</span> (!SearchDirs[Idx].isNormalDir())</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordtype">bool</span> IsSystem = SearchDirs[Idx].isSystemHeaderDirectory();</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="comment">// Search for a module map file in this directory.</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(SearchDirs[Idx].getDir(), IsSystem)</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           == LMM_NewlyLoaded) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       <span class="comment">// We just loaded a module map file; check whether the module is</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <span class="comment">// available now.</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       Module = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#af4c8a3d331c1f6f1e046e7f87adc7973" title="Retrieve a module with the given name.">findModule</a>(ModuleName);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">if</span> (Module)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>               </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">// Search for a module map in a subdirectory with the same name as the</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="comment">// module.</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> NestedModuleMapDirName;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     NestedModuleMapDirName = SearchDirs[Idx].getDir()->getName();</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     llvm::sys::path::append(NestedModuleMapDirName, ModuleName);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(NestedModuleMapDirName, IsSystem) == LMM_NewlyLoaded){</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       <span class="comment">// If we just loaded a module map file, look for the module again.</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       Module = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#af4c8a3d331c1f6f1e046e7f87adc7973" title="Retrieve a module with the given name.">findModule</a>(ModuleName);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       <span class="keywordflow">if</span> (Module)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="comment">// If we've already performed the exhaustive search for module maps in this</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="comment">// search directory, don't do it again.</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">if</span> (SearchDirs[Idx].haveSearchedAllModuleMaps())</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">// Load all module maps in the immediate subdirectories of this search</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">// directory.</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     loadSubdirectoryModuleMaps(SearchDirs[Idx]);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="comment">// Look again for the module.</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     Module = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#af4c8a3d331c1f6f1e046e7f87adc7973" title="Retrieve a module with the given name.">findModule</a>(ModuleName);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">if</span> (Module)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">return</span> Module;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">// File lookup within a DirectoryLookup scope</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment"></span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">/// getName - Return the directory or filename corresponding to this lookup</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">/// object.</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"><a class="code" href="classclang_1_1DirectoryLookup.html#aace48a9e20ad49b0593de5f820381ce5">  212</a></span> <span class="comment"></span><span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classclang_1_1DirectoryLookup.html#aace48a9e20ad49b0593de5f820381ce5">DirectoryLookup::getName</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DirectoryLookup.html#ad73ae2f7f9adab1d691307d4b64d74ce" title="isNormalDir - Return true if this is a normal directory, not a header map.">isNormalDir</a>())</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1DirectoryLookup.html#a4ea6beb2a269339a17ee3a72042b6ae6">getDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>();</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DirectoryLookup.html#a1e81ff9ac04ae471ff965245751aa96b">isFramework</a>())</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1DirectoryLookup.html#a7b1cf0371ddb3d4618a8800582d7c1da">getFrameworkDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>();</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   assert(<a class="code" href="classclang_1_1DirectoryLookup.html#a2b8927bbf461776675045fac4f27c82c" title="isHeaderMap - Return true if this is a header map, not a normal directory.">isHeaderMap</a>() && <span class="stringliteral">"Unknown DirectoryLookup"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordflow">return</span> <a class="code" href="classclang_1_1DirectoryLookup.html#a5befe54dae3a4164118863623082d81b">getHeaderMap</a>()-><a class="code" href="classclang_1_1HeaderMap.html#afddebce90d1f900746a22562e1440686" title="getFileName - Return the filename of the headermap.">getFileName</a>();</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment"></span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/// LookupFile - Lookup the specified file in this search path, returning it</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/// if it exists or returning null if not.</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="code" href="classclang_1_1DirectoryLookup.html#a7f4d0fe231936a6c494d1db0c5a1d1ff">  224</a></span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1DirectoryLookup.html#a7f4d0fe231936a6c494d1db0c5a1d1ff">DirectoryLookup::LookupFile</a>(</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     StringRef Filename,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a> &HS,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *SearchPath,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *RelativePath,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> *SuggestedModule,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">bool</span> &InUserSpecifiedSystemFramework)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   InUserSpecifiedSystemFramework = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> TmpDir;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DirectoryLookup.html#ad73ae2f7f9adab1d691307d4b64d74ce" title="isNormalDir - Return true if this is a normal directory, not a header map.">isNormalDir</a>()) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="comment">// Concatenate the requested file onto the directory.</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     TmpDir = <a class="code" href="classclang_1_1DirectoryLookup.html#a4ea6beb2a269339a17ee3a72042b6ae6">getDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>();</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     llvm::sys::path::append(TmpDir, Filename);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       StringRef SearchPathRef(<a class="code" href="classclang_1_1DirectoryLookup.html#a4ea6beb2a269339a17ee3a72042b6ae6">getDir</a>()-><a class="code" href="classclang_1_1DirectoryLookup.html#aace48a9e20ad49b0593de5f820381ce5">getName</a>());</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       SearchPath->clear();</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       SearchPath->append(SearchPathRef.begin(), SearchPathRef.end());</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>     <span class="keywordflow">if</span> (RelativePath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       RelativePath->clear();</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       RelativePath->append(Filename.begin(), Filename.end());</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="comment">// If we have a module map that might map this header, load it and</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="comment">// check whether we'll have a suggestion for a module.</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     HS.<a class="code" href="classclang_1_1HeaderSearch.html#a4bf4465e86f9194d42aaf5240a9d2d8e" title="Determine whether there is a module map that may map the header with the given file name to a (sub)mo...">hasModuleMap</a>(TmpDir, <a class="code" href="classclang_1_1DirectoryLookup.html#a4ea6beb2a269339a17ee3a72042b6ae6">getDir</a>(), <a class="code" href="classclang_1_1DirectoryLookup.html#aa9db78ca67efedb62d7b0117cfbe857f" title="Whether this describes a system header directory.">isSystemHeaderDirectory</a>());</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordflow">if</span> (SuggestedModule) {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File = HS.<a class="code" href="classclang_1_1HeaderSearch.html#a835b49793639b408e983c0c31fbe48c4">getFileMgr</a>().<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(TmpDir.str(),</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                                       <span class="comment">/*openFile=*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">if</span> (!File)</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         <span class="keywordflow">return</span> File;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>       <span class="comment">// If there is a module that corresponds to this header, suggest it.</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       *SuggestedModule = HS.<a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">findModuleForHeader</a>(File);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       <span class="keywordflow">if</span> (!SuggestedModule-><a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html#a7b62eee1d73659d194a543a83256c9f5" title="Retrieve the module the header is stored in.">getModule</a>() &&</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>           HS.<a class="code" href="classclang_1_1HeaderSearch.html#a4bf4465e86f9194d42aaf5240a9d2d8e" title="Determine whether there is a module map that may map the header with the given file name to a (sub)mo...">hasModuleMap</a>(TmpDir, <a class="code" href="classclang_1_1DirectoryLookup.html#a4ea6beb2a269339a17ee3a72042b6ae6">getDir</a>(), <a class="code" href="classclang_1_1DirectoryLookup.html#aa9db78ca67efedb62d7b0117cfbe857f" title="Whether this describes a system header directory.">isSystemHeaderDirectory</a>()))</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         *SuggestedModule = HS.<a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">findModuleForHeader</a>(File);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       <span class="keywordflow">return</span> File;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">return</span> HS.<a class="code" href="classclang_1_1HeaderSearch.html#a835b49793639b408e983c0c31fbe48c4">getFileMgr</a>().<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(TmpDir.str(), <span class="comment">/*openFile=*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DirectoryLookup.html#a1e81ff9ac04ae471ff965245751aa96b">isFramework</a>())</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordflow">return</span> DoFrameworkLookup(Filename, HS, SearchPath, RelativePath,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                              SuggestedModule, InUserSpecifiedSystemFramework);</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>   assert(<a class="code" href="classclang_1_1DirectoryLookup.html#a2b8927bbf461776675045fac4f27c82c" title="isHeaderMap - Return true if this is a header map, not a normal directory.">isHeaderMap</a>() && <span class="stringliteral">"Unknown directory lookup"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> * <span class="keyword">const</span> Result = <a class="code" href="classclang_1_1DirectoryLookup.html#a5befe54dae3a4164118863623082d81b">getHeaderMap</a>()-><a class="code" href="classclang_1_1HeaderMap.html#a63ac37bf7a0dcc77856b4070066c35a9">LookupFile</a>(</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       Filename, HS.<a class="code" href="classclang_1_1HeaderSearch.html#a835b49793639b408e983c0c31fbe48c4">getFileMgr</a>());</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordflow">if</span> (Result) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>       StringRef SearchPathRef(<a class="code" href="classclang_1_1DirectoryLookup.html#aace48a9e20ad49b0593de5f820381ce5">getName</a>());</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>       SearchPath->clear();</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       SearchPath->append(SearchPathRef.begin(), SearchPathRef.end());</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">if</span> (RelativePath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       RelativePath->clear();</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       RelativePath->append(Filename.begin(), Filename.end());</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordflow">return</span> Result;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment"></span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">/// \brief Given a framework directory, find the top-most framework directory.</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">///</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">/// \param FileMgr The file manager to use for directory lookups.</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/// \param DirName The name of the framework directory.</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">/// \param SubmodulePath Will be populated with the submodule path from the</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">/// returned top-level module to the originally named framework.</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment"></span><span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *</div>
+<div class="line"><a name="l00296"></a><span class="lineno"><a class="code" href="HeaderSearch_8cpp.html#a354205fd08019f16f9d4b2d5f1df6f82">  296</a></span> <a class="code" href="HeaderSearch_8cpp.html#a354205fd08019f16f9d4b2d5f1df6f82" title="Given a framework directory, find the top-most framework directory.">getTopFrameworkDir</a>(<a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FileMgr, StringRef DirName,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                    <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<std::string></a> &SubmodulePath) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   assert(llvm::sys::path::extension(DirName) == <span class="stringliteral">".framework"</span> &&</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>          <span class="stringliteral">"Not a framework directory"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="comment">// Note: as an egregious but useful hack we use the real path here, because</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="comment">// frameworks moving between top-level frameworks to embedded frameworks tend</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="comment">// to be symlinked, and we base the logical structure of modules on the</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   <span class="comment">// physical layout. In particular, we need to deal with crazy includes like</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="comment">//   #include <Foo/Frameworks/Bar.framework/Headers/Wibble.h></span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="comment">// where 'Bar' used to be embedded in 'Foo', is now a top-level framework</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="comment">// which one should access with, e.g.,</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="comment">//   #include <Bar/Wibble.h></span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="comment">// Similar issues occur when a top-level framework has moved into an</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="comment">// embedded framework.</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *TopFrameworkDir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(DirName);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   DirName = FileMgr.<a class="code" href="classclang_1_1FileManager.html#aefc9a0b6440701f04541eb6e74447bb2" title="Retrieve the canonical name for a given directory.">getCanonicalName</a>(TopFrameworkDir);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="comment">// Get the parent directory name.</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     DirName = llvm::sys::path::parent_path(DirName);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">if</span> (DirName.empty())</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="comment">// Determine whether this directory exists.</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(DirName);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="keywordflow">if</span> (!Dir)</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="comment">// If this is a framework directory, then we're a subframework of this</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="comment">// framework.</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">if</span> (llvm::sys::path::extension(DirName) == <span class="stringliteral">".framework"</span>) {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       SubmodulePath.push_back(llvm::sys::path::stem(DirName));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       TopFrameworkDir = Dir;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   } <span class="keywordflow">while</span> (<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="keywordflow">return</span> TopFrameworkDir;</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> <span class="comment"></span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">/// DoFrameworkLookup - Do a lookup of the specified file in the current</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">/// DirectoryLookup, which is a framework directory.</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *DirectoryLookup::DoFrameworkLookup(</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     StringRef Filename,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a> &HS,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *SearchPath,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *RelativePath,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> *SuggestedModule,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordtype">bool</span> &InUserSpecifiedSystemFramework)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="keyword"></span>{</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FileMgr = HS.<a class="code" href="classclang_1_1HeaderSearch.html#a835b49793639b408e983c0c31fbe48c4">getFileMgr</a>();</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>   <span class="comment">// Framework names must have a '/' in the filename.</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordtype">size_t</span> SlashPos = Filename.find(<span class="charliteral">'/'</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <span class="keywordflow">if</span> (SlashPos == StringRef::npos) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   <span class="comment">// Find out if this is the home for the specified framework, by checking</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="comment">// HeaderSearch.  Possible answers are yes/no and unknown.</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   HeaderSearch::FrameworkCacheEntry &CacheEntry =</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     HS.<a class="code" href="classclang_1_1HeaderSearch.html#a8db5b49023fd95063510496da39615c9" title="Look up the specified framework name in our framework cache.">LookupFrameworkCache</a>(Filename.substr(0, SlashPos));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   <span class="comment">// If it is known and in some other directory, fail.</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   <span class="keywordflow">if</span> (CacheEntry.Directory && CacheEntry.Directory != <a class="code" href="classclang_1_1DirectoryLookup.html#a7b1cf0371ddb3d4618a8800582d7c1da">getFrameworkDir</a>())</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordflow">return</span> 0;</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>   <span class="comment">// Otherwise, construct the path to this framework dir.</span></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">// FrameworkName = "/System/Library/Frameworks/"</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> FrameworkName;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   FrameworkName += <a class="code" href="classclang_1_1DirectoryLookup.html#a7b1cf0371ddb3d4618a8800582d7c1da">getFrameworkDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>();</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="keywordflow">if</span> (FrameworkName.empty() || FrameworkName.back() != <span class="charliteral">'/'</span>)</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     FrameworkName.push_back(<span class="charliteral">'/'</span>);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="comment">// FrameworkName = "/System/Library/Frameworks/Cocoa"</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   StringRef ModuleName(Filename.begin(), SlashPos);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   FrameworkName += ModuleName;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <span class="comment">// FrameworkName = "/System/Library/Frameworks/Cocoa.framework/"</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   FrameworkName += <span class="stringliteral">".framework/"</span>;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="comment">// If the cache entry was unresolved, populate it now.</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="keywordflow">if</span> (CacheEntry.Directory == 0) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     HS.<a class="code" href="classclang_1_1HeaderSearch.html#a3c3bd6f077e16a29415ebbd36b556f65">IncrementFrameworkLookupCount</a>();</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="comment">// If the framework dir doesn't exist, we fail.</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *<a class="code" href="classclang_1_1DirectoryLookup.html#a47f863c1539769e8edc5820903133723">Dir</a> = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(FrameworkName.str());</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="keywordflow">if</span> (Dir == 0) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="comment">// Otherwise, if it does, remember that this is the right direntry for this</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="comment">// framework.</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     CacheEntry.Directory = <a class="code" href="classclang_1_1DirectoryLookup.html#a7b1cf0371ddb3d4618a8800582d7c1da">getFrameworkDir</a>();</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="comment">// If this is a user search directory, check if the framework has been</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     <span class="comment">// user-specified as a system framework.</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1DirectoryLookup.html#a13aa3b065e4450a3d32ea5ee69aa06c6">getDirCharacteristic</a>() == <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dab0548ddada8d87ad92e94d67e5af0a4f">SrcMgr::C_User</a>) {</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>       <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> SystemFrameworkMarker(FrameworkName);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>       SystemFrameworkMarker += <span class="stringliteral">".system_framework"</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       <span class="keywordflow">if</span> (llvm::sys::fs::exists(SystemFrameworkMarker.str())) {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         CacheEntry.IsUserSpecifiedSystemFramework = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       }</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   <span class="comment">// Set the 'user-specified system framework' flag.</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   InUserSpecifiedSystemFramework = CacheEntry.IsUserSpecifiedSystemFramework;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   <span class="keywordflow">if</span> (RelativePath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     RelativePath->clear();</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     RelativePath->append(Filename.begin()+SlashPos+1, Filename.end());</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   <span class="comment">// Check "/System/Library/Frameworks/Cocoa.framework/Headers/file.h"</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   <span class="keywordtype">unsigned</span> OrigSize = FrameworkName.size();</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   FrameworkName += <span class="stringliteral">"Headers/"</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     SearchPath->clear();</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="comment">// Without trailing '/'.</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     SearchPath->append(FrameworkName.begin(), FrameworkName.end()-1);</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>   FrameworkName.append(Filename.begin()+SlashPos+1, Filename.end());</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(FrameworkName.str(),</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                         <span class="comment">/*openFile=*/</span>!SuggestedModule);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   <span class="keywordflow">if</span> (!FE) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="comment">// Check "/System/Library/Frameworks/Cocoa.framework/PrivateHeaders/file.h"</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *Private = <span class="stringliteral">"Private"</span>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     FrameworkName.insert(FrameworkName.begin()+OrigSize, Private,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                          Private+strlen(Private));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>       SearchPath->insert(SearchPath->begin()+OrigSize, Private,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                          Private+strlen(Private));</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     FE = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(FrameworkName.str(), <span class="comment">/*openFile=*/</span>!SuggestedModule);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   <span class="comment">// If we found the header and are allowed to suggest a module, do so now.</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordflow">if</span> (FE && SuggestedModule) {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     <span class="comment">// Find the framework in which this header occurs.</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     StringRef FrameworkPath = FE-><a class="code" href="classclang_1_1FileEntry.html#a94ddac74f217c35e19420dd6c419e25f">getName</a>();</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordtype">bool</span> FoundFramework = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>       <span class="comment">// Get the parent directory name.</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>       FrameworkPath = llvm::sys::path::parent_path(FrameworkPath);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>       <span class="keywordflow">if</span> (FrameworkPath.empty())</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>       <span class="comment">// Determine whether this directory exists.</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(FrameworkPath);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>       <span class="keywordflow">if</span> (!Dir)</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       <span class="comment">// If this is a framework directory, then we're a subframework of this</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       <span class="comment">// framework.</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>       <span class="keywordflow">if</span> (llvm::sys::path::extension(FrameworkPath) == <span class="stringliteral">".framework"</span>) {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         FoundFramework = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>       }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     } <span class="keywordflow">while</span> (<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     <span class="keywordflow">if</span> (FoundFramework) {</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       <span class="comment">// Find the top-level framework based on this framework.</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::string, 4></a> SubmodulePath;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *TopFrameworkDir</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>         = <a class="code" href="HeaderSearch_8cpp.html#a354205fd08019f16f9d4b2d5f1df6f82" title="Given a framework directory, find the top-most framework directory.">::getTopFrameworkDir</a>(FileMgr, FrameworkPath, SubmodulePath);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       <span class="comment">// Determine the name of the top-level framework.</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       StringRef ModuleName = llvm::sys::path::stem(TopFrameworkDir-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>());</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       <span class="comment">// Load this framework module. If that succeeds, find the suggested module</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       <span class="comment">// for this header, if any.</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>       <span class="keywordtype">bool</span> IsSystem = <a class="code" href="classclang_1_1DirectoryLookup.html#a13aa3b065e4450a3d32ea5ee69aa06c6">getDirCharacteristic</a>() != <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dab0548ddada8d87ad92e94d67e5af0a4f">SrcMgr::C_User</a>;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>       <span class="keywordflow">if</span> (HS.loadFrameworkModule(ModuleName, TopFrameworkDir, IsSystem)) {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         *SuggestedModule = HS.<a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">findModuleForHeader</a>(FE);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>       }</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>       *SuggestedModule = HS.<a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">findModuleForHeader</a>(FE);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   <span class="keywordflow">return</span> FE;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a92e6479b7860243acd7dac0bca774905">  482</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a92e6479b7860243acd7dac0bca774905" title="Set the target information for the header search, if not already known.">HeaderSearch::setTarget</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1TargetInfo.html" title="Exposes information about the current target.">TargetInfo</a> &Target) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   ModMap.<a class="code" href="classclang_1_1ModuleMap.html#abc441df169e00dbd5ab3a5db003d454f" title="Set the target information.">setTarget</a>(Target);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> }</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment">// Header File Location.</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment"></span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">/// LookupFile - Given a "foo" or <foo> reference, look up the indicated file,</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">/// return null on failure.  isAngled indicates whether the file reference is</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="comment">/// for system \#include's or not (i.e. using <> instead of "").  CurFileEnt, if</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="comment">/// non-null, indicates where the \#including file is, in case a relative search</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="comment">/// is needed.</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#aa1c602962266d121be3a1f58142abc9d">  497</a></span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1HeaderSearch.html#aa1c602962266d121be3a1f58142abc9d" title="Given a "foo" or <foo> reference, look up the indicated file, return null on failure.">HeaderSearch::LookupFile</a>(</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     StringRef Filename,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     <span class="keywordtype">bool</span> isAngled,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> *FromDir,</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> *&CurDir,</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *CurFileEnt,</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *SearchPath,</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *RelativePath,</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> *SuggestedModule,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordtype">bool</span> SkipCache)</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> (!HSOpts->ModuleMapFiles.empty()) {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="comment">// Preload all explicitly specified module map files. This enables modules</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     <span class="comment">// map files lying in a directory structure separate from the header files</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     <span class="comment">// that they describe. These cannot be loaded lazily upon encountering a</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="comment">// header file, as there is no other knwon mapping from a header file to its</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="comment">// module map file.</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     <span class="keywordflow">for</span> (llvm::SetVector<std::string>::iterator</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>              I = HSOpts->ModuleMapFiles.begin(),</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>              E = HSOpts->ModuleMapFiles.end();</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>          I != E; ++I) {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(*I);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       <span class="keywordflow">if</span> (!File)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>       <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(File, <span class="comment">/*IsSystem=*/</span><span class="keyword">false</span>);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     }</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     HSOpts->ModuleMapFiles.clear();</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   <span class="keywordflow">if</span> (SuggestedModule)</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     *SuggestedModule = <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a>();</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   <span class="comment">// If 'Filename' is absolute, check to see if it exists and no searching.</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   <span class="keywordflow">if</span> (llvm::sys::path::is_absolute(Filename)) {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     CurDir = 0;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     <span class="comment">// If this was an #include_next "/absolute/file", fail.</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordflow">if</span> (FromDir) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>       SearchPath->clear();</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="keywordflow">if</span> (RelativePath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>       RelativePath->clear();</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>       RelativePath->append(Filename.begin(), Filename.end());</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">// Otherwise, just return the file.</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordflow">return</span> FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(Filename, <span class="comment">/*openFile=*/</span><span class="keyword">true</span>);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   }</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   <span class="comment">// Unless disabled, check to see if the file is in the #includer's</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   <span class="comment">// directory.  This has to be based on CurFileEnt, not CurDir, because</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   <span class="comment">// CurFileEnt could be a #include of a subdirectory (#include "foo/bar.h") and</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   <span class="comment">// a subsequent include of "baz.h" should resolve to "whatever/foo/baz.h".</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   <span class="comment">// This search is not done for <> headers.</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   <span class="keywordflow">if</span> (CurFileEnt && !isAngled && !NoCurDirSearch) {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> TmpDir;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="comment">// Concatenate the requested file onto the directory.</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     <span class="comment">// FIXME: Portability.  Filename concatenation should be in sys::Path.</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     TmpDir += CurFileEnt-><a class="code" href="classclang_1_1FileEntry.html#a93533898e5cfd56df70289244f623fd6" title="Return the directory the file lives in.">getDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>();</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     TmpDir.push_back(<span class="charliteral">'/'</span>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     TmpDir.append(Filename.begin(), Filename.end());</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(TmpDir.str(),<span class="comment">/*openFile=*/</span><span class="keyword">true</span>)) {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>       <span class="comment">// Leave CurDir unset.</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <span class="comment">// This file is a system header or C++ unfriendly if the old file is.</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>       <span class="comment">//</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       <span class="comment">// Note that we only use one of FromHFI/ToHFI at once, due to potential</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       <span class="comment">// reallocation of the underlying vector potentially making the first</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       <span class="comment">// reference binding dangling.</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &FromHFI = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(CurFileEnt);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>       <span class="keywordtype">unsigned</span> DirInfo = FromHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a>;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>       <span class="keywordtype">bool</span> IndexHeaderMapHeader = FromHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a>;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>       StringRef Framework = FromHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a>;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &ToHFI = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(FE);</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>       ToHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = DirInfo;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>       ToHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a> = IndexHeaderMapHeader;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>       ToHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a> = Framework;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>       <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         StringRef SearchPathRef(CurFileEnt-><a class="code" href="classclang_1_1FileEntry.html#a93533898e5cfd56df70289244f623fd6" title="Return the directory the file lives in.">getDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>());</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         SearchPath->clear();</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         SearchPath->append(SearchPathRef.begin(), SearchPathRef.end());</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> (RelativePath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         RelativePath->clear();</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         RelativePath->append(Filename.begin(), Filename.end());</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>       }</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>       <span class="keywordflow">return</span> FE;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   }</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   CurDir = 0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="comment">// If this is a system #include, ignore the user #include locs.</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keywordtype">unsigned</span> i = isAngled ? AngledDirIdx : 0;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   <span class="comment">// If this is a #include_next request, start searching after the directory the</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="comment">// file was found in.</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   <span class="keywordflow">if</span> (FromDir)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     i = FromDir-&SearchDirs[0];</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>   <span class="comment">// Cache all of the lookups performed by this method.  Many headers are</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   <span class="comment">// multiply included, and the "pragma once" optimization prevents them from</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="comment">// being relex/pp'd, but they would still have to search through a</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="comment">// (potentially huge) series of SearchDirs to find it.</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   std::pair<unsigned, unsigned> &CacheLookup =</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     LookupFileCache.GetOrCreateValue(Filename).getValue();</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="comment">// If the entry has been previously looked up, the first value will be</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="comment">// non-zero.  If the value is equal to i (the start point of our search), then</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="comment">// this is a matching hit.</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   <span class="keywordflow">if</span> (!SkipCache && CacheLookup.first == i+1) {</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     <span class="comment">// Skip querying potentially lots of directories for this lookup.</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     i = CacheLookup.second;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="comment">// Otherwise, this is the first query, or the previous query didn't match</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="comment">// our search start.  We will fill in our found location below, so prime the</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     <span class="comment">// start point value.</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     CacheLookup.first = i+1;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   }</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   <span class="comment">// Check each directory in sequence to see if it contains this file.</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   <span class="keywordflow">for</span> (; i != SearchDirs.size(); ++i) {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     <span class="keywordtype">bool</span> InUserSpecifiedSystemFramework = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE =</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       SearchDirs[i].LookupFile(Filename, *<span class="keyword">this</span>, SearchPath, RelativePath,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                                SuggestedModule, InUserSpecifiedSystemFramework);</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="keywordflow">if</span> (!FE) <span class="keywordflow">continue</span>;</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>     CurDir = &SearchDirs[i];</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     <span class="comment">// This file is a system header or C++ unfriendly if the dir is.</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &HFI = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(FE);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = CurDir-><a class="code" href="classclang_1_1DirectoryLookup.html#a13aa3b065e4450a3d32ea5ee69aa06c6">getDirCharacteristic</a>();</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     <span class="comment">// If the directory characteristic is User but this framework was</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     <span class="comment">// user-specified to be treated as a system framework, promote the</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="comment">// characteristic.</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keywordflow">if</span> (HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> == <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dab0548ddada8d87ad92e94d67e5af0a4f">SrcMgr::C_User</a> && InUserSpecifiedSystemFramework)</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>       HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dac3b930a303c855d8864c56fcc992074e">SrcMgr::C_System</a>;</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="comment">// If the filename matches a known system header prefix, override</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="comment">// whether the file is a system header.</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = SystemHeaderPrefixes.size(); j; --j) {</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>       <span class="keywordflow">if</span> (Filename.startswith(SystemHeaderPrefixes[j-1].first)) {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>         HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = SystemHeaderPrefixes[j-1].second ? <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dac3b930a303c855d8864c56fcc992074e">SrcMgr::C_System</a></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                                                        : <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dab0548ddada8d87ad92e94d67e5af0a4f">SrcMgr::C_User</a>;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</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> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     <span class="comment">// If this file is found in a header map and uses the framework style of</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="comment">// includes, then this header is part of a framework we're building.</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     <span class="keywordflow">if</span> (CurDir-><a class="code" href="classclang_1_1DirectoryLookup.html#af8ca27ffb8f562e6a0166217bb63f7d9" title="Whether this header map is building a framework or not.">isIndexHeaderMap</a>()) {</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       <span class="keywordtype">size_t</span> SlashPos = Filename.find(<span class="charliteral">'/'</span>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       <span class="keywordflow">if</span> (SlashPos != StringRef::npos) {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a> = 1;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a> = <a class="code" href="classclang_1_1HeaderSearch.html#a029274742c15ece085c37bb09c91878f" title="Retrieve a uniqued framework name.">getUniqueFrameworkName</a>(StringRef(Filename.begin(), </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                                                          SlashPos));</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       }</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="comment">// Remember this location for the next lookup we do.</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     CacheLookup.second = i;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     <span class="keywordflow">return</span> FE;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   }</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>   <span class="comment">// If we are including a file with a quoted include "foo.h" from inside</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   <span class="comment">// a header in a framework that is currently being built, and we couldn't</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>   <span class="comment">// resolve "foo.h" any other way, change the include to <Foo/foo.h>, where</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   <span class="comment">// "Foo" is the name of the framework in which the including header was found.</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   <span class="keywordflow">if</span> (CurFileEnt && !isAngled && Filename.find(<span class="charliteral">'/'</span>) == StringRef::npos) {</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &IncludingHFI = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(CurFileEnt);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     <span class="keywordflow">if</span> (IncludingHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a>) {</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>       <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> ScratchFilename;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>       ScratchFilename += IncludingHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a>;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>       ScratchFilename += <span class="charliteral">'/'</span>;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>       ScratchFilename += Filename;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>       </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *Result = <a class="code" href="classclang_1_1HeaderSearch.html#aa1c602962266d121be3a1f58142abc9d" title="Given a "foo" or <foo> reference, look up the indicated file, return null on failure.">LookupFile</a>(ScratchFilename, <span class="comment">/*isAngled=*/</span><span class="keyword">true</span>,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                                            FromDir, CurDir, CurFileEnt, </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                                            SearchPath, RelativePath,</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                                            SuggestedModule);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>       std::pair<unsigned, unsigned> &CacheLookup </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         = LookupFileCache.GetOrCreateValue(Filename).getValue();</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       CacheLookup.second</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         = LookupFileCache.GetOrCreateValue(ScratchFilename).getValue().second;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>       <span class="keywordflow">return</span> Result;</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>   }</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   <span class="comment">// Otherwise, didn't find it. Remember we didn't find this.</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   CacheLookup.second = SearchDirs.size();</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   <span class="keywordflow">return</span> 0;</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"></span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="comment">/// LookupSubframeworkHeader - Look up a subframework for the specified</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="comment">/// \#include file.  For example, if \#include'ing <HIToolbox/HIToolbox.h> from</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="comment">/// within ".../Carbon.framework/Headers/Carbon.h", check to see if HIToolbox</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> <span class="comment">/// is a subframework within Carbon.framework.  If so, return the FileEntry</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> <span class="comment">/// for the designated file, otherwise return null.</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> <span class="comment"></span><span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1HeaderSearch.html#ad1609d2856163bb155dd653560e575af" title="Look up a subframework for the specified #include file.">HeaderSearch::</a></div>
+<div class="line"><a name="l00699"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ad1609d2856163bb155dd653560e575af">  699</a></span> <a class="code" href="classclang_1_1HeaderSearch.html#ad1609d2856163bb155dd653560e575af" title="Look up a subframework for the specified #include file.">LookupSubframeworkHeader</a>(StringRef Filename,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                          <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *ContextFileEnt,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>                          <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *SearchPath,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                          <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *RelativePath,</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>                          <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> *SuggestedModule) {</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   assert(ContextFileEnt && <span class="stringliteral">"No context file?"</span>);</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="comment">// Framework names must have a '/' in the filename.  Find it.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="comment">// FIXME: Should we permit '\' on Windows?</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordtype">size_t</span> SlashPos = Filename.find(<span class="charliteral">'/'</span>);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordflow">if</span> (SlashPos == StringRef::npos) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   <span class="comment">// Look up the base framework name of the ContextFileEnt.</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *ContextName = ContextFileEnt-><a class="code" href="classclang_1_1FileEntry.html#a94ddac74f217c35e19420dd6c419e25f">getName</a>();</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   <span class="comment">// If the context info wasn't a framework, couldn't be a subframework.</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> DotFrameworkLen = 10;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *FrameworkPos = strstr(ContextName, <span class="stringliteral">".framework"</span>);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   <span class="keywordflow">if</span> (FrameworkPos == 0 || </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>       (FrameworkPos[DotFrameworkLen] != <span class="charliteral">'/'</span> && </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>        FrameworkPos[DotFrameworkLen] != <span class="charliteral">'\\'</span>))</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> FrameworkName(ContextName, FrameworkPos+DotFrameworkLen+1);</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>   <span class="comment">// Append Frameworks/HIToolbox.framework/</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   FrameworkName += <span class="stringliteral">"Frameworks/"</span>;</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   FrameworkName.append(Filename.begin(), Filename.begin()+SlashPos);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   FrameworkName += <span class="stringliteral">".framework/"</span>;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   llvm::StringMapEntry<FrameworkCacheEntry> &CacheLookup =</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     FrameworkMap.GetOrCreateValue(Filename.substr(0, SlashPos));</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   <span class="comment">// Some other location?</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   <span class="keywordflow">if</span> (CacheLookup.getValue().Directory &&</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>       CacheLookup.getKeyLength() == FrameworkName.size() &&</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>       memcmp(CacheLookup.getKeyData(), &FrameworkName[0],</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>              CacheLookup.getKeyLength()) != 0)</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>   <span class="comment">// Cache subframework.</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   <span class="keywordflow">if</span> (CacheLookup.getValue().Directory == 0) {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     ++NumSubFrameworkLookups;</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>     <span class="comment">// If the framework dir doesn't exist, we fail.</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(FrameworkName.str());</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     <span class="keywordflow">if</span> (Dir == 0) <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     <span class="comment">// Otherwise, if it does, remember that this is the right direntry for this</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <span class="comment">// framework.</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     CacheLookup.getValue().Directory = Dir;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>   }</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE = 0;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   <span class="keywordflow">if</span> (RelativePath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     RelativePath->clear();</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     RelativePath->append(Filename.begin()+SlashPos+1, Filename.end());</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>   }</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>   <span class="comment">// Check ".../Frameworks/HIToolbox.framework/Headers/HIToolbox.h"</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<1024></a> HeadersFilename(FrameworkName);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>   HeadersFilename += <span class="stringliteral">"Headers/"</span>;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>   <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     SearchPath->clear();</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <span class="comment">// Without trailing '/'.</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     SearchPath->append(HeadersFilename.begin(), HeadersFilename.end()-1);</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   }</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   HeadersFilename.append(Filename.begin()+SlashPos+1, Filename.end());</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>   <span class="keywordflow">if</span> (!(FE = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(HeadersFilename.str(), <span class="comment">/*openFile=*/</span><span class="keyword">true</span>))) {</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     <span class="comment">// Check ".../Frameworks/HIToolbox.framework/PrivateHeaders/HIToolbox.h"</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     HeadersFilename = FrameworkName;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     HeadersFilename += <span class="stringliteral">"PrivateHeaders/"</span>;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="keywordflow">if</span> (SearchPath != <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) {</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>       SearchPath->clear();</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>       <span class="comment">// Without trailing '/'.</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>       SearchPath->append(HeadersFilename.begin(), HeadersFilename.end()-1);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     HeadersFilename.append(Filename.begin()+SlashPos+1, Filename.end());</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     <span class="keywordflow">if</span> (!(FE = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(HeadersFilename.str(), <span class="comment">/*openFile=*/</span><span class="keyword">true</span>)))</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>       <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   }</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>   <span class="comment">// This file is a system header or C++ unfriendly if the old file is.</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>   <span class="comment">// Note that the temporary 'DirInfo' is required here, as either call to</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   <span class="comment">// getFileInfo could resize the vector and we don't want to rely on order</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="comment">// of evaluation.</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">unsigned</span> DirInfo = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(ContextFileEnt).<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a>;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(FE).<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = DirInfo;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="comment">// If we're supposed to suggest a module, look for one now.</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>   <span class="keywordflow">if</span> (SuggestedModule) {</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="comment">// Find the top-level framework based on this framework.</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     FrameworkName.pop_back(); <span class="comment">// remove the trailing '/'</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::string, 4></a> SubmodulePath;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *TopFrameworkDir</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>       = <a class="code" href="HeaderSearch_8cpp.html#a354205fd08019f16f9d4b2d5f1df6f82" title="Given a framework directory, find the top-most framework directory.">::getTopFrameworkDir</a>(FileMgr, FrameworkName, SubmodulePath);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="comment">// Determine the name of the top-level framework.</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     StringRef ModuleName = llvm::sys::path::stem(TopFrameworkDir-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>());</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="comment">// Load this framework module. If that succeeds, find the suggested module</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="comment">// for this header, if any.</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordtype">bool</span> IsSystem = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordflow">if</span> (loadFrameworkModule(ModuleName, TopFrameworkDir, IsSystem)) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>       *SuggestedModule = <a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">findModuleForHeader</a>(FE);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     }</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   <span class="keywordflow">return</span> FE;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="comment"></span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="comment">/// \brief Helper static function to normalize a path for injection into</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="comment">/// a synthetic header.</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="comment"></span><span class="comment">/*static*/</span> std::string</div>
+<div class="line"><a name="l00818"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#af3794c0df592e387248a7a96d81274a2">  818</a></span> <a class="code" href="classclang_1_1HeaderSearch.html#af3794c0df592e387248a7a96d81274a2" title="Helper static function to normalize a path for injection into a synthetic header.">HeaderSearch::NormalizeDashIncludePath</a>(StringRef File, <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FileMgr) {</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   <span class="comment">// Implicit include paths should be resolved relative to the current</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   <span class="comment">// working directory first, and then use the regular header search</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   <span class="comment">// mechanism. The proper way to handle this is to have the</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   <span class="comment">// predefines buffer located at the current working directory, but</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   <span class="comment">// it has no file entry. For now, workaround this by using an</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   <span class="comment">// absolute path if we find the file here, and otherwise letting</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   <span class="comment">// header search handle it.</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> Path(File);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   llvm::sys::fs::make_absolute(Path);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   <span class="keywordtype">bool</span> exists;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="keywordflow">if</span> (llvm::sys::fs::exists(Path.str(), exists) || !exists)</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     Path = File;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (exists)</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(File);</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">return</span> <a class="code" href="classclang_1_1Lexer.html#ac12d3e6342e5fc9f93c4c7b66e38119c">Lexer::Stringify</a>(Path.str());</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> }</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="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="comment">// File Info Management.</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="comment"></span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="comment">/// \brief Merge the header file info provided by \p OtherHFI into the current</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="comment">/// header file info (\p HFI)</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"><a class="code" href="HeaderSearch_8cpp.html#a32d72bd9247cd3c22d964244656c66f4">  843</a></span> <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="HeaderSearch_8cpp.html#a32d72bd9247cd3c22d964244656c66f4" title="Merge the header file info provided by OtherHFI into the current header file info (HFI)...">mergeHeaderFileInfo</a>(<a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &HFI, </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>                                 <span class="keyword">const</span> <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &OtherHFI) {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a> |= OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a>;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a> |= OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a>;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a2ba6a0c7b39e43e5fc7bb4310e776299" title="Whether this header is part of a module.">isModuleHeader</a> |= OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a2ba6a0c7b39e43e5fc7bb4310e776299" title="Whether this header is part of a module.">isModuleHeader</a>;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a> += OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a>;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>   </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>   <span class="keywordflow">if</span> (!HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a> && !HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>) {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a> = OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a>;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a> = OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   }</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   <span class="keywordflow">if</span> (OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234" title="Whether this header file info was supplied by an external source.">External</a>) {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a>;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234" title="Whether this header file info was supplied by an external source.">External</a> = OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234" title="Whether this header file info was supplied by an external source.">External</a>;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a> = OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a>;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   }</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>   <span class="keywordflow">if</span> (HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a>.empty())</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a> = OtherHFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a>;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>   </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a65119c277c99f4729d4fb87942a19265" title="Whether this structure is considered to already have been "resolved", meaning that it was loaded from...">Resolved</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>                                 <span class="comment"></span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="comment">/// getFileInfo - Return the HeaderFileInfo structure for the specified</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> <span class="comment">/// FileEntry.</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> <span class="comment"></span><a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &<a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">HeaderSearch::getFileInfo</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE) {</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   <span class="keywordflow">if</span> (FE-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>() >= FileInfo.size())</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     FileInfo.resize(FE-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>()+1);</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>   <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &HFI = FileInfo[FE-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>()];</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   <span class="keywordflow">if</span> (ExternalSource && !HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a65119c277c99f4729d4fb87942a19265" title="Whether this structure is considered to already have been "resolved", meaning that it was loaded from...">Resolved</a>)</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <a class="code" href="HeaderSearch_8cpp.html#a32d72bd9247cd3c22d964244656c66f4" title="Merge the header file info provided by OtherHFI into the current header file info (HFI)...">mergeHeaderFileInfo</a>(HFI, ExternalSource-><a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html#a71bc0d45c83dd051437244da61737d9c" title="Retrieve the header file information for the given file entry.">GetHeaderFileInfo</a>(FE));</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>   <span class="keywordflow">return</span> HFI;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> }</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a46e7c5c402dad28ed7df35b51ff66dd1">  879</a></span> <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a46e7c5c402dad28ed7df35b51ff66dd1" title="Determine whether this file is intended to be safe from multiple inclusions, e.g., it has #pragma once or a controlling macro.">HeaderSearch::isFileMultipleIncludeGuarded</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) {</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   <span class="comment">// Check if we've ever seen this file as a header.</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>   <span class="keywordflow">if</span> (File-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>() >= FileInfo.size())</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>   <span class="comment">// Resolve header file info from the external source, if needed.</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &HFI = FileInfo[File-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>()];</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>   <span class="keywordflow">if</span> (ExternalSource && !HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a65119c277c99f4729d4fb87942a19265" title="Whether this structure is considered to already have been "resolved", meaning that it was loaded from...">Resolved</a>)</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <a class="code" href="HeaderSearch_8cpp.html#a32d72bd9247cd3c22d964244656c66f4" title="Merge the header file info provided by OtherHFI into the current header file info (HFI)...">mergeHeaderFileInfo</a>(HFI, ExternalSource-><a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html#a71bc0d45c83dd051437244da61737d9c" title="Retrieve the header file information for the given file entry.">GetHeaderFileInfo</a>(File));</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="keywordflow">return</span> HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a> || HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a> ||</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>       HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a> || HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a1325cd90bd38752e2547da2147db8e09">  893</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a1325cd90bd38752e2547da2147db8e09" title="Mark the specified file as part of a module.">HeaderSearch::MarkFileModuleHeader</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE,</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>                                         <a class="code" href="classclang_1_1ModuleMap.html#ac7a2413d4d0a8f29d2dad359bcfd8dec" title="Describes the role of a module header.">ModuleMap::ModuleHeaderRole</a> Role,</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>                                         <span class="keywordtype">bool</span> isCompilingModuleHeader) {</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   <span class="keywordflow">if</span> (FE-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>() >= FileInfo.size())</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     FileInfo.resize(FE-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>()+1);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &HFI = FileInfo[FE-><a class="code" href="classclang_1_1FileEntry.html#a8d7ba7530ef16d8be66c5bc5b7c161e5">getUID</a>()];</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a2ba6a0c7b39e43e5fc7bb4310e776299" title="Whether this header is part of a module.">isModuleHeader</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a7831ddf7e23772302c7600cb7dee3433" title="Whether this header is part of the module that we are building.">isCompilingModuleHeader</a> = isCompilingModuleHeader;</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>   HFI.<a class="code" href="structclang_1_1HeaderFileInfo.html#adfa2ec0e7ae86a53f3f51f07b3da4775" title="Set the HeaderRole properly typed.">setHeaderRole</a>(Role);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> </div>
+<div class="line"><a name="l00905"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a200f5d2b2401cc74417d0028c69332e6">  905</a></span> <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a200f5d2b2401cc74417d0028c69332e6" title="Mark the specified file as a target of of a #include, #include_next, or #import directive.">HeaderSearch::ShouldEnterIncludeFile</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File, <span class="keywordtype">bool</span> isImport){</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>   ++NumIncluded; <span class="comment">// Count # of attempted #includes.</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   <span class="comment">// Get information about this file.</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &FileInfo = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>   <span class="comment">// If this is a #import directive, check that we have not already imported</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   <span class="comment">// this header.</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   <span class="keywordflow">if</span> (isImport) {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     <span class="comment">// If this has already been imported, don't import it again.</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     FileInfo.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> </div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     <span class="comment">// Has this already been #import'ed or #include'd?</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     <span class="keywordflow">if</span> (FileInfo.<a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     <span class="comment">// Otherwise, if this is a #include of a file that was previously #import'd</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     <span class="comment">// or if this is the second #include of a #pragma once file, ignore it.</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     <span class="keywordflow">if</span> (FileInfo.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a>)</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>   }</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> </div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>   <span class="comment">// Next, check to see if the file is wrapped with #ifndef guards.  If so, and</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>   <span class="comment">// if the macro that guards it is defined, we know the #include has no effect.</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *ControllingMacro</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>       = FileInfo.<a class="code" href="structclang_1_1HeaderFileInfo.html#a4e3b8ee201e46b609f2c4494aa354314" title="Retrieve the controlling macro for this header file, if any.">getControllingMacro</a>(ExternalLookup))</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     <span class="keywordflow">if</span> (ControllingMacro->hasMacroDefinition()) {</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>       ++NumMultiIncludeFileOptzn;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     }</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   <span class="comment">// Increment the number of times this file has been included.</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   ++FileInfo.<a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a>;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> }</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a8c7db7c5e4a833296e700c613a6acd52">  941</a></span> <span class="keywordtype">size_t</span> <a class="code" href="classclang_1_1HeaderSearch.html#a8c7db7c5e4a833296e700c613a6acd52">HeaderSearch::getTotalMemory</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   <span class="keywordflow">return</span> SearchDirs.capacity()</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     + llvm::capacity_in_bytes(FileInfo)</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     + llvm::capacity_in_bytes(HeaderMaps)</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     + LookupFileCache.getAllocator().getTotalMemory()</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     + FrameworkMap.getAllocator().getTotalMemory();</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> }</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a029274742c15ece085c37bb09c91878f">  949</a></span> StringRef <a class="code" href="classclang_1_1HeaderSearch.html#a029274742c15ece085c37bb09c91878f" title="Retrieve a uniqued framework name.">HeaderSearch::getUniqueFrameworkName</a>(StringRef Framework) {</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>   <span class="keywordflow">return</span> FrameworkNames.GetOrCreateValue(Framework).getKey();</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> }</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a4bf4465e86f9194d42aaf5240a9d2d8e">  953</a></span> <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a4bf4465e86f9194d42aaf5240a9d2d8e" title="Determine whether there is a module map that may map the header with the given file name to a (sub)mo...">HeaderSearch::hasModuleMap</a>(StringRef FileName, </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>                                 <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Root,</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>                                 <span class="keywordtype">bool</span> IsSystem) {</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<const DirectoryEntry *, 2></a> FixUpDirectories;</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>   </div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>   StringRef DirName = FileName;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>   <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     <span class="comment">// Get the parent directory name.</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     DirName = llvm::sys::path::parent_path(DirName);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <span class="keywordflow">if</span> (DirName.empty())</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</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>     <span class="comment">// Determine whether this directory exists.</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(DirName);</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     <span class="keywordflow">if</span> (!Dir)</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> </div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     <span class="comment">// Try to load the "module.map" file in this directory.</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(Dir, IsSystem)) {</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     <span class="keywordflow">case</span> LMM_NewlyLoaded:</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     <span class="keywordflow">case</span> LMM_AlreadyLoaded:</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>       <span class="comment">// Success. All of the directories we stepped through inherit this module</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>       <span class="comment">// map file.</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> I = 0, N = FixUpDirectories.size(); I != N; ++I)</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         DirectoryHasModuleMap[FixUpDirectories[I]] = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>       <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     <span class="keywordflow">case</span> LMM_NoDirectory:</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     <span class="keywordflow">case</span> LMM_InvalidModuleMap:</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     }</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="comment">// If we hit the top of our search, we're done.</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     <span class="keywordflow">if</span> (Dir == Root)</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</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>     <span class="comment">// Keep track of all of the directories we checked, so we can mark them as</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="comment">// having module maps if we eventually do find a module map.</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     FixUpDirectories.push_back(Dir);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>   } <span class="keywordflow">while</span> (<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> }</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a></div>
+<div class="line"><a name="l00996"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e">  996</a></span> <a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">HeaderSearch::findModuleForHeader</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>   <span class="keywordflow">if</span> (ExternalSource) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     <span class="comment">// Make sure the external source has handled header info about this file,</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     <span class="comment">// which includes whether the file is part of a module.</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     (void)<a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File);</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">return</span> ModMap.<a class="code" href="classclang_1_1ModuleMap.html#a127dbf10d2e3134aedb7d7c60cf23cc9" title="Retrieve the module that owns the given header file, if any.">findModuleForHeader</a>(File);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01"> 1005</a></span> <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">HeaderSearch::loadModuleMapFile</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File, <span class="keywordtype">bool</span> IsSystem) {</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir = File-><a class="code" href="classclang_1_1FileEntry.html#a93533898e5cfd56df70289244f623fd6" title="Return the directory the file lives in.">getDir</a>();</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>   llvm::DenseMap<const DirectoryEntry *, bool>::iterator KnownDir</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     = DirectoryHasModuleMap.find(Dir);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>   <span class="keywordflow">if</span> (KnownDir != DirectoryHasModuleMap.end())</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="keywordflow">return</span> !KnownDir->second;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>   </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   <span class="keywordtype">bool</span> Result = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#aa693079e31854e7297157e751ff6b7fd" title="Parse the given module map file, and record any modules we encounter.">parseModuleMapFile</a>(File, IsSystem);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   <span class="keywordflow">if</span> (!Result && llvm::sys::path::filename(File-><a class="code" href="classclang_1_1FileEntry.html#a94ddac74f217c35e19420dd6c419e25f">getName</a>()) == <span class="stringliteral">"module.map"</span>) {</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="comment">// If the file we loaded was a module.map, look for the corresponding</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     <span class="comment">// module_private.map.</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> PrivateFilename(Dir-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>());</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     llvm::sys::path::append(PrivateFilename, <span class="stringliteral">"module_private.map"</span>);</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *PrivateFile = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(PrivateFilename))</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>       Result = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#aa693079e31854e7297157e751ff6b7fd" title="Parse the given module map file, and record any modules we encounter.">parseModuleMapFile</a>(PrivateFile, IsSystem);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>   </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>   DirectoryHasModuleMap[Dir] = !Result;  </div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>   <span class="keywordflow">return</span> Result;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> }</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *HeaderSearch::loadFrameworkModule(StringRef Name, </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>                                           <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir,</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>                                           <span class="keywordtype">bool</span> IsSystem) {</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>   <span class="keywordflow">if</span> (<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#af4c8a3d331c1f6f1e046e7f87adc7973" title="Retrieve a module with the given name.">findModule</a>(Name))</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a>;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>   </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>   <span class="comment">// Try to load a module map file.</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>   <span class="keywordflow">switch</span> (<a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(Dir, IsSystem)) {</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>   <span class="keywordflow">case</span> LMM_InvalidModuleMap:</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   <span class="keywordflow">case</span> LMM_AlreadyLoaded:</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   <span class="keywordflow">case</span> LMM_NoDirectory:</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     <span class="keywordflow">return</span> 0;</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">case</span> LMM_NewlyLoaded:</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     <span class="keywordflow">return</span> ModMap.<a class="code" href="classclang_1_1ModuleMap.html#af4c8a3d331c1f6f1e046e7f87adc7973" title="Retrieve a module with the given name.">findModule</a>(Name);</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> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   <span class="comment">// Figure out the top-level framework directory and the submodule path from</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>   <span class="comment">// that top-level framework to the requested framework.</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<std::string, 2></a> SubmodulePath;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>   SubmodulePath.push_back(Name);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *TopFrameworkDir</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     = <a class="code" href="HeaderSearch_8cpp.html#a354205fd08019f16f9d4b2d5f1df6f82" title="Given a framework directory, find the top-most framework directory.">::getTopFrameworkDir</a>(FileMgr, Dir-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>(), SubmodulePath);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>   <span class="comment">// Try to infer a module map from the top-level framework directory.</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>   <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *Result = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#aa6a0fbdfb7431809f16fd273f84da5b6" title="Infer the contents of a framework module map from the given framework directory.">inferFrameworkModule</a>(SubmodulePath.back(), </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                                                TopFrameworkDir,</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>                                                IsSystem,</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                                                <span class="comment">/*Parent=*/</span>0);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>   <span class="keywordflow">if</span> (!Result)</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>   </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>   <span class="comment">// Follow the submodule path to find the requested (sub)framework module</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>   <span class="comment">// within the top-level framework module.</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>   SubmodulePath.pop_back();</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>   <span class="keywordflow">while</span> (!SubmodulePath.empty() && Result) {</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     Result = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#aad648df48b6a75a9321ac7f2e383c5e0" title="Retrieve a module with the given name within the given context, using direct (qualified) name lookup...">lookupModuleQualified</a>(SubmodulePath.back(), Result);</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     SubmodulePath.pop_back();</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>   }</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>   <span class="keywordflow">return</span> Result;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> }</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> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> HeaderSearch::LoadModuleMapResult </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">HeaderSearch::loadModuleMapFile</a>(StringRef DirName, <span class="keywordtype">bool</span> IsSystem) {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(DirName))</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(Dir, IsSystem);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>   </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>   <span class="keywordflow">return</span> LMM_NoDirectory;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> HeaderSearch::LoadModuleMapResult </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">HeaderSearch::loadModuleMapFile</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir, <span class="keywordtype">bool</span> IsSystem) {</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>   llvm::DenseMap<const DirectoryEntry *, bool>::iterator KnownDir</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     = DirectoryHasModuleMap.find(Dir);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>   <span class="keywordflow">if</span> (KnownDir != DirectoryHasModuleMap.end())</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>     <span class="keywordflow">return</span> KnownDir->second? LMM_AlreadyLoaded : LMM_InvalidModuleMap;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>   </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> ModuleMapFileName;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>   ModuleMapFileName += Dir-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>();</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>   <span class="keywordtype">unsigned</span> ModuleMapDirNameLen = ModuleMapFileName.size();</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>   llvm::sys::path::append(ModuleMapFileName, <span class="stringliteral">"module.map"</span>);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>   <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *ModuleMapFile = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(ModuleMapFileName)) {</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     <span class="comment">// We have found a module map file. Try to parse it.</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="keywordflow">if</span> (ModMap.<a class="code" href="classclang_1_1ModuleMap.html#aa693079e31854e7297157e751ff6b7fd" title="Parse the given module map file, and record any modules we encounter.">parseModuleMapFile</a>(ModuleMapFile, IsSystem)) {</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>       <span class="comment">// No suitable module map.</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>       DirectoryHasModuleMap[Dir] = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>       <span class="keywordflow">return</span> LMM_InvalidModuleMap;</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> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     <span class="comment">// This directory has a module map.</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     DirectoryHasModuleMap[Dir] = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     <span class="comment">// Check whether there is a private module map that we need to load as well.</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     ModuleMapFileName.erase(ModuleMapFileName.begin() + ModuleMapDirNameLen,</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>                             ModuleMapFileName.end());</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     llvm::sys::path::append(ModuleMapFileName, <span class="stringliteral">"module_private.map"</span>);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *PrivateModuleMapFile</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                                         = FileMgr.<a class="code" href="classclang_1_1FileManager.html#ae250b54e2bc90b8075b96ea7e88eff77" title="Lookup, cache, and verify the specified file (real or virtual).">getFile</a>(ModuleMapFileName)) {</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>       <span class="keywordflow">if</span> (ModMap.<a class="code" href="classclang_1_1ModuleMap.html#aa693079e31854e7297157e751ff6b7fd" title="Parse the given module map file, and record any modules we encounter.">parseModuleMapFile</a>(PrivateModuleMapFile, IsSystem)) {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>         <span class="comment">// No suitable module map.</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         DirectoryHasModuleMap[Dir] = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>         <span class="keywordflow">return</span> LMM_InvalidModuleMap;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>       }      </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">return</span> LMM_NewlyLoaded;</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="comment">// No suitable module map.</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>   DirectoryHasModuleMap[Dir] = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>   <span class="keywordflow">return</span> LMM_InvalidModuleMap;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> }</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ab61e36bf49bf787dfa7c2446b8a2510e"> 1124</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#ab61e36bf49bf787dfa7c2446b8a2510e" title="Collect the set of all known, top-level modules.">HeaderSearch::collectAllModules</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Module *></a> &Modules) {</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>   Modules.clear();</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>   </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>   <span class="comment">// Load module maps for each of the header search directories.</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Idx = 0, N = SearchDirs.size(); Idx != N; ++Idx) {</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="keywordtype">bool</span> IsSystem = SearchDirs[Idx].isSystemHeaderDirectory();</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     <span class="keywordflow">if</span> (SearchDirs[Idx].isFramework()) {</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>       llvm::error_code EC;</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>       <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> DirNative;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>       llvm::sys::path::native(SearchDirs[Idx].getFrameworkDir()->getName(),</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>                               DirNative);</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>       </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>       <span class="comment">// Search each of the ".framework" directories to load them as modules.</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>       <span class="keywordflow">for</span> (llvm::sys::fs::directory_iterator Dir(DirNative.str(), EC), DirEnd;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>            Dir != DirEnd && !EC; Dir.increment(EC)) {</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>         <span class="keywordflow">if</span> (llvm::sys::path::extension(Dir->path()) != <span class="stringliteral">".framework"</span>)</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>           <span class="keywordflow">continue</span>;</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="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *FrameworkDir = FileMgr.<a class="code" href="classclang_1_1FileManager.html#a6af5df3554d6faa096998a2dd00510fc" title="Lookup, cache, and verify the specified directory (real or virtual).">getDirectory</a>(Dir->path());</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>         <span class="keywordflow">if</span> (!FrameworkDir)</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>           <span class="keywordflow">continue</span>;</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="comment">// Load this framework module.</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>         loadFrameworkModule(llvm::sys::path::stem(Dir->path()), FrameworkDir,</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>                             IsSystem);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>     }</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     <span class="comment">// FIXME: Deal with header maps.</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     <span class="keywordflow">if</span> (SearchDirs[Idx].isHeaderMap())</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>     <span class="comment">// Try to load a module map file for the search directory.</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(SearchDirs[Idx].getDir(), IsSystem);</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="comment">// Try to load module map files for immediate subdirectories of this search</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <span class="comment">// directory.</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     loadSubdirectoryModuleMaps(SearchDirs[Idx]);</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>   }</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>   </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>   <span class="comment">// Populate the list of modules.</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>   <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1ModuleMap.html#a3798c26000fac4ac7c3da9ca67f1f619">ModuleMap::module_iterator</a> M = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#a3c37bdb86dfab455fb9d19c724bd4f9b">module_begin</a>(), </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>                                MEnd = ModMap.<a class="code" href="classclang_1_1ModuleMap.html#a0a5b86a1ca98add98e810d7d73bdfe0a">module_end</a>();</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>        M != MEnd; ++M) {</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>     Modules.push_back(M->getValue());</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> }</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> </div>
+<div class="line"><a name="l01173"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a7998076a7a2d0fb9246014cf246d4774"> 1173</a></span> <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a7998076a7a2d0fb9246014cf246d4774" title="Load all known, top-level system modules.">HeaderSearch::loadTopLevelSystemModules</a>() {</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>   <span class="comment">// Load module maps for each of the header search directories.</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Idx = 0, N = SearchDirs.size(); Idx != N; ++Idx) {</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     <span class="comment">// We only care about normal header directories.</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     <span class="keywordflow">if</span> (!SearchDirs[Idx].isNormalDir()) {</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>       <span class="keywordflow">continue</span>;</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> </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     <span class="comment">// Try to load a module map file for the search directory.</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(SearchDirs[Idx].getDir(),</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>                       SearchDirs[Idx].isSystemHeaderDirectory());</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>   }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> }</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordtype">void</span> HeaderSearch::loadSubdirectoryModuleMaps(<a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> &SearchDir) {</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>   <span class="keywordflow">if</span> (SearchDir.<a class="code" href="classclang_1_1DirectoryLookup.html#abc6ce6ad68d1ab6c0d0da55e618de42e" title="Determine whether we have already searched this entire directory for module maps.">haveSearchedAllModuleMaps</a>())</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>   </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>   llvm::error_code EC;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>   <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> DirNative;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>   llvm::sys::path::native(SearchDir.<a class="code" href="classclang_1_1DirectoryLookup.html#a4ea6beb2a269339a17ee3a72042b6ae6">getDir</a>()-><a class="code" href="classclang_1_1DirectoryEntry.html#a15bbfeeaf1752e5ead2684c445ad81f4">getName</a>(), DirNative);</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>   <span class="keywordflow">for</span> (llvm::sys::fs::directory_iterator Dir(DirNative.str(), EC), DirEnd;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>        Dir != DirEnd && !EC; Dir.increment(EC)) {</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(Dir->path(), SearchDir.<a class="code" href="classclang_1_1DirectoryLookup.html#aa9db78ca67efedb62d7b0117cfbe857f" title="Whether this describes a system header directory.">isSystemHeaderDirectory</a>());</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> </div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>   SearchDir.<a class="code" href="classclang_1_1DirectoryLookup.html#a61d876e6a45458b611dde7ed00acc221" title="Specify whether we have already searched all of the subdirectories for module maps.">setSearchedAllModuleMaps</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8d_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8d_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8d_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8d_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,307 @@
+<!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: HeaderSearch.d Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">clang API Documentation</p>
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void
 (0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(11)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(12)"><span class="SelectionMark"> </span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_f65986501076cc710d4b9355ae3fe06d.html">clang</a></li><li class="navelem"><a class="el" href="dir_87e2a7550f83bd8cbfc92736891468fc.html">lib</a></li><li class="navelem"><a class="el" href="dir_925be8e1c75f746b0aee1084b3b1a980.html">Lex</a></li><li class="navelem"><a class="el" href="dir_c266f83cbdf5b0cb8b651438a3cfe616.html">Release+Asserts</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderSearch.d</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderSearch_8d.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Release+Asserts/HeaderSearch.o \</div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Release+Asserts/HeaderSearch.d: \</div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>  HeaderSearch.cpp \</div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderSearch.h \</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/DirectoryLookup.h \</div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LLVM.h \</div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>  /home/tstellar/llvm/include/llvm/Support/Casting.h \</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>  /home/tstellar/llvm/include/llvm/Support/type_traits.h \</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>  /home/tstellar/llvm/include/llvm/Support/DataTypes.h \</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>  /home/tstellar/llvm/include/llvm/ADT/None.h \</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/SourceManager.h \</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileManager.h \</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileSystemOptions.h \</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>  /home/tstellar/llvm/include/llvm/ADT/DenseMap.h \</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>  /home/tstellar/llvm/include/llvm/ADT/DenseMapInfo.h \</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>  /home/tstellar/llvm/include/llvm/Support/PointerLikeTypeTraits.h \</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>  /home/tstellar/llvm/include/llvm/Support/AlignOf.h \</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>  /home/tstellar/llvm/include/llvm/Support/Compiler.h \</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>  /home/tstellar/llvm/include/llvm/Config/llvm-config.h \</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>  /home/tstellar/llvm/include/llvm/Support/MathExtras.h \</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>  /home/tstellar/llvm/include/llvm/Support/SwapByteOrder.h \</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>  /home/tstellar/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h \</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>  /home/tstellar/llvm/include/llvm/ADT/OwningPtr.h \</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>  /home/tstellar/llvm/include/llvm/ADT/SmallVector.h \</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>  /home/tstellar/llvm/include/llvm/ADT/StringMap.h \</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>  /home/tstellar/llvm/include/llvm/ADT/StringRef.h \</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  /home/tstellar/llvm/include/llvm/Support/<a class="code" href="Format_8cpp.html#a0805f884ee63233d49322f71926371de">Allocator</a>.h \</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  /home/tstellar/llvm/include/llvm/Support/FileSystem.h \</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>  /home/tstellar/llvm/include/llvm/ADT/SmallString.h \</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>  /home/tstellar/llvm/include/llvm/ADT/Twine.h \</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>  /home/tstellar/llvm/include/llvm/Support/ErrorHandling.h \</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>  /home/tstellar/llvm/include/llvm/Support/TimeValue.h \</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>  /home/tstellar/llvm/include/llvm/Support/system_error.h \</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/SourceLocation.h \</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>  /home/tstellar/llvm/include/llvm/ADT/ArrayRef.h \</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>  /home/tstellar/llvm/include/llvm/ADT/DenseSet.h \</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>  /home/tstellar/llvm/include/llvm/ADT/PointerIntPair.h \</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>  /home/tstellar/llvm/include/llvm/ADT/PointerUnion.h \</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>  /home/tstellar/llvm/include/llvm/Support/MemoryBuffer.h \</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>  /home/tstellar/llvm/include/llvm/Support/CBindingWrapping.h \</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>  /home/tstellar/llvm/include/llvm-c/Core.h \</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/ModuleMap.h \</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LangOptions.h \</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/CommentOptions.h \</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/ObjCRuntime.h \</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/VersionTuple.h \</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>  /home/tstellar/llvm/include/llvm/ADT/Optional.h \</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>  /home/tstellar/llvm/include/llvm/ADT/Triple.h \</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/<a class="code" href="namespaceclang.html#afbab15cd4aa598c4e6d9192f7ac4f102" title="Describes the different kinds of visibility that a declaration may have.">Visibility</a>.h \</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/<a class="code" href="namespaceclang.html#a78aadfeaf316ded55fdd2d1a9c8815b6" title="Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have...">Linkage</a>.h \</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/Sanitizers.def \</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LangOptions.def \</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/OpenCLExtensions.def \</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/Module.h \</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>  /home/tstellar/llvm/include/llvm/ADT/SetVector.h \</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>  /home/tstellar/llvm/include/llvm/ADT/SmallSet.h \</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>  /home/tstellar/llvm/include/llvm/ADT/SmallPtrSet.h \</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>  /home/tstellar/llvm/include/llvm/ADT/StringSet.h \</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/Diagnostic.h \</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticIDs.h \</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticCommonKinds.inc \</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticOptions.h \</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticOptions.def \</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/IdentifierTable.h \</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/OperatorKinds.h \</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/OperatorKinds.def \</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/TokenKinds.h \</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/TokenKinds.def \</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderMap.h \</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderSearchOptions.h \</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Lexer.h \</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/PreprocessorLexer.h \</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/MultipleIncludeOpt.h \</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/<a class="code" href="UnwrappedLineParser_8cpp.html#ac39165965ffcb0218343355d1f482d64">Token</a>.h \</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>  /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/TemplateKinds.h \</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>  /home/tstellar/llvm/include/llvm/Support/Capacity.h \</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>  /home/tstellar/llvm/include/llvm/Support/Path.h \</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>  /home/tstellar/llvm/include/llvm/Support/raw_ostream.h</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderSearch.h:</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/DirectoryLookup.h:</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> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LLVM.h:</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> /home/tstellar/llvm/include/llvm/Support/Casting.h:</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> /home/tstellar/llvm/include/llvm/Support/type_traits.h:</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> /home/tstellar/llvm/include/llvm/Support/DataTypes.h:</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> /home/tstellar/llvm/include/llvm/ADT/None.h:</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/SourceManager.h:</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileManager.h:</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/FileSystemOptions.h:</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> /home/tstellar/llvm/include/llvm/ADT/DenseMap.h:</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> /home/tstellar/llvm/include/llvm/ADT/DenseMapInfo.h:</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> /home/tstellar/llvm/include/llvm/Support/PointerLikeTypeTraits.h:</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> /home/tstellar/llvm/include/llvm/Support/AlignOf.h:</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> /home/tstellar/llvm/include/llvm/Support/Compiler.h:</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> /home/tstellar/llvm/include/llvm/Config/llvm-config.h:</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> /home/tstellar/llvm/include/llvm/Support/MathExtras.h:</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> /home/tstellar/llvm/include/llvm/Support/SwapByteOrder.h:</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> /home/tstellar/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> /home/tstellar/llvm/include/llvm/ADT/OwningPtr.h:</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> /home/tstellar/llvm/include/llvm/ADT/SmallVector.h:</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> /home/tstellar/llvm/include/llvm/ADT/StringMap.h:</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> /home/tstellar/llvm/include/llvm/ADT/StringRef.h:</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> /home/tstellar/llvm/include/llvm/Support/<a class="code" href="Format_8cpp.html#a0805f884ee63233d49322f71926371de">Allocator</a>.h:</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> /home/tstellar/llvm/include/llvm/Support/FileSystem.h:</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> /home/tstellar/llvm/include/llvm/ADT/SmallString.h:</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> /home/tstellar/llvm/include/llvm/ADT/Twine.h:</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> /home/tstellar/llvm/include/llvm/Support/ErrorHandling.h:</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> /home/tstellar/llvm/include/llvm/Support/TimeValue.h:</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> /home/tstellar/llvm/include/llvm/Support/system_error.h:</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> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/SourceLocation.h:</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> /home/tstellar/llvm/include/llvm/ADT/ArrayRef.h:</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> /home/tstellar/llvm/include/llvm/ADT/DenseSet.h:</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> /home/tstellar/llvm/include/llvm/ADT/PointerIntPair.h:</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> /home/tstellar/llvm/include/llvm/ADT/PointerUnion.h:</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> /home/tstellar/llvm/include/llvm/Support/MemoryBuffer.h:</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> /home/tstellar/llvm/include/llvm/Support/CBindingWrapping.h:</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> /home/tstellar/llvm/include/llvm-c/Core.h:</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/ModuleMap.h:</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LangOptions.h:</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/CommentOptions.h:</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/ObjCRuntime.h:</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> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/VersionTuple.h:</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> /home/tstellar/llvm/include/llvm/ADT/Optional.h:</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> /home/tstellar/llvm/include/llvm/ADT/Triple.h:</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> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/<a class="code" href="namespaceclang.html#afbab15cd4aa598c4e6d9192f7ac4f102" title="Describes the different kinds of visibility that a declaration may have.">Visibility</a>.h:</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/<a class="code" href="namespaceclang.html#a78aadfeaf316ded55fdd2d1a9c8815b6" title="Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have...">Linkage</a>.h:</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/Sanitizers.def:</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/LangOptions.def:</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/OpenCLExtensions.def:</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/Module.h:</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> /home/tstellar/llvm/include/llvm/ADT/SetVector.h:</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> /home/tstellar/llvm/include/llvm/ADT/SmallSet.h:</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> /home/tstellar/llvm/include/llvm/ADT/SmallPtrSet.h:</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> /home/tstellar/llvm/include/llvm/ADT/StringSet.h:</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/Diagnostic.h:</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticIDs.h:</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticCommonKinds.inc:</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticOptions.h:</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/DiagnosticOptions.def:</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/IdentifierTable.h:</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/OperatorKinds.h:</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/OperatorKinds.def:</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/TokenKinds.h:</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/TokenKinds.def:</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderMap.h:</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/HeaderSearchOptions.h:</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/Lexer.h:</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/PreprocessorLexer.h:</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/MultipleIncludeOpt.h:</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/<a class="code" href="UnwrappedLineParser_8cpp.html#ac39165965ffcb0218343355d1f482d64">Token</a>.h:</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> /home/tstellar/llvm/tools/clang/lib/<a class="code" href="Format_8cpp.html#af225acf665df209626523284f00162d4">Lex</a>/../../include/clang/Basic/TemplateKinds.h:</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> /home/tstellar/llvm/include/llvm/Support/Capacity.h:</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> /home/tstellar/llvm/include/llvm/Support/Path.h:</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> /home/tstellar/llvm/include/llvm/Support/raw_ostream.h:</div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8h_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8h_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8h_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/HeaderSearch_8h_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,711 @@
+<!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: HeaderSearch.h 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_3e61bbac0c8515a3c083eb51d03eb390.html">include</a></li><li class="navelem"><a class="el" href="dir_ee4f288247dc2d9ccd0382aea6916312.html">clang</a></li><li class="navelem"><a class="el" href="dir_49bfb562b5f2c4dac4f33842ea680dda.html">Lex</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">HeaderSearch.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="HeaderSearch_8h.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">//===--- HeaderSearch.h - Resolve Header File Locations ---------*- C++ -*-===//</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">//                     The LLVM Compiler Infrastructure</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">// This file defines the HeaderSearch interface.</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">#ifndef LLVM_CLANG_LEX_HEADERSEARCH_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor"></span><span class="preprocessor">#define LLVM_CLANG_LEX_HEADERSEARCH_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#include "<a class="code" href="DirectoryLookup_8h.html">clang/Lex/DirectoryLookup.h</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include "<a class="code" href="ModuleMap_8h.html">clang/Lex/ModuleMap.h</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include "llvm/ADT/ArrayRef.h"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "llvm/ADT/IntrusiveRefCntPtr.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "llvm/ADT/OwningPtr.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include "llvm/ADT/StringMap.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "llvm/ADT/StringSet.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "llvm/Support/Allocator.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <vector></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="keyword">namespace </span>clang {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>   </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="keyword">class </span>DiagnosticsEngine;  </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">class </span>ExternalIdentifierLookup;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="keyword">class </span>FileEntry;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keyword">class </span>FileManager;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keyword">class </span>HeaderSearchOptions;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">class </span>IdentifierInfo;</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">/// \brief The preprocessor keeps track of this information for each</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/// file that is \#included.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html">   38</a></span> <span class="comment"></span><span class="keyword">struct </span><a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> {<span class="comment"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">  /// \brief True if this is a \#import'd or \#pragma once file.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d">   40</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a> : 1;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  /// \brief True if this is a \#pragma once file.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82">   43</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a> : 1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  /// DirInfo - Keep track of whether this is a system header, and if so,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  /// whether it is C++ clean or not.  This can be set by the include paths or</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  /// by \#pragma gcc system_header.  This is an instance of</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  /// SrcMgr::CharacteristicKind.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">   49</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> : 2;</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">  /// \brief Whether this header file info was supplied by an external source.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234">   52</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234" title="Whether this header file info was supplied by an external source.">External</a> : 1;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">  /// \brief Whether this header is part of a module.</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a2ba6a0c7b39e43e5fc7bb4310e776299">   55</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a2ba6a0c7b39e43e5fc7bb4310e776299" title="Whether this header is part of a module.">isModuleHeader</a> : 1;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">  /// \brief Whether this header is part of the module that we are building.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a7831ddf7e23772302c7600cb7dee3433">   58</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a7831ddf7e23772302c7600cb7dee3433" title="Whether this header is part of the module that we are building.">isCompilingModuleHeader</a> : 1;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">  /// \brief Whether this header is part of the module that we are building.</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  /// This is an instance of ModuleMap::ModuleHeaderRole.</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a94bdb96c0a63bf5fb96554b4e753018b">   62</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a94bdb96c0a63bf5fb96554b4e753018b" title="Whether this header is part of the module that we are building. This is an instance of ModuleMap::Mod...">HeaderRole</a> : 2;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  /// \brief Whether this structure is considered to already have been</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">  /// "resolved", meaning that it was loaded from the external source.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a65119c277c99f4729d4fb87942a19265">   66</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a65119c277c99f4729d4fb87942a19265" title="Whether this structure is considered to already have been "resolved", meaning that it was loaded from...">Resolved</a> : 1;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">  /// \brief Whether this is a header inside a framework that is currently</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">  /// being built. </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">  /// When a framework is being built, the headers have not yet been placed</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">  /// into the appropriate framework subdirectories, and therefore are</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">  /// provided via a header map. This bit indicates when this is one of</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">  /// those framework headers.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51">   75</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a> : 1;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">  /// \brief The number of times the file has been included already.</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149">   78</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">  /// \brief The ID number of the controlling macro.</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">  /// This ID number will be non-zero when there is a controlling</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">  /// macro whose IdentifierInfo may not yet have been loaded from</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">  /// external storage.</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06">   85</a></span> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">  /// If this file has a \#ifndef XXX (or equivalent) guard that</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">  /// protects the entire contents of the file, this is the identifier</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">  /// for the macro that controls whether or not it has any effect.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">  /// Note: Most clients should use getControllingMacro() to access</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  /// the controlling macro of this header, since</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">  /// getControllingMacro() is able to load a controlling macro from</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">  /// external storage.</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">   95</a></span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">  /// \brief If this header came from a framework include, this is the name</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">  /// of the framework.</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe">   99</a></span> <span class="comment"></span>  StringRef <a class="code" href="structclang_1_1HeaderFileInfo.html#ac862ab9a9e49c2e888b27bb17e10dbbe" title="If this header came from a framework include, this is the name of the framework.">Framework</a>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a341d90dca3bb84cb9251534abacb6bb3">  101</a></span>   <a class="code" href="structclang_1_1HeaderFileInfo.html#a341d90dca3bb84cb9251534abacb6bb3">HeaderFileInfo</a>()</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     : <a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>), <a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>), <a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a>(SrcMgr::<a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dab0548ddada8d87ad92e94d67e5af0a4f">C_User</a>), </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234" title="Whether this header file info was supplied by an external source.">External</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>), <a class="code" href="structclang_1_1HeaderFileInfo.html#a2ba6a0c7b39e43e5fc7bb4310e776299" title="Whether this header is part of a module.">isModuleHeader</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>), <a class="code" href="structclang_1_1HeaderFileInfo.html#a7831ddf7e23772302c7600cb7dee3433" title="Whether this header is part of the module that we are building.">isCompilingModuleHeader</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>),</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html#a94bdb96c0a63bf5fb96554b4e753018b" title="Whether this header is part of the module that we are building. This is an instance of ModuleMap::Mod...">HeaderRole</a>(<a class="code" href="classclang_1_1ModuleMap.html">ModuleMap</a>::NormalHeader),</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html#a65119c277c99f4729d4fb87942a19265" title="Whether this structure is considered to already have been "resolved", meaning that it was loaded from...">Resolved</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>), <a class="code" href="structclang_1_1HeaderFileInfo.html#a0ec8d7688d1709154e4d96251bf4df51" title="Whether this is a header inside a framework that is currently being built.">IndexHeaderMapHeader</a>(<a class="code" href="stdbool_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>),</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a>(0), <a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>(0), <a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a>(0)  {}</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment"></span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">  /// \brief Retrieve the controlling macro for this header file, if</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">  /// any.</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *<a class="code" href="structclang_1_1HeaderFileInfo.html#a4e3b8ee201e46b609f2c4494aa354314" title="Retrieve the controlling macro for this header file, if any.">getControllingMacro</a>(<a class="code" href="classclang_1_1ExternalIdentifierLookup.html" title="An abstract class used to resolve numerical identifier references (meaningful only to some external s...">ExternalIdentifierLookup</a> *<a class="code" href="structclang_1_1HeaderFileInfo.html#aeec64e2b6e20fdab779e56019cad9234" title="Whether this header file info was supplied by an external source.">External</a>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">  /// \brief Determine whether this is a non-default header file info, e.g.,</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">  /// it corresponds to an actual header we've included or tried to include.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#ab435dbfb15946f71c9209a3a99f6bcb0">  114</a></span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#ab435dbfb15946f71c9209a3a99f6bcb0" title="Determine whether this is a non-default header file info, e.g., it corresponds to an actual header we...">isNonDefault</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordflow">return</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a> || <a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a> || <a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a> || <a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a> || </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       <a class="code" href="structclang_1_1HeaderFileInfo.html#ac93bd102f7b5405b651596afbd9a5d06" title="The ID number of the controlling macro.">ControllingMacroID</a>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">  /// \brief Get the HeaderRole properly typed.</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#a8e62e18605028f8124133afd46876d7d">  120</a></span> <span class="comment"></span>  <a class="code" href="classclang_1_1ModuleMap.html#ac7a2413d4d0a8f29d2dad359bcfd8dec" title="Describes the role of a module header.">ModuleMap::ModuleHeaderRole</a> <a class="code" href="structclang_1_1HeaderFileInfo.html#a8e62e18605028f8124133afd46876d7d" title="Get the HeaderRole properly typed.">getHeaderRole</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="classclang_1_1ModuleMap.html#ac7a2413d4d0a8f29d2dad359bcfd8dec" title="Describes the role of a module header.">ModuleMap::ModuleHeaderRole</a><span class="keyword">></span>(<a class="code" href="structclang_1_1HeaderFileInfo.html#a94bdb96c0a63bf5fb96554b4e753018b" title="Whether this header is part of the module that we are building. This is an instance of ModuleMap::Mod...">HeaderRole</a>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment"></span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">  /// \brief Set the HeaderRole properly typed.</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="code" href="structclang_1_1HeaderFileInfo.html#adfa2ec0e7ae86a53f3f51f07b3da4775">  125</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="structclang_1_1HeaderFileInfo.html#adfa2ec0e7ae86a53f3f51f07b3da4775" title="Set the HeaderRole properly typed.">setHeaderRole</a>(<a class="code" href="classclang_1_1ModuleMap.html#ac7a2413d4d0a8f29d2dad359bcfd8dec" title="Describes the role of a module header.">ModuleMap::ModuleHeaderRole</a> Role) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <a class="code" href="structclang_1_1HeaderFileInfo.html#a94bdb96c0a63bf5fb96554b4e753018b" title="Whether this header is part of the module that we are building. This is an instance of ModuleMap::Mod...">HeaderRole</a> = Role;</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> };</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment"></span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/// \brief An external source of header file information, which may supply</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/// information about header files already included.</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"><a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html">  132</a></span> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html" title="An external source of header file information, which may supply information about header files alread...">ExternalHeaderFileInfoSource</a> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keyword">virtual</span> <a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html#a8aee3b4ce939e93bac8d22ccd3908db0">~ExternalHeaderFileInfoSource</a>();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">  /// \brief Retrieve the header file information for the given file entry.</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">  /// \returns Header file information for the given file entry, with the</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">  /// \c External bit set. If the file entry is not known, return a </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">  /// default-constructed \c HeaderFileInfo.</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> <a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html#a71bc0d45c83dd051437244da61737d9c" title="Retrieve the header file information for the given file entry.">GetHeaderFileInfo</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE) = 0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> };</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">/// \brief Encapsulates the information needed to find the file referenced</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">/// by a \#include or \#include_next, (sub-)framework lookup, etc.</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html">  146</a></span> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a> {<span class="comment"></span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">  /// This structure is used to record entries in our framework cache.</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment"></span>  <span class="keyword">struct </span>FrameworkCacheEntry {<span class="comment"></span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">    /// The directory entry which should be used for the cached framework.</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment"></span>    <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Directory;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment"></span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">    /// Whether this framework has been "user-specified" to be treated as if it</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">    /// were a system framework (even if it was found outside a system framework</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">    /// directory).</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment"></span>    <span class="keywordtype">bool</span> IsUserSpecifiedSystemFramework;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   };</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment"></span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">  /// \brief Header-search options used to initialize this header search.</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment"></span>  <a class="code" href="classllvm_1_1IntrusiveRefCntPtr.html">IntrusiveRefCntPtr<HeaderSearchOptions></a> HSOpts;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FileMgr;<span class="comment"></span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">  /// \#include search path information.  Requests for \#include "x" search the</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">  /// directory of the \#including file first, then each directory in SearchDirs</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">  /// consecutively. Requests for <x> search the current dir first, then each</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">  /// directory in SearchDirs, starting at AngledDirIdx, consecutively.  If</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">  /// NoCurDirSearch is true, then the check for the file in the current</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">  /// directory is suppressed.</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment"></span>  std::vector<DirectoryLookup> SearchDirs;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordtype">unsigned</span> AngledDirIdx;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordtype">unsigned</span> SystemDirIdx;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordtype">bool</span> NoCurDirSearch;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment"></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">  /// \brief \#include prefixes for which the 'system header' property is</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">  /// overridden.</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">  /// For a \#include "x" or \#include <x> directive, the last string in this</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">  /// list which is a prefix of 'x' determines whether the file is treated as</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">  /// a system header.</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment"></span>  std::vector<std::pair<std::string, bool> > SystemHeaderPrefixes;</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">  /// \brief The path to the module cache.</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment"></span>  std::string ModuleCachePath;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">  /// \brief All of the preprocessor-specific data about files that are</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">  /// included, indexed by the FileEntry's UID.</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment"></span>  std::vector<HeaderFileInfo> FileInfo;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment"></span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">  /// \brief Keeps track of each lookup performed by LookupFile.</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">  /// The first part of the value is the starting index in SearchDirs</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">  /// that the cached search was performed from.  If there is a hit and</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">  /// this value doesn't match the current query, the cache has to be</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">  /// ignored.  The second value is the entry in SearchDirs that satisfied</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">  /// the query.</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment"></span>  llvm::StringMap<std::pair<unsigned, unsigned>, llvm::BumpPtrAllocator></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     LookupFileCache;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">  /// \brief Collection mapping a framework or subframework</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">  /// name like "Carbon" to the Carbon.framework directory.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment"></span>  llvm::StringMap<FrameworkCacheEntry, llvm::BumpPtrAllocator> FrameworkMap;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment"></span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">  /// IncludeAliases - maps include file names (including the quotes or</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">  /// angle brackets) to other include file names.  This is used to support the</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">  /// include_alias pragma for Microsoft compatibility.</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment"></span>  <span class="keyword">typedef</span> llvm::StringMap<std::string, llvm::BumpPtrAllocator></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     IncludeAliasMap;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <a class="code" href="classllvm_1_1OwningPtr.html">OwningPtr<IncludeAliasMap></a> IncludeAliases;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment"></span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">  /// HeaderMaps - This is a mapping from FileEntry -> HeaderMap, uniquing</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">  /// headermaps.  This vector owns the headermap.</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment"></span>  std::vector<std::pair<const FileEntry*, const HeaderMap*> > HeaderMaps;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment"></span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">  /// \brief The mapping between modules and headers.</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment"></span>  <span class="keyword">mutable</span> <a class="code" href="classclang_1_1ModuleMap.html">ModuleMap</a> ModMap;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">  /// \brief Describes whether a given directory has a module map in it.</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment"></span>  llvm::DenseMap<const DirectoryEntry *, bool> DirectoryHasModuleMap;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">  /// \brief Uniqued set of framework names, which is used to track which </span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">  /// headers were included as framework headers.</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment"></span>  llvm::StringSet<llvm::BumpPtrAllocator> FrameworkNames;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">  /// \brief Entity used to resolve the identifier IDs of controlling</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">  /// macros into IdentifierInfo pointers, as needed.</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment"></span>  <a class="code" href="classclang_1_1ExternalIdentifierLookup.html" title="An abstract class used to resolve numerical identifier references (meaningful only to some external s...">ExternalIdentifierLookup</a> *ExternalLookup;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment"></span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">  /// \brief Entity used to look up stored header file information.</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment"></span>  <a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html" title="An external source of header file information, which may supply information about header files alread...">ExternalHeaderFileInfoSource</a> *ExternalSource;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="comment">// Various statistics we track for performance analysis.</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordtype">unsigned</span> NumIncluded;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordtype">unsigned</span> NumMultiIncludeFileOptzn;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordtype">unsigned</span> NumFrameworkLookups, NumSubFrameworkLookups;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="comment">// HeaderSearch doesn't support default or copy construction.</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a>&) LLVM_DELETED_FUNCTION;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a>&) LLVM_DELETED_FUNCTION;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a4be27ce36ec7bad4e300508a0b62eaf2">  239</a></span>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a>;</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> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a>(<a class="code" href="classllvm_1_1IntrusiveRefCntPtr.html">IntrusiveRefCntPtr<HeaderSearchOptions></a> HSOpts,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                <a class="code" href="classclang_1_1SourceManager.html" title="This class handles loading and caching of source files into memory.">SourceManager</a> &<a class="code" href="Format_8cpp.html#a8b28f9f83ac8256fbde7e45b0f874f27">SourceMgr</a>, <a class="code" href="classclang_1_1DiagnosticsEngine.html" title="Concrete class used by the front-end to report problems and issues.">DiagnosticsEngine</a> &Diags,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                <span class="keyword">const</span> <a class="code" href="classclang_1_1LangOptions.html" title="Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...">LangOptions</a> &LangOpts, <span class="keyword">const</span> <a class="code" href="classclang_1_1TargetInfo.html" title="Exposes information about the current target.">TargetInfo</a> *Target);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <a class="code" href="classclang_1_1HeaderSearch.html#a3229c762bd42c6822d9b97b1c7d48f9c">~HeaderSearch</a>();</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment"></span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">  /// \brief Retrieve the header-search options with which this header search</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">  /// was initialized.</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a2987826005bf4f311ff97f2a54503010">  249</a></span> <span class="comment"></span>  <a class="code" href="classclang_1_1HeaderSearchOptions.html">HeaderSearchOptions</a> &<a class="code" href="classclang_1_1HeaderSearch.html#a2987826005bf4f311ff97f2a54503010" title="Retrieve the header-search options with which this header search was initialized.">getHeaderSearchOpts</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *HSOpts; }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   </div>
+<div class="line"><a name="l00251"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a835b49793639b408e983c0c31fbe48c4">  251</a></span>   <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &<a class="code" href="classclang_1_1HeaderSearch.html#a835b49793639b408e983c0c31fbe48c4">getFileMgr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FileMgr; }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment"></span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">  /// \brief Interface for setting the file search paths.</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a19b1d8865ffb74c8b34f49d817e7acc4">  254</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a19b1d8865ffb74c8b34f49d817e7acc4" title="Interface for setting the file search paths.">SetSearchPaths</a>(<span class="keyword">const</span> std::vector<DirectoryLookup> &dirs,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                       <span class="keywordtype">unsigned</span> angledDirIdx, <span class="keywordtype">unsigned</span> systemDirIdx,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                       <span class="keywordtype">bool</span> noCurDirSearch) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     assert(angledDirIdx <= systemDirIdx && systemDirIdx <= dirs.size() &&</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         <span class="stringliteral">"Directory indicies are unordered"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     SearchDirs = dirs;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     AngledDirIdx = angledDirIdx;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     SystemDirIdx = systemDirIdx;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     NoCurDirSearch = noCurDirSearch;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="comment">//LookupFileCache.clear();</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment"></span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">  /// \brief Add an additional search path.</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#aff9a70dc2b1e2681fe43b3098d3afddd">  267</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#aff9a70dc2b1e2681fe43b3098d3afddd" title="Add an additional search path.">AddSearchPath</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> &dir, <span class="keywordtype">bool</span> isAngled) {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="keywordtype">unsigned</span> idx = isAngled ? SystemDirIdx : AngledDirIdx;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     SearchDirs.insert(SearchDirs.begin() + idx, dir);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordflow">if</span> (!isAngled)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       AngledDirIdx++;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     SystemDirIdx++;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment"></span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">  /// \brief Set the list of system header prefixes.</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a5c2027f87e7db5e8eda5c218faaa67ac">  276</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a5c2027f87e7db5e8eda5c218faaa67ac" title="Set the list of system header prefixes.">SetSystemHeaderPrefixes</a>(<a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef</a><std::pair<std::string, bool> > <a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     SystemHeaderPrefixes.assign(<a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>.begin(), <a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a>.end());</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment"></span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">  /// \brief Checks whether the map exists or not.</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a286f7048b35f5af3eeb46f940e563736">  281</a></span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a286f7048b35f5af3eeb46f940e563736" title="Checks whether the map exists or not.">HasIncludeAliasMap</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordflow">return</span> IncludeAliases.isValid();</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment"></span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">  /// \brief Map the source include name to the dest include name.</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">  /// The Source should include the angle brackets or quotes, the dest </span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment">  /// should not.  This allows for distinction between <> and "" headers.</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#aeeda46691c6abb55d6eef5aef5af552a">  289</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#aeeda46691c6abb55d6eef5aef5af552a" title="Map the source include name to the dest include name.">AddIncludeAlias</a>(StringRef Source, StringRef Dest) {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="keywordflow">if</span> (!IncludeAliases)</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       IncludeAliases.reset(<span class="keyword">new</span> IncludeAliasMap);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     (*IncludeAliases)[Source] = Dest;</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> <span class="comment"></span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">  /// MapHeaderToIncludeAlias - Maps one header file name to a different header</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">  /// file name, for use with the include_alias pragma.  Note that the source</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">  /// file name should include the angle brackets or quotes.  Returns StringRef</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">  /// as null if the header cannot be mapped.</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#af02f0b6902f59ca0c55659e340754cc6">  299</a></span> <span class="comment"></span>  StringRef <a class="code" href="classclang_1_1HeaderSearch.html#af02f0b6902f59ca0c55659e340754cc6">MapHeaderToIncludeAlias</a>(StringRef Source) {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     assert(IncludeAliases && <span class="stringliteral">"Trying to map headers when there's no map"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="comment">// Do any filename replacements before anything else</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     IncludeAliasMap::const_iterator Iter = IncludeAliases->find(Source);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordflow">if</span> (Iter != IncludeAliases->end())</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       <span class="keywordflow">return</span> Iter->second;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordflow">return</span> StringRef();</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="comment"></span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="comment">  /// \brief Set the path to the module cache.</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a6fe933e986ffcc095b3b365293df5e19">  310</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a6fe933e986ffcc095b3b365293df5e19" title="Set the path to the module cache.">setModuleCachePath</a>(StringRef CachePath) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     ModuleCachePath = CachePath;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">  /// \brief Retrieve the path to the module cache.</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a99ea51bfb4bb5f4742de10c8dfde0540">  315</a></span> <span class="comment"></span>  StringRef <a class="code" href="classclang_1_1HeaderSearch.html#a99ea51bfb4bb5f4742de10c8dfde0540" title="Retrieve the path to the module cache.">getModuleCachePath</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ModuleCachePath; }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment"></span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">  /// \brief Consider modules when including files from this directory.</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a0362abd74bc7ae0d61a4c1a2f13b7eb7">  318</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a0362abd74bc7ae0d61a4c1a2f13b7eb7" title="Consider modules when including files from this directory.">setDirectoryHasModuleMap</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a>* Dir) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     DirectoryHasModuleMap[Dir] = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">  /// \brief Forget everything we know about headers so far.</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ae8c6f3b7473688ec89b77eb14e87ece6">  323</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#ae8c6f3b7473688ec89b77eb14e87ece6" title="Forget everything we know about headers so far.">ClearFileInfo</a>() {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     FileInfo.clear();</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a207bf17d2d4ffae614a61d9fdb794d39">  327</a></span>   <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a207bf17d2d4ffae614a61d9fdb794d39">SetExternalLookup</a>(<a class="code" href="classclang_1_1ExternalIdentifierLookup.html" title="An abstract class used to resolve numerical identifier references (meaningful only to some external s...">ExternalIdentifierLookup</a> *EIL) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     ExternalLookup = EIL;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#aeb9f553ff6f8875baa21b088a7bf2356">  331</a></span>   <a class="code" href="classclang_1_1ExternalIdentifierLookup.html" title="An abstract class used to resolve numerical identifier references (meaningful only to some external s...">ExternalIdentifierLookup</a> *<a class="code" href="classclang_1_1HeaderSearch.html#aeb9f553ff6f8875baa21b088a7bf2356">getExternalLookup</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">return</span> ExternalLookup;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">  /// \brief Set the external source of header information.</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a059132ea748c7b5220c3e5a00c15ecdd">  336</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a059132ea748c7b5220c3e5a00c15ecdd" title="Set the external source of header information.">SetExternalSource</a>(<a class="code" href="classclang_1_1ExternalHeaderFileInfoSource.html" title="An external source of header file information, which may supply information about header files alread...">ExternalHeaderFileInfoSource</a> *ES) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     ExternalSource = ES;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   }</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">  /// \brief Set the target information for the header search, if not</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">  /// already known.</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a92e6479b7860243acd7dac0bca774905" title="Set the target information for the header search, if not already known.">setTarget</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1TargetInfo.html" title="Exposes information about the current target.">TargetInfo</a> &Target);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">  /// \brief Given a "foo" or <foo> reference, look up the indicated file,</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">  /// return null on failure.</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">  /// \returns If successful, this returns 'UsedDir', the DirectoryLookup member</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="comment">  /// the file was found in, or null if not applicable.</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment">  /// \param isAngled indicates whether the file reference is a <> reference.</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">  /// \param CurDir If non-null, the file was found in the specified directory</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">  /// search location.  This is used to implement \#include_next.</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">  /// \param CurFileEnt If non-null, indicates where the \#including file is, in</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">  /// case a relative search is needed.</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">  /// \param SearchPath If non-null, will be set to the search path relative</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">  /// to which the file was found. If the include path is absolute, SearchPath</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">  /// will be set to an empty string.</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">  /// \param RelativePath If non-null, will be set to the path relative to</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">  /// SearchPath at which the file was found. This only differs from the</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">  /// Filename for framework includes.</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment">  /// \param SuggestedModule If non-null, and the file found is semantically</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">  /// part of a known module, this will be set to the module that should</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">  /// be imported instead of preprocessing/parsing the file found.</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1HeaderSearch.html#aa1c602962266d121be3a1f58142abc9d" title="Given a "foo" or <foo> reference, look up the indicated file, return null on failure.">LookupFile</a>(StringRef Filename, <span class="keywordtype">bool</span> isAngled,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                               <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> *FromDir,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                               <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> *&CurDir,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                               <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *CurFileEnt,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                               <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *SearchPath,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                               <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *RelativePath,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                               <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> *SuggestedModule,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                               <span class="keywordtype">bool</span> SkipCache = <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="comment"></span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">  /// \brief Look up a subframework for the specified \#include file.</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">  /// For example, if \#include'ing <HIToolbox/HIToolbox.h> from</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">  /// within ".../Carbon.framework/Headers/Carbon.h", check to see if</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">  /// HIToolbox is a subframework within Carbon.framework.  If so, return</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">  /// the FileEntry for the designated file, otherwise return null.</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *<a class="code" href="classclang_1_1HeaderSearch.html#ad1609d2856163bb155dd653560e575af" title="Look up a subframework for the specified #include file.">LookupSubframeworkHeader</a>(</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       StringRef Filename,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *RelativeFileEnt,</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *SearchPath,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       <a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> *RelativePath,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> *SuggestedModule);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment"></span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">  /// \brief Look up the specified framework name in our framework cache.</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">  /// \returns The DirectoryEntry it is in if we know, null otherwise.</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a8db5b49023fd95063510496da39615c9">  393</a></span> <span class="comment"></span>  FrameworkCacheEntry &<a class="code" href="classclang_1_1HeaderSearch.html#a8db5b49023fd95063510496da39615c9" title="Look up the specified framework name in our framework cache.">LookupFrameworkCache</a>(StringRef FWName) {</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordflow">return</span> FrameworkMap.GetOrCreateValue(FWName).getValue();</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> <span class="comment"></span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="comment">  /// \brief Mark the specified file as a target of of a \#include,</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">  /// \#include_next, or \#import directive.</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">  /// \return false if \#including the file will have no effect or true</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">  /// if we should include it.</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a200f5d2b2401cc74417d0028c69332e6" title="Mark the specified file as a target of of a #include, #include_next, or #import directive.">ShouldEnterIncludeFile</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File, <span class="keywordtype">bool</span> isImport);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment"></span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">  /// \brief Return whether the specified file is a normal header,</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="comment">  /// a system header, or a C++ friendly system header.</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a1139cf5a4faa0d4a4235cc09e241f669">  407</a></span> <span class="comment"></span>  <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35d" title="Indicates whether a file or directory holds normal user code, system code, or system code which is im...">SrcMgr::CharacteristicKind</a> <a class="code" href="classclang_1_1HeaderSearch.html#a1139cf5a4faa0d4a4235cc09e241f669" title="Return whether the specified file is a normal header, a system header, or a C++ friendly system heade...">getFileDirFlavor</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keywordflow">return</span> (<a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35d" title="Indicates whether a file or directory holds normal user code, system code, or system code which is im...">SrcMgr::CharacteristicKind</a>)<a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File).<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a>;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment"></span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">  /// \brief Mark the specified file as a "once only" file, e.g. due to</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">  /// \#pragma once.</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a44f43c40fda80d25b632e2a1384a04c9">  413</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a44f43c40fda80d25b632e2a1384a04c9" title="Mark the specified file as a "once only" file, e.g. due to #pragma once.">MarkFileIncludeOnce</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &FI = <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     FI.<a class="code" href="structclang_1_1HeaderFileInfo.html#ac0ad59a7c1629df0785907825f58235d" title="True if this is a #import'd or #pragma once file.">isImport</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     FI.<a class="code" href="structclang_1_1HeaderFileInfo.html#a475abb7297c757bc8297c7bfeb099c82" title="True if this is a #pragma once file.">isPragmaOnce</a> = <span class="keyword">true</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="comment"></span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="comment">  /// \brief Mark the specified file as a system header, e.g. due to</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="comment">  /// \#pragma GCC system_header.</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a9084aa19c65ab6a05280ba32668cf474">  421</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a9084aa19c65ab6a05280ba32668cf474" title="Mark the specified file as a system header, e.g. due to #pragma GCC system_header.">MarkFileSystemHeader</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) {</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File).<a class="code" href="structclang_1_1HeaderFileInfo.html#a1b4e79fbe89574cd4d8c55042beac5d7">DirInfo</a> = <a class="code" href="namespaceclang_1_1SrcMgr.html#a27297b3568f189486de6df08a8cba35dac3b930a303c855d8864c56fcc992074e">SrcMgr::C_System</a>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="comment"></span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="comment">  /// \brief Mark the specified file as part of a module.</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a1325cd90bd38752e2547da2147db8e09" title="Mark the specified file as part of a module.">MarkFileModuleHeader</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                             <a class="code" href="classclang_1_1ModuleMap.html#ac7a2413d4d0a8f29d2dad359bcfd8dec" title="Describes the role of a module header.">ModuleMap::ModuleHeaderRole</a> Role,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                             <span class="keywordtype">bool</span> IsCompiledModuleHeader);</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">  /// \brief Increment the count for the number of times the specified</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="comment">  /// FileEntry has been entered.</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a4610800832a9945d4505046e714410cd">  432</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a4610800832a9945d4505046e714410cd" title="Increment the count for the number of times the specified FileEntry has been entered.">IncrementIncludeCount</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) {</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     ++<a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File).<a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a>;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment"></span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">  /// \brief Mark the specified file as having a controlling macro.</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="comment">  /// This is used by the multiple-include optimization to eliminate</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="comment">  /// no-op \#includes.</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a01fcbeff2dddc01e28914dafef3f2e57">  440</a></span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a01fcbeff2dddc01e28914dafef3f2e57" title="Mark the specified file as having a controlling macro.">SetFileControllingMacro</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File,</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>                                <span class="keyword">const</span> <a class="code" href="classclang_1_1IdentifierInfo.html">IdentifierInfo</a> *ControllingMacro) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File).<a class="code" href="structclang_1_1HeaderFileInfo.html#a1f7b591e80775b023a1c836a80a7190d">ControllingMacro</a> = ControllingMacro;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment"></span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">  /// \brief Return true if this is the first time encountering this header.</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a555709a235723fb905d1a527ed49a311">  446</a></span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a555709a235723fb905d1a527ed49a311" title="Return true if this is the first time encountering this header.">FirstTimeLexingFile</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) {</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <span class="keywordflow">return</span> <a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(File).<a class="code" href="structclang_1_1HeaderFileInfo.html#af0310d6d8cc2c4d7305e4c0b11cf0149" title="The number of times the file has been included already.">NumIncludes</a> == 1;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="comment"></span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="comment">  /// \brief Determine whether this file is intended to be safe from</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">  /// multiple inclusions, e.g., it has \#pragma once or a controlling</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">  /// macro.</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="comment">  /// This routine does not consider the effect of \#import</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a46e7c5c402dad28ed7df35b51ff66dd1" title="Determine whether this file is intended to be safe from multiple inclusions, e.g., it has #pragma once or a controlling macro.">isFileMultipleIncludeGuarded</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="comment"></span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">  /// CreateHeaderMap - This method returns a HeaderMap for the specified</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="comment">  /// FileEntry, uniquing them through the 'HeaderMaps' datastructure.</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="classclang_1_1HeaderMap.html">HeaderMap</a> *<a class="code" href="classclang_1_1HeaderSearch.html#abaf93767d5315f95f30c4503e1871960">CreateHeaderMap</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="comment"></span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="comment">  /// \brief Retrieve the name of the module file that should be used to </span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="comment">  /// load the given module.</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment">  /// \param Module The module whose module file name will be returned.</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="comment">  /// \returns The name of the module file that corresponds to this module,</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="comment">  /// or an empty string if this module does not correspond to any module file.</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="comment"></span>  std::string <a class="code" href="classclang_1_1HeaderSearch.html#aeb1c6a529254c02067366e135f6613bc" title="Retrieve the name of the module file that should be used to load the given module.">getModuleFileName</a>(<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *<a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a>);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="comment"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="comment">  /// \brief Retrieve the name of the module file that should be used to </span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="comment">  /// load a module with the given name.</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="comment">  /// \param ModuleName The module whose module file name will be returned.</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">  /// \returns The name of the module file that corresponds to this module,</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">  /// or an empty string if this module does not correspond to any module file.</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment"></span>  std::string <a class="code" href="classclang_1_1HeaderSearch.html#aeb1c6a529254c02067366e135f6613bc" title="Retrieve the name of the module file that should be used to load the given module.">getModuleFileName</a>(StringRef ModuleName);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment"></span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="comment">  /// \brief Lookup a module Search for a module with the given name.</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="comment">  /// \param ModuleName The name of the module we're looking for.</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">  /// \param AllowSearch Whether we are allowed to search in the various</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">  /// search directories to produce a module definition. If not, this lookup</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="comment">  /// will only return an already-known module.</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="comment">  /// \returns The module with the given name.</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment"></span>  <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *<a class="code" href="classclang_1_1HeaderSearch.html#a4447cb9f032b68e211933f59436723c4" title="Lookup a module Search for a module with the given name.">lookupModule</a>(StringRef ModuleName, <span class="keywordtype">bool</span> AllowSearch = <span class="keyword">true</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"><a class="code" href="classclang_1_1HeaderSearch.html#a3c3bd6f077e16a29415ebbd36b556f65">  490</a></span>   <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a3c3bd6f077e16a29415ebbd36b556f65">IncrementFrameworkLookupCount</a>() { ++NumFrameworkLookups; }</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment"></span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">  /// \brief Determine whether there is a module map that may map the header</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">  /// with the given file name to a (sub)module.</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="comment">  /// \param Filename The name of the file.</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="comment">  /// \param Root The "root" directory, at which we should stop looking for</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="comment">  /// module maps.</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="comment">  /// \param IsSystem Whether the directories we're looking at are system</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="comment">  /// header directories.</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#a4bf4465e86f9194d42aaf5240a9d2d8e" title="Determine whether there is a module map that may map the header with the given file name to a (sub)mo...">hasModuleMap</a>(StringRef Filename, <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Root,</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>                     <span class="keywordtype">bool</span> IsSystem);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="comment">  /// \brief Retrieve the module that corresponds to the given file, if any.</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">  /// \param File The header that we wish to map to a module.</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment"></span>  <a class="code" href="classclang_1_1ModuleMap_1_1KnownHeader.html" title="A header that is known to reside within a given module, whether it was included or excluded...">ModuleMap::KnownHeader</a> <a class="code" href="classclang_1_1HeaderSearch.html#a500170361fb0422886daafd89712361e" title="Retrieve the module that corresponds to the given file, if any.">findModuleForHeader</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="comment">  /// \brief Read the contents of the given module map file.</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="comment">  /// \param File The module map file.</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">  /// \param IsSystem Whether this file is in a system header directory.</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment">  /// \returns true if an error occurred, false otherwise.</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment"></span>  <span class="keywordtype">bool</span> <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *File, <span class="keywordtype">bool</span> IsSystem);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment"></span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="comment">  /// \brief Collect the set of all known, top-level modules.</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="comment">  /// \param Modules Will be filled with the set of known, top-level modules.</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#ab61e36bf49bf787dfa7c2446b8a2510e" title="Collect the set of all known, top-level modules.">collectAllModules</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<Module *></a> &Modules);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="comment"></span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="comment">  /// \brief Load all known, top-level system modules.</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a7998076a7a2d0fb9246014cf246d4774" title="Load all known, top-level system modules.">loadTopLevelSystemModules</a>();</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="keyword">private</span>:<span class="comment"></span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="comment">  /// \brief Retrieve a module with the given name, which may be part of the</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="comment">  /// given framework.</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="comment">  /// \param Name The name of the module to retrieve.</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="comment">  /// \param Dir The framework directory (e.g., ModuleName.framework).</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="comment">  /// \param IsSystem Whether the framework directory is part of the system</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment">  /// frameworks.</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">  /// \returns The module, if found; otherwise, null.</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="comment"></span>  <a class="code" href="classclang_1_1Module.html" title="Describes a module or submodule.">Module</a> *loadFrameworkModule(StringRef Name, </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                               <span class="keyword">const</span> <a class="code" href="classclang_1_1DirectoryEntry.html" title="Cached information about one directory (either on disk or in the virtual file system).">DirectoryEntry</a> *Dir,</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                               <span class="keywordtype">bool</span> IsSystem);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="comment"></span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="comment">  /// \brief Load all of the module maps within the immediate subdirectories</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="comment">  /// of the given search directory.</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="comment"></span>  <span class="keywordtype">void</span> loadSubdirectoryModuleMaps(<a class="code" href="classclang_1_1DirectoryLookup.html">DirectoryLookup</a> &SearchDir);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="keyword">public</span>:<span class="comment"></span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">  /// \brief Retrieve the module map.</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ae56afbc5eac06aa39ed7c49a5d6dd717">  548</a></span> <span class="comment"></span>  <a class="code" href="classclang_1_1ModuleMap.html">ModuleMap</a> &<a class="code" href="classclang_1_1HeaderSearch.html#ae56afbc5eac06aa39ed7c49a5d6dd717" title="Retrieve the module map.">getModuleMap</a>() { <span class="keywordflow">return</span> ModMap; }</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   </div>
+<div class="line"><a name="l00550"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ac1f366c3b863711353beae252eeaebd3">  550</a></span>   <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearch.html#ac1f366c3b863711353beae252eeaebd3">header_file_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FileInfo.size(); }</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment"></span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="comment">  /// \brief Return the HeaderFileInfo structure for the specified FileEntry.</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0">  553</a></span> <span class="comment"></span>  <span class="keyword">const</span> <a class="code" href="structclang_1_1HeaderFileInfo.html" title="The preprocessor keeps track of this information for each file that is #included.">HeaderFileInfo</a> &<a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(<span class="keyword">const</span> <a class="code" href="classclang_1_1FileEntry.html" title="Cached information about one file (either on disk or in the virtual file system).">FileEntry</a> *FE)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classclang_1_1HeaderSearch.html" title="Encapsulates the information needed to find the file referenced by a #include or #include_next, (sub-)framework lookup, etc.">HeaderSearch</a>*<span class="keyword">></span>(<span class="keyword">this</span>)-><a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(FE);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   <span class="comment">// Used by external tools</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">  558</a></span>   <span class="keyword">typedef</span> std::vector<DirectoryLookup>::const_iterator <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a>;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#aa6d5df60bada08ca06f88f1463938445">  559</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#aa6d5df60bada08ca06f88f1463938445">search_dir_begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> SearchDirs.begin(); }</div>
+<div class="line"><a name="l00560"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a70bce8561ee94ac34e88a9e7189f5756">  560</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#a70bce8561ee94ac34e88a9e7189f5756">search_dir_end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> SearchDirs.end(); }</div>
+<div class="line"><a name="l00561"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a0e39624faf2d681c4947ca6bc6fe287b">  561</a></span>   <span class="keywordtype">unsigned</span> <a class="code" href="classclang_1_1HeaderSearch.html#a0e39624faf2d681c4947ca6bc6fe287b">search_dir_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> SearchDirs.size(); }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ad28da0311dfd3aa6915f6dec380dd26d">  563</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#ad28da0311dfd3aa6915f6dec380dd26d">quoted_dir_begin</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     <span class="keywordflow">return</span> SearchDirs.begin();</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   }</div>
+<div class="line"><a name="l00566"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a202d6f11a87c4ab7887c19a418b5a12d">  566</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#a202d6f11a87c4ab7887c19a418b5a12d">quoted_dir_end</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordflow">return</span> SearchDirs.begin() + AngledDirIdx;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a5fbb2a0eae90a7a4dff6309c744def87">  570</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#a5fbb2a0eae90a7a4dff6309c744def87">angled_dir_begin</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordflow">return</span> SearchDirs.begin() + AngledDirIdx;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#a2be63411dd727ce9954ab3b277c3a82c">  573</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#a2be63411dd727ce9954ab3b277c3a82c">angled_dir_end</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordflow">return</span> SearchDirs.begin() + SystemDirIdx;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   }</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#ac80cad43d14d017cf04ff5b9e45bc3a7">  577</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#ac80cad43d14d017cf04ff5b9e45bc3a7">system_dir_begin</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="keywordflow">return</span> SearchDirs.begin() + SystemDirIdx;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   }</div>
+<div class="line"><a name="l00580"></a><span class="lineno"><a class="code" href="classclang_1_1HeaderSearch.html#afd6c4e1940e2eeebb84de6a5255aeef9">  580</a></span>   <a class="code" href="classclang_1_1HeaderSearch.html#a43cf957d32a9e85e245b219892cb4a9e">search_dir_iterator</a> <a class="code" href="classclang_1_1HeaderSearch.html#afd6c4e1940e2eeebb84de6a5255aeef9">system_dir_end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> SearchDirs.end(); }</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="comment"></span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="comment">  /// \brief Retrieve a uniqued framework name.</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="comment"></span>  StringRef <a class="code" href="classclang_1_1HeaderSearch.html#a029274742c15ece085c37bb09c91878f" title="Retrieve a uniqued framework name.">getUniqueFrameworkName</a>(StringRef Framework);</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="keywordtype">void</span> <a class="code" href="classclang_1_1HeaderSearch.html#a8a029d1cc56f832b011800d7eaf3ae49">PrintStats</a>();</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordtype">size_t</span> <a class="code" href="classclang_1_1HeaderSearch.html#a8c7db7c5e4a833296e700c613a6acd52">getTotalMemory</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="keyword">static</span> std::string <a class="code" href="classclang_1_1HeaderSearch.html#af3794c0df592e387248a7a96d81274a2" title="Helper static function to normalize a path for injection into a synthetic header.">NormalizeDashIncludePath</a>(StringRef File,</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>                                               <a class="code" href="classclang_1_1FileManager.html" title="Implements support for file system lookup, file system caching, and directory search management...">FileManager</a> &FileMgr);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="keyword">private</span>:<span class="comment"></span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="comment">  /// \brief Describes what happened when we tried to load a module map file.</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="comment"></span>  <span class="keyword">enum</span> LoadModuleMapResult {<span class="comment"></span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="comment">    /// \brief The module map file had already been loaded.</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="comment"></span>    LMM_AlreadyLoaded,<span class="comment"></span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="comment">    /// \brief The module map file was loaded by this invocation.</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> <span class="comment"></span>    LMM_NewlyLoaded,<span class="comment"></span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="comment">    /// \brief There is was directory with the given name.</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="comment"></span>    LMM_NoDirectory,<span class="comment"></span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="comment">    /// \brief There was either no module map file or the module map file was</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="comment">    /// invalid.</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="comment"></span>    LMM_InvalidModuleMap</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   };</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="comment"></span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="comment">  /// \brief Try to load the module map file in the given directory.</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">  /// \param DirName The name of the directory where we will look for a module</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">  /// map file.</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="comment">  /// \param IsSystem Whether this is a system header directory.</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="comment">  /// \returns The result of attempting to load the module map file from the</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="comment">  /// named directory.</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="comment"></span>  LoadModuleMapResult <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(StringRef DirName, <span class="keywordtype">bool</span> IsSystem);</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment"></span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="comment">  /// \brief Try to load the module map file in the given directory.</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="comment">  /// \param Dir The directory where we will look for a module map file.</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="comment">  /// \param IsSystem Whether this is a system header directory.</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="comment">  ///</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="comment">  /// \returns The result of attempting to load the module map file from the</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> <span class="comment">  /// named directory.</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment"></span>  LoadModuleMapResult <a class="code" href="classclang_1_1HeaderSearch.html#ad9b8b29f6869a6f56071878b58b22e01" title="Read the contents of the given module map file.">loadModuleMapFile</a>(<span class="keyword">const</span> DirectoryEntry *Dir,</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>                                         <span class="keywordtype">bool</span> IsSystem);</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="comment"></span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> <span class="comment">  /// \brief Return the HeaderFileInfo structure for the specified FileEntry.</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> <span class="comment"></span>  HeaderFileInfo &<a class="code" href="classclang_1_1HeaderSearch.html#af8c7ffe0fe7791550a746ed30a0bf1c0" title="Return the HeaderFileInfo structure for the specified FileEntry.">getFileInfo</a>(<span class="keyword">const</span> FileEntry *FE);</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> };</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> }  <span class="comment">// end namespace clang</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:39 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8cpp_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8cpp_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8cpp_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,816 @@
+<!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: IdempotentOperationChecker.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_fd0691f76a19cc33074025cb3a574e66.html">StaticAnalyzer</a></li><li class="navelem"><a class="el" href="dir_5fa4c591fb04e7ea3227105bf6cc3359.html">Checkers</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">IdempotentOperationChecker.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="IdempotentOperationChecker_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">//==- IdempotentOperationChecker.cpp - Idempotent Operations ----*- C++ -*-==//</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">//                     The LLVM Compiler Infrastructure</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">// This file defines a set of path-sensitive checks for idempotent and/or</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment">// tautological operations. Each potential operation is checked along all paths</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">// to see if every path results in a pointless operation.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment">//                 +-------------------------------------------+</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment">//                 |Table of idempotent/tautological operations|</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">//                 +-------------------------------------------+</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">//+--------------------------------------------------------------------------+</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment">//|Operator | x op x | x op 1 | 1 op x | x op 0 | 0 op x | x op ~0 | ~0 op x |</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment">//+--------------------------------------------------------------------------+</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">//  +, +=   |        |        |        |   x    |   x    |         |</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">//  -, -=   |        |        |        |   x    |   -x   |         |</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">//  *, *=   |        |   x    |   x    |   0    |   0    |         |</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">//  /, /=   |   1    |   x    |        |  N/A   |   0    |         |</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">//  &, &=   |   x    |        |        |   0    |   0    |   x     |    x</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">//  |, |=   |   x    |        |        |   x    |   x    |   ~0    |    ~0</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">//  ^, ^=   |   0    |        |        |   x    |   x    |         |</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">//  <<, <<= |        |        |        |   x    |   0    |         |</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">//  >>, >>= |        |        |        |   x    |   0    |         |</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">//  ||      |   x    |   1    |   1    |   x    |   x    |   1     |    1</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">//  &&      |   x    |   x    |   x    |   0    |   0    |   x     |    x</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">//  =       |   x    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">//  ==      |   1    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">//  >=      |   1    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">//  <=      |   1    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">//  >       |   0    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">//  <       |   0    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">//  !=      |   0    |        |        |        |        |         |</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">// Things TODO:</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">// - Improved error messages</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">// - Handle mixed assumptions (which assumptions can belong together?)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">// - Finer grained false positive control (levels)</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">// - Handling ~0 values</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "<a class="code" href="ClangSACheckers_8h.html">ClangSACheckers.h</a>"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "<a class="code" href="Stmt_8h.html">clang/AST/Stmt.h</a>"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "<a class="code" href="CFGReachabilityAnalysis_8h.html">clang/Analysis/Analyses/CFGReachabilityAnalysis.h</a>"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "<a class="code" href="PseudoConstantAnalysis_8h.html">clang/Analysis/Analyses/PseudoConstantAnalysis.h</a>"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "<a class="code" href="CFGStmtMap_8h.html">clang/Analysis/CFGStmtMap.h</a>"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "<a class="code" href="BugReporter_8h.html">clang/StaticAnalyzer/Core/BugReporter/BugReporter.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "<a class="code" href="BugType_8h.html">clang/StaticAnalyzer/Core/BugReporter/BugType.h</a>"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "<a class="code" href="Checker_8h.html">clang/StaticAnalyzer/Core/Checker.h</a>"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "<a class="code" href="CheckerManager_8h.html">clang/StaticAnalyzer/Core/CheckerManager.h</a>"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "<a class="code" href="CheckerContext_8h.html">clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h</a>"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include "<a class="code" href="CheckerHelpers_8h.html">clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h</a>"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include "<a class="code" href="CoreEngine_8h.html">clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h</a>"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "<a class="code" href="SVals_8h.html">clang/StaticAnalyzer/Core/PathSensitive/SVals.h</a>"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include "llvm/ADT/BitVector.h"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include "llvm/ADT/DenseMap.h"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include "llvm/ADT/SmallSet.h"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include "llvm/ADT/SmallString.h"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include "llvm/Support/ErrorHandling.h"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include "llvm/Support/raw_ostream.h"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">using namespace </span>clang;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">using namespace </span>ento;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">class </span>IdempotentOperationChecker</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   : <span class="keyword">public</span> <a class="code" href="classclang_1_1ento_1_1Checker.html">Checker</a><check::PreStmt<BinaryOperator>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                      check::PostStmt<BinaryOperator>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                      check::EndAnalysis> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordtype">void</span> checkPreStmt(<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> *B, <a class="code" href="classclang_1_1ento_1_1CheckerContext.html">CheckerContext</a> &C) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">void</span> checkPostStmt(<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> *B, <a class="code" href="classclang_1_1ento_1_1CheckerContext.html">CheckerContext</a> &C) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">void</span> checkEndAnalysis(<a class="code" href="classclang_1_1ento_1_1ExplodedGraph.html">ExplodedGraph</a> &G, <a class="code" href="classclang_1_1ento_1_1BugReporter.html">BugReporter</a> &B,<a class="code" href="classclang_1_1ento_1_1ExprEngine.html">ExprEngine</a> &Eng) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">// Our assumption about a particular operation.</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keyword">enum</span> Assumption { Possible = 0, Impossible, Equal, LHSis1, RHSis1, LHSis0,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       RHSis0 };</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keyword">static</span> <span class="keywordtype">void</span> UpdateAssumption(Assumption &A, <span class="keyword">const</span> Assumption &New);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="comment">// False positive reduction methods</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> isSelfAssign(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHS, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHS);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> isUnused(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E, <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> isTruncationExtensionAssignment(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHS,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                                               <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHS);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> pathWasCompletelyAnalyzed(<a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                         <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *CB,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                         <span class="keyword">const</span> <a class="code" href="classclang_1_1ento_1_1CoreEngine.html">CoreEngine</a> &CE);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> CanVary(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *Ex,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                       <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> isConstantOrPseudoConstant(<span class="keyword">const</span> <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DR,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                          <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keyword">static</span> <span class="keywordtype">bool</span> containsNonLocalVarDecl(<span class="keyword">const</span> <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="comment">// Hash table and related data structures</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keyword">struct </span>BinaryOperatorData {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     BinaryOperatorData() : assumption(Possible) {}</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     Assumption assumption;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html">ExplodedNodeSet</a> explodedNodes; <span class="comment">// Set of ExplodedNodes that refer to a</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                    <span class="comment">// BinaryOperator</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   };</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keyword">typedef</span> llvm::DenseMap<const BinaryOperator *, BinaryOperatorData></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>       AssumptionMap;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keyword">mutable</span> AssumptionMap hash;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keyword">mutable</span> <a class="code" href="classllvm_1_1OwningPtr.html">OwningPtr<BugType></a> BT;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> };</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keywordtype">void</span> IdempotentOperationChecker::checkPreStmt(<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> *B,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                                               <a class="code" href="classclang_1_1ento_1_1CheckerContext.html">CheckerContext</a> &C)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="comment">// Find or create an entry in the hash for this BinaryOperator instance.</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="comment">// If we haven't done a lookup before, it will get default initialized to</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="comment">// 'Possible'. At this stage we do not store the ExplodedNode, as it has not</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">// been created yet.</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   BinaryOperatorData &Data = hash[B];</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   Assumption &A = Data.assumption;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC = C.<a class="code" href="classclang_1_1ento_1_1CheckerContext.html#a8613f916b0e25a4e3464b3740e980ab9">getCurrentAnalysisDeclContext</a>();</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="comment">// If we already have visited this node on a path that does not contain an</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="comment">// idempotent operation, return immediately.</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordflow">if</span> (A == Impossible)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="comment">// Retrieve both sides of the operator and determine if they can vary (which</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">// may mean this is a false positive.</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHS = B-><a class="code" href="classclang_1_1BinaryOperator.html#ad8b108ac1a7795b9f388d8dece6b8924">getLHS</a>();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHS = B-><a class="code" href="classclang_1_1BinaryOperator.html#a1ab10aae0ffa01be5d1a979e6da285e6">getRHS</a>();</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="comment">// At this stage we can calculate whether each side contains a false positive</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="comment">// that applies to all operators. We only need to calculate this the first</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="comment">// time.</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">bool</span> LHSContainsFalsePositive = <span class="keyword">false</span>, RHSContainsFalsePositive = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">if</span> (A == Possible) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="comment">// An expression contains a false positive if it can't vary, or if it</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">// contains a known false positive VarDecl.</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     LHSContainsFalsePositive = !CanVary(LHS, AC)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         || containsNonLocalVarDecl(LHS);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     RHSContainsFalsePositive = !CanVary(RHS, AC)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         || containsNonLocalVarDecl(RHS);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <a class="code" href="classllvm_1_1IntrusiveRefCntPtr.html">ProgramStateRef</a> state = C.<a class="code" href="classclang_1_1ento_1_1CheckerContext.html#a81bd66f80b18117a9a64a8d0daa62825">getState</a>();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1LocationContext.html">LocationContext</a> *LCtx = C.<a class="code" href="classclang_1_1ento_1_1CheckerContext.html#a7581c66c5849fab4a40b321024c9c136">getLocationContext</a>();</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <a class="code" href="classclang_1_1ento_1_1SVal.html">SVal</a> LHSVal = state->getSVal(LHS, LCtx);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <a class="code" href="classclang_1_1ento_1_1SVal.html">SVal</a> RHSVal = state->getSVal(RHS, LCtx);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="comment">// If either value is unknown, we can't be 100% sure of all paths.</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">if</span> (LHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#a593bdea7f57714567c8d92a592ea0e0e">isUnknownOrUndef</a>() || RHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#a593bdea7f57714567c8d92a592ea0e0e">isUnknownOrUndef</a>()) {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     A = Impossible;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1">BinaryOperator::Opcode</a> Op = B-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>();</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="comment">// Dereference the LHS SVal if this is an assign operation</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">switch</span> (Op) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">break</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="comment">// Fall through intentional</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af2474871202242b544a408e208f2399e">BO_AddAssign</a>:</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1abc31e47183ba44dc8fc651c06cce3277">BO_SubAssign</a>:</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae54f31f3a3a80606d1570d18fd3e2aa5">BO_MulAssign</a>:</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af6f0e4f3b441322d5d3e662929e03e5c">BO_DivAssign</a>:</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ab40fb7aa73ca8472468f2623a6339759">BO_AndAssign</a>:</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7dd0c189f68df30c2b390bb99d140cbf">BO_OrAssign</a>:</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a51df4970d4b108c4481cb80eeb47f436">BO_XorAssign</a>:</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a8039f4b36186fda6134f233fd7f45ce3">BO_ShlAssign</a>:</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a604ed36a5eeadd90dc085a248eca4374">BO_ShrAssign</a>:</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af0f6693357ca6bc7488c1d4de4cbe303">BO_Assign</a>:</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="comment">// Assign statements have one extra level of indirection</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">if</span> (!LHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#a4a9c4d5842ebb929dc6ed897ee2bd57a" title="Convert to the specified SVal type, returning None if this SVal is not of the desired type...">getAs</a><<a class="code" href="classclang_1_1ento_1_1Loc.html">Loc</a>>()) {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       A = Impossible;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     LHSVal = state->getSVal(LHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#aa678905bf16cd5cc2f97ab4fb143edee" title="Convert to the specified SVal type, asserting that this SVal is of the desired type.">castAs</a><<a class="code" href="classclang_1_1ento_1_1Loc.html">Loc</a>>(), LHS-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>());</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="comment">// We now check for various cases which result in an idempotent operation.</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="comment">// x op x</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">switch</span> (Op) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">break</span>; <span class="comment">// We don't care about any other operators.</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="comment">// Fall through intentional</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af0f6693357ca6bc7488c1d4de4cbe303">BO_Assign</a>:</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">// x Assign x can be used to silence unused variable warnings intentionally.</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">// If this is a self assignment and the variable is referenced elsewhere,</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="comment">// and the assignment is not a truncation or extension, then it is a false</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">// positive.</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">if</span> (isSelfAssign(LHS, RHS)) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       <span class="keywordflow">if</span> (!isUnused(LHS, AC) && !isTruncationExtensionAssignment(LHS, RHS)) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         UpdateAssumption(A, Equal);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         A = Impossible;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     }</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#a443b552ee80020cfeb2b86c99e7f85e1abc31e47183ba44dc8fc651c06cce3277">BO_SubAssign</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#a443b552ee80020cfeb2b86c99e7f85e1af6f0e4f3b441322d5d3e662929e03e5c">BO_DivAssign</a>:</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ab40fb7aa73ca8472468f2623a6339759">BO_AndAssign</a>:</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7dd0c189f68df30c2b390bb99d140cbf">BO_OrAssign</a>:</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a51df4970d4b108c4481cb80eeb47f436">BO_XorAssign</a>:</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af84c54a9c8a061371180b3e8b25d4c3f">BO_Sub</a>:</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a58e04dd371aa4ff24af1f1ebc04739a5">BO_Div</a>:</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1add0a26702b466b3820e0032922751589">BO_And</a>:</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a0bbf9a36f955dba18422f3c8800443d1">BO_Or</a>:</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a01db02868a5b622d647d2a3f7d7d0c5a">BO_Xor</a>:</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7bc0171ddbb52333099a4774326d72c9">BO_LOr</a>:</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a30e5536f851a7efedefd1ca23a295741">BO_LAnd</a>:</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a69f29b9100be3ced416f394df1b8387d">BO_EQ</a>:</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ad1f67b78e6981e7d44e0a1794432d104">BO_NE</a>:</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">if</span> (LHSVal != RHSVal || LHSContainsFalsePositive</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         || RHSContainsFalsePositive)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     UpdateAssumption(A, Equal);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="comment">// x op 1</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordflow">switch</span> (Op) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>      <span class="keywordflow">break</span>; <span class="comment">// We don't care about any other operators.</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    <span class="comment">// Fall through intentional</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae54f31f3a3a80606d1570d18fd3e2aa5">BO_MulAssign</a>:</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>    <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af6f0e4f3b441322d5d3e662929e03e5c">BO_DivAssign</a>:</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a8e23022cab4ed3bcb24b7acd01f623e9">BO_Mul</a>:</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a58e04dd371aa4ff24af1f1ebc04739a5">BO_Div</a>:</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>    <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7bc0171ddbb52333099a4774326d72c9">BO_LOr</a>:</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a30e5536f851a7efedefd1ca23a295741">BO_LAnd</a>:</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>      <span class="keywordflow">if</span> (!RHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#ac63aaa36ffa48dab361c63099ea58a14">isConstant</a>(1) || RHSContainsFalsePositive)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>      UpdateAssumption(A, RHSis1);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   <span class="comment">// 1 op x</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordflow">switch</span> (Op) {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">break</span>; <span class="comment">// We don't care about any other operators.</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="comment">// Fall through intentional</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae54f31f3a3a80606d1570d18fd3e2aa5">BO_MulAssign</a>:</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a8e23022cab4ed3bcb24b7acd01f623e9">BO_Mul</a>:</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7bc0171ddbb52333099a4774326d72c9">BO_LOr</a>:</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a30e5536f851a7efedefd1ca23a295741">BO_LAnd</a>:</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">if</span> (!LHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#ac63aaa36ffa48dab361c63099ea58a14">isConstant</a>(1) || LHSContainsFalsePositive)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     UpdateAssumption(A, LHSis1);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="comment">// x op 0</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordflow">switch</span> (Op) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="keywordflow">break</span>; <span class="comment">// We don't care about any other operators.</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="comment">// Fall through intentional</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af2474871202242b544a408e208f2399e">BO_AddAssign</a>:</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1abc31e47183ba44dc8fc651c06cce3277">BO_SubAssign</a>:</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae54f31f3a3a80606d1570d18fd3e2aa5">BO_MulAssign</a>:</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ab40fb7aa73ca8472468f2623a6339759">BO_AndAssign</a>:</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7dd0c189f68df30c2b390bb99d140cbf">BO_OrAssign</a>:</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a51df4970d4b108c4481cb80eeb47f436">BO_XorAssign</a>:</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1abe63fd1a02a7d1191c3b2fd102b983bd">BO_Add</a>:</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af84c54a9c8a061371180b3e8b25d4c3f">BO_Sub</a>:</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a8e23022cab4ed3bcb24b7acd01f623e9">BO_Mul</a>:</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1add0a26702b466b3820e0032922751589">BO_And</a>:</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a0bbf9a36f955dba18422f3c8800443d1">BO_Or</a>:</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a01db02868a5b622d647d2a3f7d7d0c5a">BO_Xor</a>:</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a2a7b3ad7ff838b9d313312f2dde50cb0">BO_Shl</a>:</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a05544609a9c447c91873ed3fb1fec26c">BO_Shr</a>:</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7bc0171ddbb52333099a4774326d72c9">BO_LOr</a>:</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a30e5536f851a7efedefd1ca23a295741">BO_LAnd</a>:</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordflow">if</span> (!RHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#ac63aaa36ffa48dab361c63099ea58a14">isConstant</a>(0) || RHSContainsFalsePositive)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     UpdateAssumption(A, RHSis0);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">return</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> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="comment">// 0 op x</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">switch</span> (Op) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="keywordflow">break</span>; <span class="comment">// We don't care about any other operators.</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="comment">// Fall through intentional</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="comment">//case BO_AddAssign: // Common false positive</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1abc31e47183ba44dc8fc651c06cce3277">BO_SubAssign</a>: <span class="comment">// Check only if unsigned</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ae54f31f3a3a80606d1570d18fd3e2aa5">BO_MulAssign</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#a443b552ee80020cfeb2b86c99e7f85e1af6f0e4f3b441322d5d3e662929e03e5c">BO_DivAssign</a>:</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1ab40fb7aa73ca8472468f2623a6339759">BO_AndAssign</a>:</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="comment">//case BO_OrAssign: // Common false positive</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="comment">//case BO_XorAssign: // Common false positive</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a8039f4b36186fda6134f233fd7f45ce3">BO_ShlAssign</a>:</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a604ed36a5eeadd90dc085a248eca4374">BO_ShrAssign</a>:</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1abe63fd1a02a7d1191c3b2fd102b983bd">BO_Add</a>:</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af84c54a9c8a061371180b3e8b25d4c3f">BO_Sub</a>:</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a8e23022cab4ed3bcb24b7acd01f623e9">BO_Mul</a>:</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a58e04dd371aa4ff24af1f1ebc04739a5">BO_Div</a>:</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1add0a26702b466b3820e0032922751589">BO_And</a>:</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a0bbf9a36f955dba18422f3c8800443d1">BO_Or</a>:</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a01db02868a5b622d647d2a3f7d7d0c5a">BO_Xor</a>:</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a2a7b3ad7ff838b9d313312f2dde50cb0">BO_Shl</a>:</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a05544609a9c447c91873ed3fb1fec26c">BO_Shr</a>:</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a7bc0171ddbb52333099a4774326d72c9">BO_LOr</a>:</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   <span class="keywordflow">case</span> <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1a30e5536f851a7efedefd1ca23a295741">BO_LAnd</a>:</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordflow">if</span> (!LHSVal.<a class="code" href="classclang_1_1ento_1_1SVal.html#ac63aaa36ffa48dab361c63099ea58a14">isConstant</a>(0) || LHSContainsFalsePositive)</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     UpdateAssumption(A, LHSis0);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="comment">// If we get to this point, there has been a valid use of this operation.</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   A = Impossible;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">// At the post visit stage, the predecessor ExplodedNode will be the</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">// BinaryOperator that was just created. We use this hook to collect the</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">// ExplodedNode.</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="keywordtype">void</span> IdempotentOperationChecker::checkPostStmt(<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> *B,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                                                <a class="code" href="classclang_1_1ento_1_1CheckerContext.html">CheckerContext</a> &C)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="comment">// Add the ExplodedNode we just visited</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   BinaryOperatorData &Data = hash[B];</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *predStmt =</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>       C.<a class="code" href="classclang_1_1ento_1_1CheckerContext.html#a930928b571decc73554143360f348384" title="Returns the previous node in the exploded graph, which includes the state of the program before the c...">getPredecessor</a>()-><a class="code" href="classclang_1_1ento_1_1ExplodedNode.html#afb4d9693286307b3fcba2bb9fdbef530" title="getLocation - Returns the edge associated with the given node.">getLocation</a>().<a class="code" href="classclang_1_1ProgramPoint.html#acf0c9041df6b7f0ed809f566052d4ecf" title="Convert to the specified ProgramPoint type, asserting that this ProgramPoint is of the desired type...">castAs</a><<a class="code" href="classclang_1_1StmtPoint.html">StmtPoint</a>>().getStmt();</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>   <span class="comment">// Ignore implicit calls to setters.</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   <span class="keywordflow">if</span> (!isa<BinaryOperator>(predStmt))</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="keywordflow">return</span>;</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>   Data.explodedNodes.Add(C.<a class="code" href="classclang_1_1ento_1_1CheckerContext.html#a930928b571decc73554143360f348384" title="Returns the previous node in the exploded graph, which includes the state of the program before the c...">getPredecessor</a>());</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="keywordtype">void</span> IdempotentOperationChecker::checkEndAnalysis(<a class="code" href="classclang_1_1ento_1_1ExplodedGraph.html">ExplodedGraph</a> &G,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                                                   <a class="code" href="classclang_1_1ento_1_1BugReporter.html">BugReporter</a> &BR,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                                                   <a class="code" href="classclang_1_1ento_1_1ExprEngine.html">ExprEngine</a> &Eng)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordflow">if</span> (!BT)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     BT.reset(<span class="keyword">new</span> <a class="code" href="classclang_1_1ento_1_1BugType.html">BugType</a>(<span class="stringliteral">"Idempotent operation"</span>, <span class="stringliteral">"Dead code"</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>   <span class="comment">// Iterate over the hash to see if we have any paths with definite</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="comment">// idempotent operations.</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <span class="keywordflow">for</span> (AssumptionMap::const_iterator i = hash.begin(); i != hash.end(); ++i) {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="comment">// Unpack the hash contents</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="keyword">const</span> BinaryOperatorData &Data = i->second;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="keyword">const</span> Assumption &A = Data.assumption;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html">ExplodedNodeSet</a> &ES = Data.explodedNodes;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="comment">// If there are no nodes accosted with the expression, nothing to report.</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="comment">// FIXME: This is possible because the checker does part of processing in</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="comment">// checkPreStmt and part in checkPostStmt.</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordflow">if</span> (ES.<a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html#ae867478a80d850c6837f780d47952d29">begin</a>() == ES.<a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html#ad0bceca183403a2b571e20f2fd233bea">end</a>())</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <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> *B = i->first;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordflow">if</span> (A == Impossible)</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="comment">// If the analyzer did not finish, check to see if we can still emit this</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     <span class="comment">// warning</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     <span class="keywordflow">if</span> (Eng.<a class="code" href="classclang_1_1ento_1_1ExprEngine.html#a22f105a49c913cb7ce701459611ca4dd">hasWorkRemaining</a>()) {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       <span class="comment">// If we can trace back</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC = (*ES.<a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html#ae867478a80d850c6837f780d47952d29">begin</a>())->getLocationContext()</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                                          ->getAnalysisDeclContext();</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>       <span class="keywordflow">if</span> (!pathWasCompletelyAnalyzed(AC,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                                      AC-><a class="code" href="classclang_1_1AnalysisDeclContext.html#a1183c4594ff92b3fb45174996f56c9cf">getCFGStmtMap</a>()-><a class="code" href="classclang_1_1CFGStmtMap.html#ab34fa4afdaf8b76de127855283aa3653">getBlock</a>(B),</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                      Eng.<a class="code" href="classclang_1_1ento_1_1ExprEngine.html#ae1082e7a4c1d1d05f6516a8e39744400">getCoreEngine</a>()))</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     }</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     <span class="comment">// Select the error message and SourceRanges to report.</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <a class="code" href="classllvm_1_1SmallString.html">SmallString<128></a> buf;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     llvm::raw_svector_ostream os(buf);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="keywordtype">bool</span> LHSRelevant = <span class="keyword">false</span>, RHSRelevant = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="keywordflow">switch</span> (A) {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordflow">case</span> Equal:</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       LHSRelevant = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       RHSRelevant = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       <span class="keywordflow">if</span> (B-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af0f6693357ca6bc7488c1d4de4cbe303">BO_Assign</a>)</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         os << <span class="stringliteral">"Assigned value is always the same as the existing value"</span>;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         os << <span class="stringliteral">"Both operands to '"</span> << B-><a class="code" href="classclang_1_1BinaryOperator.html#a839c4ea97f1ac89e09226b54d2310e43">getOpcodeStr</a>()</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>            << <span class="stringliteral">"' always have the same value"</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="keywordflow">case</span> LHSis1:</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>       LHSRelevant = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       os << <span class="stringliteral">"The left operand to '"</span> << B-><a class="code" href="classclang_1_1BinaryOperator.html#a839c4ea97f1ac89e09226b54d2310e43">getOpcodeStr</a>() << <span class="stringliteral">"' is always 1"</span>;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="keywordflow">case</span> RHSis1:</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       RHSRelevant = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>       os << <span class="stringliteral">"The right operand to '"</span> << B-><a class="code" href="classclang_1_1BinaryOperator.html#a839c4ea97f1ac89e09226b54d2310e43">getOpcodeStr</a>() << <span class="stringliteral">"' is always 1"</span>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="keywordflow">case</span> LHSis0:</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>       LHSRelevant = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       os << <span class="stringliteral">"The left operand to '"</span> << B-><a class="code" href="classclang_1_1BinaryOperator.html#a839c4ea97f1ac89e09226b54d2310e43">getOpcodeStr</a>() << <span class="stringliteral">"' is always 0"</span>;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keywordflow">case</span> RHSis0:</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>       RHSRelevant = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>       os << <span class="stringliteral">"The right operand to '"</span> << B-><a class="code" href="classclang_1_1BinaryOperator.html#a839c4ea97f1ac89e09226b54d2310e43">getOpcodeStr</a>() << <span class="stringliteral">"' is always 0"</span>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordflow">case</span> Possible:</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>       llvm_unreachable(<span class="stringliteral">"Operation was never marked with an assumption"</span>);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <span class="keywordflow">case</span> Impossible:</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>       llvm_unreachable(0);</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="comment">// Add a report for each ExplodedNode</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     <span class="keywordflow">for</span> (<a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html#adece9a4cb80a114fde7ca1592e1b498b">ExplodedNodeSet::iterator</a> I = ES.<a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html#ae867478a80d850c6837f780d47952d29">begin</a>(), E = ES.<a class="code" href="classclang_1_1ento_1_1ExplodedNodeSet.html#ad0bceca183403a2b571e20f2fd233bea">end</a>(); I != E; ++I) {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>       <a class="code" href="classclang_1_1ento_1_1BugReport.html">BugReport</a> *report = <span class="keyword">new</span> <a class="code" href="classclang_1_1ento_1_1BugReport.html">BugReport</a>(*BT, os.str(), *I);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>       <span class="comment">// Add source ranges and visitor hooks</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>       <span class="keywordflow">if</span> (LHSRelevant) {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHS = i->first->getLHS();</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         report-><a class="code" href="classclang_1_1ento_1_1BugReport.html#a31f1757d10fc4f936ea143a894e51f39" title="Add a range to a bug report.">addRange</a>(LHS-><a class="code" href="classclang_1_1Stmt.html#a6844392ee6148b5fe821f211b95e5d1b">getSourceRange</a>());</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         <a class="code" href="classclang_1_1ento_1_1FindLastStoreBRVisitor.html#af95d345b5ff8f0057908134bf04130b9">FindLastStoreBRVisitor::registerStatementVarDecls</a>(*report, LHS, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       }</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>       <span class="keywordflow">if</span> (RHSRelevant) {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHS = i->first->getRHS();</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         report-><a class="code" href="classclang_1_1ento_1_1BugReport.html#a31f1757d10fc4f936ea143a894e51f39" title="Add a range to a bug report.">addRange</a>(i->first->getRHS()->getSourceRange());</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         <a class="code" href="classclang_1_1ento_1_1FindLastStoreBRVisitor.html#af95d345b5ff8f0057908134bf04130b9">FindLastStoreBRVisitor::registerStatementVarDecls</a>(*report, RHS, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>       BR.<a class="code" href="classclang_1_1ento_1_1BugReporter.html#a9d26b85531178e7ee290afc7a6aefa37" title="Add the given report to the set of reports tracked by BugReporter.">emitReport</a>(report);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   hash.clear();</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> }</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> <span class="comment">// Updates the current assumption given the new assumption</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> IdempotentOperationChecker::UpdateAssumption(Assumption &A,</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>                                                         <span class="keyword">const</span> Assumption &New) {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">// If the assumption is the same, there is nothing to do</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   <span class="keywordflow">if</span> (A == New)</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="keywordflow">switch</span> (A) {</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="comment">// If we don't currently have an assumption, set it</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordflow">case</span> Possible:</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     A = New;</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>   <span class="comment">// If we have determined that a valid state happened, ignore the new</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   <span class="comment">// assumption.</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   <span class="keywordflow">case</span> Impossible:</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   <span class="comment">// Any other case means that we had a different assumption last time. We don't</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   <span class="comment">// currently support mixing assumptions for diagnostic reasons, so we set</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="comment">// our assumption to be impossible.</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     A = Impossible;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   }</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> }</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="comment">// Check for a statement where a variable is self assigned to possibly avoid an</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="comment">// unused variable warning.</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="keywordtype">bool</span> IdempotentOperationChecker::isSelfAssign(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHS, <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHS) {</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   LHS = LHS-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>();</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   RHS = RHS-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>();</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   <span class="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> *LHS_DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(LHS);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   <span class="keywordflow">if</span> (!LHS_DR)</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(LHS_DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>());</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   <span class="keywordflow">if</span> (!VD)</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</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> *RHS_DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(RHS);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   <span class="keywordflow">if</span> (!RHS_DR)</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   <span class="keywordflow">if</span> (VD != RHS_DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>())</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</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>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> }</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">// Returns true if the Expr points to a VarDecl that is not read anywhere</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">// outside of self-assignments.</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="keywordtype">bool</span> IdempotentOperationChecker::isUnused(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *E,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                                           <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC) {</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   <span class="keywordflow">if</span> (!E)</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(E-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>());</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   <span class="keywordflow">if</span> (!DR)</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>());</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   <span class="keywordflow">if</span> (!VD)</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   <span class="keywordflow">if</span> (AC-><a class="code" href="classclang_1_1AnalysisDeclContext.html#a96a66f248969219eff161e560bd99ac9">getPseudoConstantAnalysis</a>()-><a class="code" href="classclang_1_1PseudoConstantAnalysis.html#ae630de504f51b1e8c6a4f16465b61283">wasReferenced</a>(VD))</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">// Check for self casts truncating/extending a variable</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="keywordtype">bool</span> IdempotentOperationChecker::isTruncationExtensionAssignment(</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                                                               <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *LHS,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                                                               <span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *RHS) {</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="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> *LHS_DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(LHS-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>());</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>   <span class="keywordflow">if</span> (!LHS_DR)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(LHS_DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>());</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   <span class="keywordflow">if</span> (!VD)</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</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> *RHS_DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(RHS-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>());</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   <span class="keywordflow">if</span> (!RHS_DR)</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   <span class="keywordflow">if</span> (VD != RHS_DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>())</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>      <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   <span class="keywordflow">return</span> dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(RHS-><a class="code" href="classclang_1_1Expr.html#a4a45449c2f4c4fba9abfb8ecd9fe2cfc">IgnoreParenLValueCasts</a>()) == <a class="code" href="stddef_8h.html#a070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">// Returns false if a path to this block was not completely analyzed, or true</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">// otherwise.</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="keywordtype">bool</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> IdempotentOperationChecker::pathWasCompletelyAnalyzed(<a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC,</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                                                       <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *CB,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                                                       <span class="keyword">const</span> <a class="code" href="classclang_1_1ento_1_1CoreEngine.html">CoreEngine</a> &CE) {</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   <a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html">CFGReverseBlockReachabilityAnalysis</a> *CRA = AC-><a class="code" href="classclang_1_1AnalysisDeclContext.html#aa57517d8b32b89faca609d78864a5e5d">getCFGReachablityAnalysis</a>();</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   <span class="comment">// Test for reachability from any aborted blocks to this block</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   <span class="keyword">typedef</span> CoreEngine::BlocksExhausted::const_iterator ExhaustedIterator;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   <span class="keywordflow">for</span> (ExhaustedIterator I = CE.<a class="code" href="classclang_1_1ento_1_1CoreEngine.html#ad2283cc14f1955f1171b3a195c105d40">blocks_exhausted_begin</a>(),</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>       E = CE.<a class="code" href="classclang_1_1ento_1_1CoreEngine.html#a16a3fa196313d6b2075c2cafc3442479">blocks_exhausted_end</a>(); I != E; ++I) {</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1BlockEdge.html">BlockEdge</a> &BE =  I->first;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     <span class="comment">// The destination block on the BlockEdge is the first block that was not</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="comment">// analyzed. If we can reach this block from the aborted block, then this</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="comment">// block was not completely analyzed.</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     <span class="comment">//</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     <span class="comment">// Also explicitly check if the current block is the destination block.</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="comment">// While technically reachable, it means we aborted the analysis on</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     <span class="comment">// a path that included that block.</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *destBlock = BE.<a class="code" href="classclang_1_1BlockEdge.html#a7d9fd91c4755e13f66c1b24d80202c59">getDst</a>();</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <span class="keywordflow">if</span> (destBlock == CB || CRA-><a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html#a73cec1b9cbbc6e2461470906e6a0720a" title="Returns true if the block 'Dst' can be reached from block 'Src'.">isReachable</a>(destBlock, CB))</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>   }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   <span class="comment">// Test for reachability from blocks we just gave up on.</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   <span class="keyword">typedef</span> CoreEngine::BlocksAborted::const_iterator AbortedIterator;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   <span class="keywordflow">for</span> (AbortedIterator I = CE.<a class="code" href="classclang_1_1ento_1_1CoreEngine.html#aed6527e4fe71f137e4a2f79f8aa4c307">blocks_aborted_begin</a>(),</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>        E = CE.<a class="code" href="classclang_1_1ento_1_1CoreEngine.html#a2c28f7dbaf970c38fe85eecdb18b3e82">blocks_aborted_end</a>(); I != E; ++I) {</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *destBlock = I->first;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     <span class="keywordflow">if</span> (destBlock == CB || CRA-><a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html#a73cec1b9cbbc6e2461470906e6a0720a" title="Returns true if the block 'Dst' can be reached from block 'Src'.">isReachable</a>(destBlock, CB))</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   }</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   <span class="comment">// For the items still on the worklist, see if they are in blocks that</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   <span class="comment">// can eventually reach 'CB'.</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   <span class="keyword">class </span>VisitWL : <span class="keyword">public</span> <a class="code" href="classclang_1_1ento_1_1WorkList_1_1Visitor.html">WorkList::Visitor</a> {</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGStmtMap.html">CFGStmtMap</a> *CBM;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *TargetBlock;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     <a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html">CFGReverseBlockReachabilityAnalysis</a> &CRA;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     VisitWL(<span class="keyword">const</span> <a class="code" href="classclang_1_1CFGStmtMap.html">CFGStmtMap</a> *cbm, <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *targetBlock,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             <a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html">CFGReverseBlockReachabilityAnalysis</a> &cra)</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       : CBM(cbm), TargetBlock(targetBlock), CRA(cra) {}</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visit(<span class="keyword">const</span> <a class="code" href="classclang_1_1ento_1_1WorkListUnit.html">WorkListUnit</a> &U) {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>       <a class="code" href="classclang_1_1ProgramPoint.html">ProgramPoint</a> <a class="code" href="TokenAnnotator_8cpp.html#a0bf8bdaf8596b1161b6ce63c4232a1fb">P</a> = U.<a class="code" href="classclang_1_1ento_1_1WorkListUnit.html#ac3d2ef92d0d1d566efe7cd5e5126f4f6" title="Returns the node associated with the worklist unit.">getNode</a>()-><a class="code" href="classclang_1_1ento_1_1ExplodedNode.html#afb4d9693286307b3fcba2bb9fdbef530" title="getLocation - Returns the edge associated with the given node.">getLocation</a>();</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>       <span class="keyword">const</span> <a class="code" href="classclang_1_1CFGBlock.html">CFGBlock</a> *B = 0;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Optional.html">Optional<StmtPoint></a> SP = P.<a class="code" href="classclang_1_1ProgramPoint.html#a18cdaf6f5c806edd0c3b437f94fdb5cb" title="Convert to the specified ProgramPoint type, returning None if this ProgramPoint is not of the desired...">getAs</a><<a class="code" href="classclang_1_1StmtPoint.html">StmtPoint</a>>()) {</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         B = CBM->getBlock(SP->getStmt());</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Optional.html">Optional<BlockEdge></a> BE = P.<a class="code" href="classclang_1_1ProgramPoint.html#a18cdaf6f5c806edd0c3b437f94fdb5cb" title="Convert to the specified ProgramPoint type, returning None if this ProgramPoint is not of the desired...">getAs</a><<a class="code" href="classclang_1_1BlockEdge.html">BlockEdge</a>>()) {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         B = BE-><a class="code" href="classclang_1_1BlockEdge.html#a7d9fd91c4755e13f66c1b24d80202c59">getDst</a>();</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Optional.html">Optional<BlockEntrance></a> BEnt = P.<a class="code" href="classclang_1_1ProgramPoint.html#a18cdaf6f5c806edd0c3b437f94fdb5cb" title="Convert to the specified ProgramPoint type, returning None if this ProgramPoint is not of the desired...">getAs</a><<a class="code" href="classclang_1_1BlockEntrance.html">BlockEntrance</a>>()) {</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>         B = BEnt->getBlock();</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1Optional.html">Optional<BlockExit></a> BExit = P.<a class="code" href="classclang_1_1ProgramPoint.html#a18cdaf6f5c806edd0c3b437f94fdb5cb" title="Convert to the specified ProgramPoint type, returning None if this ProgramPoint is not of the desired...">getAs</a><<a class="code" href="classclang_1_1BlockExit.html">BlockExit</a>>()) {</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         B = BExit->getBlock();</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>       }</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>       <span class="keywordflow">if</span> (!B)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>       </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>       <span class="keywordflow">return</span> B == TargetBlock || CRA.<a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html#a73cec1b9cbbc6e2461470906e6a0720a" title="Returns true if the block 'Dst' can be reached from block 'Src'.">isReachable</a>(B, TargetBlock);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     }</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>   VisitWL visitWL(AC-><a class="code" href="classclang_1_1AnalysisDeclContext.html#a1183c4594ff92b3fb45174996f56c9cf">getCFGStmtMap</a>(), CB, *CRA);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="comment">// Were there any items in the worklist that could potentially reach</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   <span class="comment">// this block?</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="keywordflow">if</span> (CE.<a class="code" href="classclang_1_1ento_1_1CoreEngine.html#a0c3259535b0dba4025b899b5e44e475c">getWorkList</a>()-><a class="code" href="classclang_1_1ento_1_1WorkList.html#ad61bc355f83a0c1b2d2c0bcf91639a4e">visitItemsInWorkList</a>(visitWL))</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="comment">// Verify that this block is reachable from the entry block</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="keywordflow">if</span> (!CRA-><a class="code" href="classclang_1_1CFGReverseBlockReachabilityAnalysis.html#a73cec1b9cbbc6e2461470906e6a0720a" title="Returns true if the block 'Dst' can be reached from block 'Src'.">isReachable</a>(&AC-><a class="code" href="classclang_1_1AnalysisDeclContext.html#a8a3aa357f5d09fa5c71e952f961a5bca">getCFG</a>()-><a class="code" href="classclang_1_1CFG.html#ad5618d5c0636efb4d71510bd66c066cf">getEntry</a>(), CB))</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="keywordflow">return</span> <span class="keyword">false</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>   <span class="comment">// If we get to this point, there is no connection to the entry block or an</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   <span class="comment">// aborted block. This path is unreachable and we can report the error.</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> }</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment">// Recursive function that determines whether an expression contains any element</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="comment">// that varies. This could be due to a compile-time constant like sizeof. An</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="comment">// expression may also involve a variable that behaves like a constant. The</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="comment">// function returns true if the expression varies, and false otherwise.</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="keywordtype">bool</span> IdempotentOperationChecker::CanVary(<span class="keyword">const</span> <a class="code" href="classclang_1_1Expr.html">Expr</a> *Ex,</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>                                          <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC) {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   <span class="comment">// Parentheses and casts are irrelevant here</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   Ex = Ex-><a class="code" href="classclang_1_1Expr.html#a397a707d10e0d3ac4a150325eafa4368">IgnoreParenCasts</a>();</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>   <span class="keywordflow">if</span> (Ex-><a class="code" href="classclang_1_1Stmt.html#a0270d9cff7ed2b38acb39690b96586d2">getLocStart</a>().<a class="code" href="classclang_1_1SourceLocation.html#a83c660ad7c57096011c5f40c50b52c7d">isMacroID</a>())</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   <span class="keywordflow">switch</span> (Ex-><a class="code" href="classclang_1_1Stmt.html#ac881a5954ff27d475c1bbab6f5d80150">getStmtClass</a>()) {</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   <span class="comment">// Trivially true cases</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   <span class="keywordflow">case</span> Stmt::ArraySubscriptExprClass:</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   <span class="keywordflow">case</span> Stmt::MemberExprClass:</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   <span class="keywordflow">case</span> Stmt::StmtExprClass:</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   <span class="keywordflow">case</span> Stmt::CallExprClass:</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   <span class="keywordflow">case</span> Stmt::VAArgExprClass:</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   <span class="keywordflow">case</span> Stmt::ShuffleVectorExprClass:</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   <span class="comment">// Trivially false cases</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   <span class="keywordflow">case</span> Stmt::IntegerLiteralClass:</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   <span class="keywordflow">case</span> Stmt::CharacterLiteralClass:</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   <span class="keywordflow">case</span> Stmt::FloatingLiteralClass:</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   <span class="keywordflow">case</span> Stmt::PredefinedExprClass:</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   <span class="keywordflow">case</span> Stmt::ImaginaryLiteralClass:</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   <span class="keywordflow">case</span> Stmt::StringLiteralClass:</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   <span class="keywordflow">case</span> Stmt::OffsetOfExprClass:</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   <span class="keywordflow">case</span> Stmt::CompoundLiteralExprClass:</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   <span class="keywordflow">case</span> Stmt::AddrLabelExprClass:</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   <span class="keywordflow">case</span> Stmt::BinaryTypeTraitExprClass:</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   <span class="keywordflow">case</span> Stmt::GNUNullExprClass:</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   <span class="keywordflow">case</span> Stmt::InitListExprClass:</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   <span class="keywordflow">case</span> Stmt::DesignatedInitExprClass:</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   <span class="keywordflow">case</span> Stmt::BlockExprClass:</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     <span class="keywordflow">return</span> <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>   <span class="comment">// Cases requiring custom logic</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>   <span class="keywordflow">case</span> Stmt::UnaryExprOrTypeTraitExprClass: {</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a> *SE = </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                        cast<const UnaryExprOrTypeTraitExpr>(Ex);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="keywordflow">if</span> (SE-><a class="code" href="classclang_1_1UnaryExprOrTypeTraitExpr.html#aa2277a3ae31b20bd06f41d6adc1620ef">getKind</a>() != <a class="code" href="namespaceclang.html#a5d73f06594a5ccb763a726bed94a541fab5694f3b82246fb24857d74abfd90edd">UETT_SizeOf</a>)</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>       <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     <span class="keywordflow">return</span> SE-><a class="code" href="classclang_1_1UnaryExprOrTypeTraitExpr.html#a0569c161451a2b03d39fba40d67e0c77">getTypeOfArgument</a>()-><a class="code" href="classclang_1_1Type.html#af8518d4e36dad6c248aac75a3a169022">isVariableArrayType</a>();</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>   <span class="keywordflow">case</span> Stmt::DeclRefExprClass:</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>     <span class="comment">// Check for constants/pseudoconstants</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordflow">return</span> !isConstantOrPseudoConstant(cast<DeclRefExpr>(Ex), AC);</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   <span class="comment">// The next cases require recursion for subexpressions</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   <span class="keywordflow">case</span> Stmt::BinaryOperatorClass: {</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     <span class="keyword">const</span> <a class="code" href="classclang_1_1BinaryOperator.html" title="A builtin binary operation expression such as "x + y" or "x <= y".">BinaryOperator</a> *B = cast<const BinaryOperator>(Ex);</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>     <span class="comment">// Exclude cases involving pointer arithmetic.  These are usually</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="comment">// false positives.</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="keywordflow">if</span> (B-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1af84c54a9c8a061371180b3e8b25d4c3f">BO_Sub</a> || B-><a class="code" href="classclang_1_1BinaryOperator.html#a497174c5cc2816aa3a3f29e12dd93165">getOpcode</a>() == <a class="code" href="namespaceclang.html#a443b552ee80020cfeb2b86c99e7f85e1abe63fd1a02a7d1191c3b2fd102b983bd">BO_Add</a>)</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>       <span class="keywordflow">if</span> (B-><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_1Type.html#a12103ea8bee9506930287bab68a08569">getAs</a><<a class="code" href="classclang_1_1PointerType.html">PointerType</a>>())</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     <span class="keywordflow">return</span> CanVary(B-><a class="code" href="classclang_1_1BinaryOperator.html#a1ab10aae0ffa01be5d1a979e6da285e6">getRHS</a>(), AC)</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         || CanVary(B-><a class="code" href="classclang_1_1BinaryOperator.html#ad8b108ac1a7795b9f388d8dece6b8924">getLHS</a>(), AC);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>    }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   <span class="keywordflow">case</span> Stmt::UnaryOperatorClass:</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     <span class="keywordflow">return</span> CanVary(cast<UnaryOperator>(Ex)->getSubExpr(), AC);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   <span class="keywordflow">case</span> Stmt::ConditionalOperatorClass:</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   <span class="keywordflow">case</span> Stmt::BinaryConditionalOperatorClass:</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     <span class="keywordflow">return</span> CanVary(cast<AbstractConditionalOperator>(Ex)->getCond(), AC);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   }</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</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> <span class="comment">// Returns true if a DeclRefExpr is or behaves like a constant.</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="keywordtype">bool</span> IdempotentOperationChecker::isConstantOrPseudoConstant(</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>                                                           <span class="keyword">const</span> <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DR,</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>                                                           <a class="code" href="classclang_1_1AnalysisDeclContext.html">AnalysisDeclContext</a> *AC) {</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   <span class="comment">// Check if the type of the Decl is const-qualified</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="keywordflow">if</span> (DR-><a class="code" href="classclang_1_1Expr.html#a3dd8850a4ad8a5b5f595dd9e9446187b">getType</a>().<a class="code" href="classclang_1_1QualType.html#afea72c89b99446db779fcfb0ea257826" title="Determine whether this type is const-qualified.">isConstQualified</a>())</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   <span class="comment">// Check for an enum</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <span class="keywordflow">if</span> (isa<EnumConstantDecl>(DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>()))</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     <span class="keywordflow">return</span> <span class="keyword">true</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="keyword">const</span> <a class="code" href="classclang_1_1VarDecl.html">VarDecl</a> *VD = dyn_cast<<a class="code" href="classclang_1_1VarDecl.html">VarDecl</a>>(DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>());</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   <span class="keywordflow">if</span> (!VD)</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   <span class="comment">// Check if the Decl behaves like a constant. This check also takes care of</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="comment">// static variables, which can only change between function calls if they are</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="comment">// modified in the AST.</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <a class="code" href="classclang_1_1PseudoConstantAnalysis.html">PseudoConstantAnalysis</a> *PCA = AC-><a class="code" href="classclang_1_1AnalysisDeclContext.html#a96a66f248969219eff161e560bd99ac9">getPseudoConstantAnalysis</a>();</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordflow">if</span> (PCA-><a class="code" href="classclang_1_1PseudoConstantAnalysis.html#af18a7e448477f29a3fe2fec8bbcf175a">isPseudoConstant</a>(VD))</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> }</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> <span class="comment">// Recursively find any substatements containing VarDecl's with storage other</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="comment">// than local</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> <span class="keywordtype">bool</span> IdempotentOperationChecker::containsNonLocalVarDecl(<span class="keyword">const</span> <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>) {</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   <span class="keyword">const</span> <a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a> *DR = dyn_cast<<a class="code" href="classclang_1_1DeclRefExpr.html" title="A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].">DeclRefExpr</a>>(<a class="code" href="AnalysisBasedWarnings_8cpp.html#a33dc45a03958a0bf07b5da2dec4db648">S</a>);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   <span class="keywordflow">if</span> (DR)</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</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>(DR-><a class="code" href="classclang_1_1DeclRefExpr.html#a22eec021070f5d0733e90b6c5c127a25">getDecl</a>()))</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>       <span class="keywordflow">if</span> (!VD-><a class="code" href="classclang_1_1VarDecl.html#a86bb48bd6ced47b79a59af7df7108184">hasLocalStorage</a>())</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>         <span class="keywordflow">return</span> <span class="keyword">true</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">for</span> (<a class="code" href="structclang_1_1ConstStmtIterator.html">Stmt::const_child_iterator</a> I = S-><a class="code" href="classclang_1_1Stmt.html#a52a20468e7b2880de813ed91d75d2617">child_begin</a>(); I != S-><a class="code" href="classclang_1_1Stmt.html#a7a17d445eb6027180bbdc518e6cdb63a">child_end</a>();</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>       ++I)</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classclang_1_1Stmt.html">Stmt</a> *child = *I)</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>       <span class="keywordflow">if</span> (containsNonLocalVarDecl(child))</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         <span class="keywordflow">return</span> <span class="keyword">true</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">  731</span>   <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="keywordtype">void</span> ento::registerIdempotentOperationChecker(<a class="code" href="classclang_1_1ento_1_1CheckerManager.html">CheckerManager</a> &mgr) {</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   mgr.<a class="code" href="classclang_1_1ento_1_1CheckerManager.html#ab3845ff8b66a7617efdadb219829414a" title="Used to register checkers.">registerChecker</a><IdempotentOperationChecker>();</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<hr>
+<p class="footer">
+Generated on Mon May 12 2014 12:13:40 for r$LatestRev$ by <a href="http://www.doxygen.org">Doxygen 
+1.8.3.1</a>.</p>
+<p class="footer">
+See the <a href="http://clang.llvm.org">Main Clang Web Page</a> for more 
+information.</p>
+</body>
+</html>

Added: www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8d_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8d_source.html?rev=225843&view=auto
==============================================================================
--- www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8d_source.html (added)
+++ www-releases/trunk/3.5.1/tools/clang/docs/doxygen/html/IdempotentOperationChecker_8d_source.html Tue Jan 13 16:55:20 2015
@@ -0,0 +1,579 @@
+<!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: IdempotentOperationChecker.d Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">clang API Documentation</p>
+<!-- Generated by Doxygen 1.8.3.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void
 (0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(11)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(12)"><span class="SelectionMark"> </span>Pages</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_f65986501076cc710d4b9355ae3fe06d.html">clang</a></li><li class="navelem"><a class="el" href="dir_87e2a7550f83bd8cbfc92736891468fc.html">lib</a></li><li class="navelem"><a class="el" href="dir_fd0691f76a19cc33074025cb3a574e66.html">StaticAnalyzer</a></li><li class="navelem"><a class="el" href="dir_5fa4c591fb04e7ea3227105bf6cc3359.html">Checkers</a></li><li class="navelem"><a class="el" href="dir_6f95b71040c11c69a7222376e6764bfb.html">Release+Asserts</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">IdempotentOperationChecker.d</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="IdempotentOperationChecker_8d.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> /home/tstellar/llvm/tools/clang/lib/StaticAnalyzer/Checkers/Release+Asserts/IdempotentOperationChecker.o \</div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>  /home/tstellar/llvm/tools/clang/lib/StaticAnalyzer/Checkers/Release+Asserts/IdempotentOperationChecker.d: \</div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>  IdempotentOperationChecker.cpp ClangSACheckers.h \</div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>  /home/tstellar/llvm/tools/clang/lib/StaticAnalyzer/Checkers/../../../include/clang/StaticAnalyzer/Core/BugReporter/CommonBugCategories.h \
+ Checkers.inc \</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>  /home/tstellar/llvm/tools/clang/lib/StaticAnalyzer/Checkers/../../../include/clang/AST/Stmt.h \</div>
+<