forked from OSchip/llvm-project
Update the MSVC Compatibility document
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. llvm-svn: 212193
This commit is contained in:
parent
a746e8e58a
commit
fe828adf19
|
@ -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
|
||||
======================================
|
||||
|
|
Loading…
Reference in New Issue