[cfe-commits] [PATCH] Fixing include order for Windows

Aaron Ballman aaron at aaronballman.com
Sun Feb 19 10:28:06 PST 2012


On Windows, the default search paths for includes would put the
CMake-found headers (<build dir>\lib\clang\3.1\include) before the OS
headers.  For the most part, this is fine.  However, there are some
header files that share names with the system headers, which are
incorrect.  For instance, immintrin.h is completely different from the
SDK include.  This causes miscompilations in surprising places because
a system header will attempt to include one of these duplicates, and
find the clang header instead of the other system header.

A simple test case of: #include <map> when building from MSVC
demonstrates the issue.

A user can work around this behavior by specifying -nobuiltininc on
the command line, but that seems rather obtuse for such normal use
cases.

I've fixed this by changing the order that the headers are included
from the toolchain.  The SDK headers get added *before* the clang
headers, and this resolves the issue.

This patch does cause one regression test to fail
(Modules\compiler_builtins.m).  This is because the platform SDK
intrinsics are differently structured from the ones that come with
clang.  The OS APIs expect the SDK intrinsics, but our tests seem to
require our own intrinsics.  I'm open to suggestions.

Thanks!

~Aaron
-------------- next part --------------
A non-text attachment was scrubbed...
Name: WindowsToolChain.patch
Type: application/octet-stream
Size: 2428 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120219/c8030c92/attachment.obj>


More information about the cfe-commits mailing list