HomePhabricator

Fix ABI compatibility of `<stdexcept>` with VCRuntime.

Authored by EricWF on Mar 6 2019, 12:31 PM.

Description

Fix ABI compatibility of <stdexcept> with VCRuntime.

Summary:
Currently, libc++'s <stdexcept> doesn't play nice with vcruntime. Specifically:

  • logic_error and runtime_error have a different layout.
  • libc++'s logic_error and runtime_error override what() but vcruntime does not.
  • vcruntime uses weak vtables for <stdexcept> types.
  • libc++'s <stdexcept> constructors and assignment operators may have different manglings than vcruntimes.

This patch makes libc++'s declarations in <stdexcept> match those provided by MSVC's STL as closely as possible.
If MSVC doesn't declare a special member, then neither do we. This ensures that the implicit definitions have the same linkage, visibility, triviality, and noexcept-ness.

Reviewers: thomasanderson, ldionne, smeenai

Reviewed By: thomasanderson

Subscribers: jdoerfert, libcxx-commits

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

llvm-svn: 355546