ABI Changelog
==============
This changelog contains information about ABI changes in libc++. Specifically
the addition and deletion of symbols from the libc++ dylib.

Each entry should start with the revision number followed by a description of
the change. The entry should contain a summary of the ABI changes made,
including what symbols were added, removed, or changed.

To generate a summary use "sym_diff.py" diffing against the appropriate ABI list.
Afterwards the ABI list should be updated to include the new changes.

New entries should be added directly below the "Version" header.

-----------
Version 7.0
-----------

* r338479 - Elementary string conversions for integral types

  The change emits __u64toa and __u32toa under std::__1::__itoa.

  x86_64-linux-gnu
  ----------------
  Symbol added: _ZNSt3__16__itoa8__u64toaEmPc
  Symbol added: _ZNSt3__16__itoa8__u32toaEjPc

  x86_64-apple-darwin16.0
  -----------------------
  Symbol added: __ZNSt3__16__itoa8__u64toaEyPc
  Symbol added: __ZNSt3__16__itoa8__u32toaEjPc


* r333467 - Fix embarrasing typo in uncaught_exceptions.

  This bug caused __uncaught_exception to be ODR used instead of
  __uncaught_exceptions. This change is non-ABI breaking because the symbols
  for std::uncaught_exception and std::uncaught_exceptions haven't changed,
  and because users shouldn't be depending directly on libc++ exporting
  __uncaught_exception/__uncaught_exceptions.

  All Platforms
  ----------------
  SYMBOL REMOVED: __cxa_uncaught_exception
  Symbol added: __cxa_uncaught_exceptions


-----------
Version 5.0
-----------

* r313500 - Fix undefined "___cxa_deleted_virtual" symbol in macosx

  x86_64-linux-gnu
  ----------------
  No changes

  x86_64-apple-darwin16.0
  -----------------------
  Symbol added: ___cxa_deleted_virtual

* r296729 - Remove std::num_get template methods which should be inline

  These functions should never have had visible definitions in the dylib but
  since they were previously not specified with 'inline' they accidentally
  got emitted. This change is non-ABI breaking because every "linkage unit"
  must contain its own definition.

  x86_64-linux-gnu
  ----------------
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_

  x86_64-apple-darwin16.0
  -----------------------
  No changes

-----------
Version 4.0
-----------

* r290651 - Add _LIBCPP_ASSERT debug handling functions

  All Platforms
  -------------
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKNS_19__libcpp_debug_infoE
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionD1Ev
  Symbol added: _ZTINSt3__124__libcpp_debug_exceptionE
  Symbol added: _ZNSt3__129__libcpp_throw_debug_functionERKNS_19__libcpp_debug_infoE
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionD2Ev
  Symbol added: _ZNSt3__129__libcpp_abort_debug_functionERKNS_19__libcpp_debug_infoE
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKS0_
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1Ev
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKNS_19__libcpp_debug_infoE
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2Ev
  Symbol added: _ZTSNSt3__124__libcpp_debug_exceptionE
  Symbol added: _ZNSt3__123__libcpp_debug_functionE
  Symbol added: _ZNKSt3__124__libcpp_debug_exception4whatEv
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKS0_
  Symbol added: _ZNSt3__124__libcpp_debug_exceptionD0Ev
  Symbol added: _ZTVNSt3__124__libcpp_debug_exceptionE
  Symbol added: _ZNSt3__127__libcpp_set_debug_functionEPFvRKNS_19__libcpp_debug_infoEE

* r288547 - Implement C++17 <variant>

  All Platforms
  -------------
  Symbol added: _ZTVSt18bad_variant_access
  Symbol added: _ZTISt18bad_variant_access
  Symbol added: _ZTSSt18bad_variant_access
  Symbol added: _ZNKSt18bad_variant_access4whatEv

* r285537 - Remove std::string::append template methods which should be inline

  These functions should never have had visible definitions in the dylib but
  since they were previously not specified with 'inline' they accidentally
  got emitted. This change is non-ABI breaking because every "linkage unit"
  must contain its own definition.

  x86_64-linux-gnu
  ----------------
  SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
  SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_

  x86_64-apple-darwin16.0
  -----------------------
  No changes

* r285101 - Add -fvisibility-inlines-hidden when building libc++.

  Although this change removes symbols, it should still be non-ABI breaking
  since all of the definitions removed are inline functions. For this reason
  removing these symbols is safe because every "linkage unit" which uses these
  functions will contain their own definition.

  x86_64-linux-gnu
  ----------------
  SYMBOL REMOVED: _ZNSt12bad_any_castD0Ev
  SYMBOL REMOVED: _ZNSt12experimental15fundamentals_v112bad_any_castD0Ev
  SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDiED0Ev
  SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDsED0Ev
  SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IwED0Ev
  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb0EED0Ev
  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb1EED0Ev
  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb0EED0Ev
  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb1EED0Ev
  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb0EED0Ev
  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb1EED0Ev
  SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD0Ev
  SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD2Ev
  SYMBOL REMOVED: _ZNSt3__117__libcpp_sscanf_lEPKcP15__locale_structS1_z
  SYMBOL REMOVED: _ZNSt3__119__libcpp_asprintf_lEPPcP15__locale_structPKcz
  SYMBOL REMOVED: _ZNSt3__119__libcpp_snprintf_lEPcmP15__locale_structPKcz
  SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDiED0Ev
  SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDsED0Ev
  SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IwED0Ev

  x86_64-apple-darwin16.0
  -----------------------
  No Changes - inline symbols are already hidden


* r284206 - Implement C++17 aligned allocation in <new>

  x86_64-linux-gnu
  ----------------
  Symbol added: posix_memalign@GLIBC_2.2.5
  Symbol added: _ZdaPvSt11align_val_t
  Symbol added: _ZdlPvSt11align_val_t
  Symbol added: _ZnamSt11align_val_t
  Symbol added: _ZdaPvmSt11align_val_t
  Symbol added: _ZdlPvmSt11align_val_t
  Symbol added: _ZdlPvSt11align_val_tRKSt9nothrow_t
  Symbol added: _ZnwmSt11align_val_tRKSt9nothrow_t
  Symbol added: _ZnamSt11align_val_tRKSt9nothrow_t
  Symbol added: _ZdaPvSt11align_val_tRKSt9nothrow_t
  Symbol added: _ZnwmSt11align_val_t

* r283980 - Implement C++17 <optional>

  x86_64-linux-gnu
  ----------------
  Symbol added: _ZTISt19bad_optional_access
  Symbol added: _ZNSt19bad_optional_accessD0Ev
  Symbol added: _ZNSt19bad_optional_accessD1Ev
  Symbol added: _ZNSt19bad_optional_accessD2Ev
  Symbol added: _ZTVSt19bad_optional_access
  Symbol added: _ZTSSt19bad_optional_access

* r278310 - Implement C++17 <any>

  x86_64-linux-gnu
  ----------------
  Symbol added: _ZNKSt12bad_any_cast4whatEv
  Symbol added: _ZNSt12bad_any_castD0Ev
  Symbol added: _ZTISt12bad_any_cast
  Symbol added: _ZTSSt12bad_any_cast
  Symbol added: _ZTVSt12bad_any_cast

* r295398 - Remove basic_string::insert and basic_string::replace template methods
    which should be inline.

  These functions should never have had visible definitions in the dylib but
  since they were previously not specified with 'inline' they accidentally
  got emitted. This change is non-ABI breaking because every "linkage unit"
  must contain its own definition.

  x86_64-linux-gnu
  ----------------
  SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertIPKcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorISA_EE5valueENS_11__wrap_iterIPcEEE4typeENSB_IS8_EESA_SA_
  SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceIPKcEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
  SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertIPKwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorISA_EE5valueENS_11__wrap_iterIPwEEE4typeENSB_IS8_EESA_SA_
  SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceIPKwEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
