Skip to content

Commit fe828ad

Browse files
committed
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
1 parent a746e8e commit fe828ad

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

clang/docs/MSVCCompatibility.rst

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ ABI features
4343

4444
The status of major ABI-impacting C++ features:
4545

46-
* Record layout: :good:`Mostly complete`. We've tested this with a fuzzer, and
47-
most of the remaining failures involve ``#pragma pack``,
48-
``__declspec(align(N))``, or other pragmas.
46+
* Record layout: :good:`Complete`. We've tested this with a fuzzer and have
47+
fixed all known bugs.
4948

5049
* Class inheritance: :good:`Mostly complete`. This covers all of the standard
5150
OO features you would expect: virtual method inheritance, multiple
5251
inheritance, and virtual inheritance. Every so often we uncover a bug where
53-
our tables are incompatible, but this is pretty well in hand.
52+
our tables are incompatible, but this is pretty well in hand. This feature
53+
has also been fuzz tested.
5454

5555
* Name mangling: :good:`Ongoing`. Every new C++ feature generally needs its own
5656
mangling. For example, member pointer template arguments have an interesting
@@ -78,23 +78,21 @@ The status of major ABI-impacting C++ features:
7878
enabling stack traces in all modern Windows debuggers. Clang does not emit
7979
any type info or description of variable layout.
8080

81-
* `RTTI`_: :none:`Unstarted`. See the bug for a discussion of what needs to
82-
happen first.
83-
84-
.. _RTTI: http://llvm.org/PR18951
81+
* `RTTI`_: :good:`Complete`. Generation of RTTI data structures has been
82+
finished, along with support for the ``/GR`` flag.
8583

8684
* Exceptions and SEH: :none:`Unstarted`. Clang can parse both constructs, but
8785
does not know how to emit compatible handlers. This depends on RTTI.
8886

8987
* Thread-safe initialization of local statics: :none:`Unstarted`. We are ABI
90-
compatible with MSVC 2012, which does not support thread-safe local statics.
91-
MSVC 2013 changed the ABI to make initialization of local statics thread safe,
88+
compatible with MSVC 2013, which does not support thread-safe local statics.
89+
MSVC "14" changed the ABI to make initialization of local statics thread safe,
9290
and we have not yet implemented this.
9391

94-
* Lambdas in ABI boundaries: :none:`Infeasible`. It is unlikely that we will
95-
ever be fully ABI compatible with lambdas declared in inline functions due to
96-
what appears to be a hash code in the name mangling. Lambdas that are not
97-
externally visible should work fine.
92+
* Lambdas: :none:`Mostly complete`. Clang is compatible with Microsoft's
93+
implementation of lambdas except for providing overloads for conversion to
94+
function pointer for different calling conventions. However, Microsoft's
95+
extension is non-conforming.
9896

9997
Template instantiation and name lookup
10098
======================================

0 commit comments

Comments
 (0)