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

Nico Weber thakis at chromium.org
Sun Feb 19 22:17:05 PST 2012

Hi Aaron,

clang trunk can parse <map> from msvc2010 without problems as is:

C:\src\chrome\src>type test.cc
#include <map>

C:\src\chrome\src>..\..\llvm-build\bin\Release\clang++ -fsyntax-only test.cc


(^ note no error output)

What problems are you seeing?


On Sun, Feb 19, 2012 at 10:28 AM, Aaron Ballman <aaron at aaronballman.com> wrote:
> 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
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

More information about the cfe-commits mailing list