<div dir="ltr"><div>Okay, I tracked the problem down as far as a likely -looking function, and I stuck in a line of debug code:</div><div><br></div><div>void MSVCToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,</div><div>                                              ArgStringList &CC1Args) const {</div><div>  if (DriverArgs.hasArg(options::OPT_nostdinc))</div><div>    return;</div><div><br></div><div>  if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {</div><div>    SmallString<128> P(getDriver().ResourceDir);</div><div>    llvm::sys::path::append(P, "include");</div><div>    <span class="" style="white-space:pre">    </span>std::cout<<"include path "<<P.c_str()<<'\n';</div><div>    addSystemInclude(DriverArgs, CC1Args, P);</div><div>  }</div><div><br></div><div>Which gave sensible looking output:</div><div><br></div><div>include path C:\llvm-svn\build\Release\bin\..\lib\clang\3.7.0\include</div><div><br></div><div>... ah! Although the include files are source code, they're in the bin directory, and because I was of necessity doing a clean rebuild, they got deleted at the start of the process, so that's why clang was picking up the Microsoft intrin.h. Haven't tested this theory yet - it takes a while to run the builds - but I think it makes sense. This explains the difference in behaviour between 3.6.1 and 3.7.0. In the former case I was extracting from tarballs, so I extracted an entire second copy of the source tree to work within for the self compile. 3.7.0 was downloaded from SVN which took longer so without really thinking about it, I just tried working within the existing tree. What I should do is copy the source tree over to a fresh copy and try the builds again that way. I'll do that next.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 12, 2015 at 3:21 AM, Russell Wallace <span dir="ltr"><<a href="mailto:russell.wallace@gmail.com" target="_blank">russell.wallace@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>However, I tried a little test file with /showIncludes just now and you're right, it is picking up Microsoft's intrin.h instead of its own. I guess clang has some kind of mechanism whereby it puts its own header directories at the start of the include path? How is that supposed to work? I don't see any commandline options that obviously refer to it; does it have anything to do with this fragment from cmake.rst (the most relevant thing I could find with a search for 'include path' over the entire directory tree)?</div><div><br></div><div>``LLVM_INCLUDE_DIRS``</div><div>  A list of include paths to directories containing LLVM header files.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 12, 2015 at 3:11 AM, Russell Wallace <span dir="ltr"><<a href="mailto:russell.wallace@gmail.com" target="_blank">russell.wallace@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Makes sense, yeah, trying something in a different environment is usually a good way to find problems. I had indeed moved the renamed clang-cl.exe to a different directory, but when I move it back into its home directory and retry the build, I get the same errors.<div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 11, 2015 at 11:16 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Thanks for trying the self-host, it's something I do locally and we do have a bot setup for it, but it uses ninja:<div><div><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lab.llvm.org-3A8011_builders_clang-2Dx86-2Dwin2008-2Dselfhost_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=miWAHYGAxKdY0JmK2GXxnmHKaFIuJ9JSlevZPl0Ng6Q&s=NoE0YsT23CmSM2lAVuspNkHoJpKsLRjEweQdRCB3NME&e=" target="_blank">http://lab.llvm.org:8011/builders/clang-x86-win2008-selfhost/</a><br></div><div>Obviously everyone's setup is slightly different and getting diversity in testing is good.<br></div><div><br></div><div>These undefined symbols are intrinsics that should be taken care of by clang/lib/Headers/Intrin.h, but somehow that isn't being chosen in llvm/lib/Support/Host.cpp. I have a feeling that this line is getting MSVC's builtin header instead of clang's:</div><div><div>#ifdef _MSC_VER</div><div>#include <intrin.h></div><div>#endif</div></div><div>When you rename clang-cl.exe to cl.exe, make sure it's in the same bin directory as clang-cl.exe so that it can find it's resource directory with these builtin headers.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Thu, Jun 11, 2015 at 11:31 AM, Russell Wallace <span dir="ltr"><<a href="mailto:russell.wallace@gmail.com" target="_blank">russell.wallace@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><div dir="ltr"><div>I tried checking out the latest llvm/clang from SVN (as of a few hours ago) and compiling it (clang 3.6.1 doesn't compile 3.7 because it fails a version check, so I repeated the technique of compiling with Microsoft C++ first, then using the resulting clang-cl.exe). It fails with a bunch of error messages along the lines of:</div><div><br></div><div>LLVMSupport.lib(Atomic.obj) : error LNK2019: unresolved external symbol __faststorefence referenced in function "void __cdecl llvm::sys::MemoryFence(void)" (?MemoryFence@sys@llvm@@YAXXZ) [C:\llvm-svn\build\utils\FileCheck\FileCheck.vcxproj]</div><div>LLVMSupport.lib(Host.obj) : error LNK2019: unresolved external symbol _xgetbv referenced in function "class llvm::StringRef __cdecl llvm::sys::getHostCPUName(void)" (?getHostCPUName@sys@llvm@@YA?AVStringRef@2@XZ) [C:\llvm-svn\build\utils\FileCheck\FileCheck.vcxproj]</div><div>LLVMSupport.lib(Host.obj) : error LNK2019: unresolved external symbol __cpuidex referenced in function "class llvm::StringRef __cdecl llvm::sys::getHostCPUName(void)" (?getHostCPUName@sys@llvm@@YA?AVStringRef@2@XZ) [C:\llvm-svn\build\utils\FileCheck\FileCheck.vcxproj]</div><div><br></div><div>Anyone know what the problem is here?</div><div><br></div><div>More generally, is it considered useful to run these sort of tests on the SVN version as we go along, or is it more the case that the SVN version is expected to have bugs and it would be better to wait for a release candidate?</div></div>
<br></div></div>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>