Make VCRuntime ABI configuration a first-class option.
authorEric Fiselier <eric@efcs.ca>
Tue, 5 Mar 2019 01:57:01 +0000 (01:57 +0000)
committerEric Fiselier <eric@efcs.ca>
Tue, 5 Mar 2019 01:57:01 +0000 (01:57 +0000)
commite69290dc7ff7319acf5904f15ab6630fad07ab58
tree35b89875fe5bc992c80f093fbaa91547aa06f9af
parent3fd4a968ad80d603ea4dbd616c00824cf165e384
Make VCRuntime ABI configuration a first-class option.

Summary:
On Windows we currently provide two separate ABI configurations. One which defers to `vcruntime` to provide the C++ runtime and another which doesn't.
Using `vcruntime` allows interoperability which programs compiled against the MSVC STL, and should be preferred whenever possible.

When deferring to `vcruntime` much of the ABI we provide changes. Including the layout of `<stdexcept>` types, their vtables, and how the linkage of their members.

This patch introduces the `_LIBCPP_ABI_VCRUNTIME` macro to denote this configuration. It also cleans up the existing configuration for using `vcruntime`.

This cleanup lays the groundwork for fixing a number of ABI and interoperability bugs in  `<stdexcept>`.

Reviewers: thomasanderson, ldionne, smeenai

Reviewed By: smeenai

Subscribers: jdoerfert, libcxx-commits, #libc

Differential Revision: https://reviews.llvm.org/D58942

llvm-svn: 355366
libcxx/include/__config
libcxx/include/exception
libcxx/include/new
libcxx/include/typeinfo
libcxx/src/new.cpp
libcxx/src/stdexcept.cpp
libcxx/src/support/runtime/exception_msvc.ipp
libcxx/src/typeinfo.cpp