[cfe-dev] Current state of Microsoft extensions

Francois Pichet pichet2000 at gmail.com
Thu Nov 3 09:49:20 PDT 2011


On Thu, Nov 3, 2011 at 11:39 AM, Leandro T. C. Melo
<leandro.melo at nokia.com> wrote:
> Hi all,
>
> as far as I understand, clang doesn't fully support the Microsoft
> extensions yet. I know there are options like -fms-extensions and others
> such as -fdelayed-template-parsing that can be useful. Still I gave it
> try with an up-to-date version of clang (VS 2010) for a file that simply
> #include <algorithm> and got quite a few errors.

If you include <algorithm> then you must explicitly pass -nobuiltininc
because some clang builtins don't mix well with VS 2010 headers.

test.cpp:
#include <algorithm>

clang -nobuiltininc test.cpp

should give no error.

> I was told on IRC that there's been recent work in this area. So I'd
> like to kindly ask if someone could provide an overview of the current
> situation. Basically, an update of the statements from
> http://clang.llvm.org/docs/UsersManual.html and
> http://llvm.org/docs/GettingStartedVS.html concerning the Microsoft
> environment. Perhaps there's a more detailed list of what can be
> expected, what is missing, what's currently on the way, where help is
> needed, etc?

The current state is that clang will parse all MSVC 2010 standard
headers, all the Windows SDK headers files ( -fsyntax-only).

As for the MSVC 2008 standard headers, clang will choke because on
some missing typename.

clang can *almost* parse most of the MFC code. (4 remaining issues)

I have been a little bit busy lately but I am planning to submit more
patches soon to get clang to parse VS 2008 headers and MFC code.

Notably I have a (almost ready) patch (really a hack!) to be able to
get around the missing typename in MSVC headers.

Unfortunately there is no doc really about what is missing to be more
MSVC compatible. If you want to help I suggest you pick a large MSVC
code base, try to parse it with clang and see the errors and submit
patches to fix them.

As for using clang for CodeGen and linking with MSVC libraries, C code
will work but for C++ there are a lot of works to do.



More information about the cfe-dev mailing list