]> granicus.if.org Git - clang/commitdiff
Update the MSVC Compatibility document
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 2 Jul 2014 17:26:04 +0000 (17:26 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 2 Jul 2014 17:26:04 +0000 (17:26 +0000)
It hasn't been updated to reflect the progress we've made.  We've fuzz
tested VFTables, VBTables, layout, and RTTI data.  We support lambdas
that are compatible with their scheme.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212193 91177308-0d34-0410-b5e6-96231b3b80d8

docs/MSVCCompatibility.rst

index 683ce937b4571d159397343a52bf7f44aab2fd34..2a7f7b15bc490314a950745c8c96cc2aa948ecd5 100644 (file)
@@ -43,14 +43,14 @@ ABI features
 
 The status of major ABI-impacting C++ features:
 
-* Record layout: :good:`Mostly complete`.  We've tested this with a fuzzer, and
-  most of the remaining failures involve ``#pragma pack``,
-  ``__declspec(align(N))``, or other pragmas.
+* Record layout: :good:`Complete`.  We've tested this with a fuzzer and have
+  fixed all known bugs.
 
 * Class inheritance: :good:`Mostly complete`.  This covers all of the standard
   OO features you would expect: virtual method inheritance, multiple
   inheritance, and virtual inheritance.  Every so often we uncover a bug where
-  our tables are incompatible, but this is pretty well in hand.
+  our tables are incompatible, but this is pretty well in hand.  This feature
+  has also been fuzz tested.
 
 * Name mangling: :good:`Ongoing`.  Every new C++ feature generally needs its own
   mangling.  For example, member pointer template arguments have an interesting
@@ -78,23 +78,21 @@ The status of major ABI-impacting C++ features:
   enabling stack traces in all modern Windows debuggers.  Clang does not emit
   any type info or description of variable layout.
 
-* `RTTI`_: :none:`Unstarted`.  See the bug for a discussion of what needs to
-  happen first.
-
-.. _RTTI: http://llvm.org/PR18951
+* `RTTI`_: :good:`Complete`.  Generation of RTTI data structures has been
+  finished, along with support for the ``/GR`` flag.
 
 * Exceptions and SEH: :none:`Unstarted`.  Clang can parse both constructs, but
   does not know how to emit compatible handlers.  This depends on RTTI.
 
 * Thread-safe initialization of local statics: :none:`Unstarted`.  We are ABI
-  compatible with MSVC 2012, which does not support thread-safe local statics.
-  MSVC 2013 changed the ABI to make initialization of local statics thread safe,
+  compatible with MSVC 2013, which does not support thread-safe local statics.
+  MSVC "14" changed the ABI to make initialization of local statics thread safe,
   and we have not yet implemented this.
 
-* Lambdas in ABI boundaries: :none:`Infeasible`.  It is unlikely that we will
-  ever be fully ABI compatible with lambdas declared in inline functions due to
-  what appears to be a hash code in the name mangling.  Lambdas that are not
-  externally visible should work fine.
+* Lambdas: :none:`Mostly complete`.  Clang is compatible with Microsoft's
+  implementation of lambdas except for providing overloads for conversion to
+  function pointer for different calling conventions.  However, Microsoft's
+  extension is non-conforming.
 
 Template instantiation and name lookup
 ======================================