HomePhabricator

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

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

Details

Committed
EricWFMar 6 2019, 12:31 PM
Reviewer
thomasanderson
Differential Revision
D58945: Fix ABI compatibility of `<stdexcept>` with VCRuntime.
Branches
Unknown
Tags
Unknown