1ABI Changelog
2==============
3This changelog contains information about ABI changes in libc++. Specifically
4the addition and deletion of symbols from the libc++ dylib.
5
6Each entry should start with the revision number followed by a description of
7the change. The entry should contain a summary of the ABI changes made,
8including what symbols were added, removed, or changed.
9
10To generate a summary use "sym_diff.py" diffing against the appropriate ABI list.
11Afterwards the ABI list should be updated to include the new changes.
12
13New entries should be added directly below the "Version" header.
14
15-----------
16Version 8.0
17-----------
18
19* rXXXXX - Remove std::bad_array_length
20
21  The change removes the definition of std::bad_array_length (which never made
22  it into the standard) from the headers and the dylib. This is technically an
23  ABI break because the symbols are shipped starting with mac OSX 10.13, however
24  users couldn't be relying on the functionality because it is marked as being
25  unavailable using Clang's availability attribute.
26
27  x86_64-apple-darwin16.0
28  -----------------------
29  Symbol removed: __ZNKSt16bad_array_length4whatEv
30  Symbol removed: __ZNKSt16bad_array_length4whatEv
31  Symbol removed: __ZNSt16bad_array_lengthC1Ev
32  Symbol removed: __ZNSt16bad_array_lengthC1Ev
33  Symbol removed: __ZNSt16bad_array_lengthC2Ev
34  Symbol removed: __ZNSt16bad_array_lengthC2Ev
35  Symbol removed: __ZNSt16bad_array_lengthD0Ev
36  Symbol removed: __ZNSt16bad_array_lengthD0Ev
37  Symbol removed: __ZNSt16bad_array_lengthD1Ev
38  Symbol removed: __ZNSt16bad_array_lengthD1Ev
39  Symbol removed: __ZNSt16bad_array_lengthD2Ev
40  Symbol removed: __ZNSt16bad_array_lengthD2Ev
41  Symbol removed: __ZTISt16bad_array_length
42  Symbol removed: __ZTISt16bad_array_length
43  Symbol removed: __ZTSSt16bad_array_length
44  Symbol removed: __ZTSSt16bad_array_length
45  Symbol removed: __ZTVSt16bad_array_length
46  Symbol removed: __ZTVSt16bad_array_length
47
48* r347395 - Making libc++ build under -fvisibility=hidden on Linux
49
50  The change marks several function templates as hidden. This removes symbols
51  from the shared library, but this is not an ABI break because it's impossible
52  for programs linking against libc++.so to actually depend on that symbol.
53  The reason is that the symbol is exported from the shared library through
54  an implicit instantiation present in the shared object itself only. Furthermore,
55  if a user's shared object was implicitly instantiating one of these functions,
56  marking that symbol as hidden would not be an ABI break for them because none
57  of their users could actually be using the symbol in their dylib (because
58  it's an implicit instantiation).
59
60  x86_64-linux-gnu
61  ----------------
62  Symbol removed: _ZNSt3__125__num_get_signed_integralIlEET_PKcS3_Rji
63  Symbol removed: _ZNSt3__125__num_get_signed_integralIxEET_PKcS3_Rji
64  Symbol removed: _ZNSt3__127__num_get_unsigned_integralIjEET_PKcS3_Rji
65  Symbol removed: _ZNSt3__127__num_get_unsigned_integralImEET_PKcS3_Rji
66  Symbol removed: _ZNSt3__127__num_get_unsigned_integralItEET_PKcS3_Rji
67  Symbol removed: _ZNSt3__127__num_get_unsigned_integralIyEET_PKcS3_Rji
68  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIaaEEPaEEjT0_S5_S5_S5_S5_T_
69  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIccEEPcEEjT0_S5_S5_S5_S5_T_
70  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIddEEPdEEjT0_S5_S5_S5_S5_T_
71  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIffEEPfEEjT0_S5_S5_S5_S5_T_
72  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIhhEEPhEEjT0_S5_S5_S5_S5_T_
73  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIiiEEPiEEjT0_S5_S5_S5_S5_T_
74  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIjjEEPjEEjT0_S5_S5_S5_S5_T_
75  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIllEEPlEEjT0_S5_S5_S5_S5_T_
76  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessImmEEPmEEjT0_S5_S5_S5_S5_T_
77  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIssEEPsEEjT0_S5_S5_S5_S5_T_
78  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIttEEPtEEjT0_S5_S5_S5_S5_T_
79  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIwwEEPwEEjT0_S5_S5_S5_S5_T_
80  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIxxEEPxEEjT0_S5_S5_S5_S5_T_
81  Symbol removed: _ZNSt3__17__sort5IRNS_6__lessIyyEEPyEEjT0_S5_S5_S5_S5_T_
82  Symbol removed: _ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_
83  Symbol removed: _ZSt18make_exception_ptrINSt3__112future_errorEESt13exception_ptrT_
84
85* r345260 - Making libc++ build under -fvisibility=hidden on Mac OS
86
87  The change marks __thread_specific_ptr<__thread_struct>::__at_thread_exit(void*)
88  with hidden visibility. This removes a symbol from the shared libraries,
89  however this is not an ABI break because it's impossible for programs linking
90  against libc++.dylib to actually depend on that symbol. The reason is that
91  the symbol is exported from the shared library through an implicit
92  instantiation present in the dylib itself only. Furthermore, if a user's
93  dylib was implicitly instantiating __thread_specific_ptr<T>::__at_thread_exit
94  (because it's defined in the headers), marking that symbol as hidden would
95  not be an ABI break for them because none of their users could actually be
96  using the symbol in their dylib (because it's an implicit instantiation).
97
98  This change also marks __start_std_streams as hidden -- this variable is
99  only required to initialize the streams, and nobody should depend on it
100  from outside the dylib.
101
102  x86_64-linux-gnu
103  ----------------
104  Symbol removed: _ZNSt3__121__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
105  Symbol removed: _ZNSt3__119__start_std_streamsE
106
107  x86_64-apple-darwin16.0
108  -----------------------
109  Symbol removed: __ZNSt3__221__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
110  Symbol removed: __ZNSt3__119__start_std_streamsE
111
112-----------
113Version 7.0
114-----------
115
116* r338479 - Elementary string conversions for integral types
117
118  The change emits __u64toa and __u32toa under std::__1::__itoa.
119
120  x86_64-linux-gnu
121  ----------------
122  Symbol added: _ZNSt3__16__itoa8__u64toaEmPc
123  Symbol added: _ZNSt3__16__itoa8__u32toaEjPc
124
125  x86_64-apple-darwin16.0
126  -----------------------
127  Symbol added: __ZNSt3__16__itoa8__u64toaEyPc
128  Symbol added: __ZNSt3__16__itoa8__u32toaEjPc
129
130
131* r333467 - Fix embarrasing typo in uncaught_exceptions.
132
133  This bug caused __uncaught_exception to be ODR used instead of
134  __uncaught_exceptions. This change is non-ABI breaking because the symbols
135  for std::uncaught_exception and std::uncaught_exceptions haven't changed,
136  and because users shouldn't be depending directly on libc++ exporting
137  __uncaught_exception/__uncaught_exceptions.
138
139  All Platforms
140  ----------------
141  SYMBOL REMOVED: __cxa_uncaught_exception
142  Symbol added: __cxa_uncaught_exceptions
143
144
145-----------
146Version 5.0
147-----------
148
149* r313500 - Fix undefined "___cxa_deleted_virtual" symbol in macosx
150
151  x86_64-linux-gnu
152  ----------------
153  No changes
154
155  x86_64-apple-darwin16.0
156  -----------------------
157  Symbol added: ___cxa_deleted_virtual
158
159* r296729 - Remove std::num_get template methods which should be inline
160
161  These functions should never have had visible definitions in the dylib but
162  since they were previously not specified with 'inline' they accidentally
163  got emitted. This change is non-ABI breaking because every "linkage unit"
164  must contain its own definition.
165
166  x86_64-linux-gnu
167  ----------------
168  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
169  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
170  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
171  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
172  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
173  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
174  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
175  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
176  SYMBOL REMOVED: _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
177  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_
178  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_
179  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_
180  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_
181  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_
182  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_
183  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_
184  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_
185  SYMBOL REMOVED: _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_
186
187  x86_64-apple-darwin16.0
188  -----------------------
189  No changes
190
191-----------
192Version 4.0
193-----------
194
195* r290651 - Add _LIBCPP_ASSERT debug handling functions
196
197  All Platforms
198  -------------
199  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKNS_19__libcpp_debug_infoE
200  Symbol added: _ZNSt3__124__libcpp_debug_exceptionD1Ev
201  Symbol added: _ZTINSt3__124__libcpp_debug_exceptionE
202  Symbol added: _ZNSt3__129__libcpp_throw_debug_functionERKNS_19__libcpp_debug_infoE
203  Symbol added: _ZNSt3__124__libcpp_debug_exceptionD2Ev
204  Symbol added: _ZNSt3__129__libcpp_abort_debug_functionERKNS_19__libcpp_debug_infoE
205  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2ERKS0_
206  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1Ev
207  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKNS_19__libcpp_debug_infoE
208  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC2Ev
209  Symbol added: _ZTSNSt3__124__libcpp_debug_exceptionE
210  Symbol added: _ZNSt3__123__libcpp_debug_functionE
211  Symbol added: _ZNKSt3__124__libcpp_debug_exception4whatEv
212  Symbol added: _ZNSt3__124__libcpp_debug_exceptionC1ERKS0_
213  Symbol added: _ZNSt3__124__libcpp_debug_exceptionD0Ev
214  Symbol added: _ZTVNSt3__124__libcpp_debug_exceptionE
215  Symbol added: _ZNSt3__127__libcpp_set_debug_functionEPFvRKNS_19__libcpp_debug_infoEE
216
217* r288547 - Implement C++17 <variant>
218
219  All Platforms
220  -------------
221  Symbol added: _ZTVSt18bad_variant_access
222  Symbol added: _ZTISt18bad_variant_access
223  Symbol added: _ZTSSt18bad_variant_access
224  Symbol added: _ZNKSt18bad_variant_access4whatEv
225
226* r285537 - Remove std::string::append template methods which should be inline
227
228  These functions should never have had visible definitions in the dylib but
229  since they were previously not specified with 'inline' they accidentally
230  got emitted. This change is non-ABI breaking because every "linkage unit"
231  must contain its own definition.
232
233  x86_64-linux-gnu
234  ----------------
235  SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
236  SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_
237
238  x86_64-apple-darwin16.0
239  -----------------------
240  No changes
241
242* r285101 - Add -fvisibility-inlines-hidden when building libc++.
243
244  Although this change removes symbols, it should still be non-ABI breaking
245  since all of the definitions removed are inline functions. For this reason
246  removing these symbols is safe because every "linkage unit" which uses these
247  functions will contain their own definition.
248
249  x86_64-linux-gnu
250  ----------------
251  SYMBOL REMOVED: _ZNSt12bad_any_castD0Ev
252  SYMBOL REMOVED: _ZNSt12experimental15fundamentals_v112bad_any_castD0Ev
253  SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDiED0Ev
254  SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IDsED0Ev
255  SYMBOL REMOVED: _ZNSt3__114__codecvt_utf8IwED0Ev
256  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb0EED0Ev
257  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDiLb1EED0Ev
258  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb0EED0Ev
259  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IDsLb1EED0Ev
260  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb0EED0Ev
261  SYMBOL REMOVED: _ZNSt3__115__codecvt_utf16IwLb1EED0Ev
262  SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD0Ev
263  SYMBOL REMOVED: _ZNSt3__117__assoc_sub_stateD2Ev
264  SYMBOL REMOVED: _ZNSt3__117__libcpp_sscanf_lEPKcP15__locale_structS1_z
265  SYMBOL REMOVED: _ZNSt3__119__libcpp_asprintf_lEPPcP15__locale_structPKcz
266  SYMBOL REMOVED: _ZNSt3__119__libcpp_snprintf_lEPcmP15__locale_structPKcz
267  SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDiED0Ev
268  SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IDsED0Ev
269  SYMBOL REMOVED: _ZNSt3__120__codecvt_utf8_utf16IwED0Ev
270
271  x86_64-apple-darwin16.0
272  -----------------------
273  No Changes - inline symbols are already hidden
274
275
276* r284206 - Implement C++17 aligned allocation in <new>
277
278  x86_64-linux-gnu
279  ----------------
280  Symbol added: posix_memalign@GLIBC_2.2.5
281  Symbol added: _ZdaPvSt11align_val_t
282  Symbol added: _ZdlPvSt11align_val_t
283  Symbol added: _ZnamSt11align_val_t
284  Symbol added: _ZdaPvmSt11align_val_t
285  Symbol added: _ZdlPvmSt11align_val_t
286  Symbol added: _ZdlPvSt11align_val_tRKSt9nothrow_t
287  Symbol added: _ZnwmSt11align_val_tRKSt9nothrow_t
288  Symbol added: _ZnamSt11align_val_tRKSt9nothrow_t
289  Symbol added: _ZdaPvSt11align_val_tRKSt9nothrow_t
290  Symbol added: _ZnwmSt11align_val_t
291
292* r283980 - Implement C++17 <optional>
293
294  x86_64-linux-gnu
295  ----------------
296  Symbol added: _ZTISt19bad_optional_access
297  Symbol added: _ZNSt19bad_optional_accessD0Ev
298  Symbol added: _ZNSt19bad_optional_accessD1Ev
299  Symbol added: _ZNSt19bad_optional_accessD2Ev
300  Symbol added: _ZTVSt19bad_optional_access
301  Symbol added: _ZTSSt19bad_optional_access
302
303* r278310 - Implement C++17 <any>
304
305  x86_64-linux-gnu
306  ----------------
307  Symbol added: _ZNKSt12bad_any_cast4whatEv
308  Symbol added: _ZNSt12bad_any_castD0Ev
309  Symbol added: _ZTISt12bad_any_cast
310  Symbol added: _ZTSSt12bad_any_cast
311  Symbol added: _ZTVSt12bad_any_cast
312
313* r295398 - Remove basic_string::insert and basic_string::replace template methods
314    which should be inline.
315
316  These functions should never have had visible definitions in the dylib but
317  since they were previously not specified with 'inline' they accidentally
318  got emitted. This change is non-ABI breaking because every "linkage unit"
319  must contain its own definition.
320
321  x86_64-linux-gnu
322  ----------------
323  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_
324  SYMBOL REMOVED: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceIPKcEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
325  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_
326  SYMBOL REMOVED: _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceIPKwEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
327