|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1 |
|
| #
f3966eaf |
| 01-Apr-2022 |
Louis Dionne <[email protected]> |
[libc++] Make the Debug mode a configuration-time only option
The debug mode has been broken pretty much ever since it was shipped because it was possible to enable the debug mode in user code witho
[libc++] Make the Debug mode a configuration-time only option
The debug mode has been broken pretty much ever since it was shipped because it was possible to enable the debug mode in user code without actually enabling it in the dylib, leading to ODR violations that caused various kinds of failures.
This commit makes the debug mode a knob that is configured when building the library and which can't be changed afterwards. This is less flexible for users, however it will actually work as intended and it will allow us, in the future, to add various kinds of checks that do not assume the same ABI as the normal library. Furthermore, this will make the debug mode more robust, which means that vendors might be more tempted to support it properly, which hasn't been the case with the current debug mode.
This patch shouldn't break any user code, except folks who are building against a library that doesn't have the debug mode enabled and who try to enable the debug mode in their code. Such users will get a compile-time error explaining that this configuration isn't supported anymore.
In the future, we should further increase the granularity of the debug mode checks so that we can cherry-pick which checks to enable, like we do for unspecified behavior randomization.
Differential Revision: https://reviews.llvm.org/D122941
show more ...
|
| #
10c4eec2 |
| 14-May-2022 |
Mark de Wever <[email protected]> |
[NFC][libc++][format] Improves naming.
Based on review comments in D110499.
Depends on D110499
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D125610
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1 |
|
| #
f0c06c04 |
| 26-Sep-2021 |
Mark de Wever <[email protected]> |
[libc++][format][5/6] Improve format_to_n.
Use a specialized buffer wrapper to limit the number of insertions in the buffer. After the limit has been reached the buffer only needs to count the numbe
[libc++][format][5/6] Improve format_to_n.
Use a specialized buffer wrapper to limit the number of insertions in the buffer. After the limit has been reached the buffer only needs to count the number of insertions to return the buffer size required to store the entire output.
Depends on D110498
Reviewed By: #libc, Mordante
Differential Revision: https://reviews.llvm.org/D110499
show more ...
|
| #
fb9a692b |
| 26-Sep-2021 |
Mark de Wever <[email protected]> |
[libc++][format][4/6] Improve formatted_size.
Use a specialized "buffer" to count the number of insertions instead of using a `string` as storage type.
Depends on D110497.
Reviewed By: ldionne, #l
[libc++][format][4/6] Improve formatted_size.
Use a specialized "buffer" to count the number of insertions instead of using a `string` as storage type.
Depends on D110497.
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D110498
show more ...
|
| #
88930229 |
| 26-Sep-2021 |
Mark de Wever <[email protected]> |
[libc++][format][3/6] Adds a __container_buffer.
Instead of writing every character directly into the container by using a `back_insert_iterator` the data is buffered in an `array`. This buffer is t
[libc++][format][3/6] Adds a __container_buffer.
Instead of writing every character directly into the container by using a `back_insert_iterator` the data is buffered in an `array`. This buffer is then inserted to the container by calling its `insert` member function.
Since there's no guarantee every container's `insert` behaves properly containers need to opt-in to this behaviour. The appropriate standard containers opt-in to this behaviour.
This change improves the performance of the format functions that use a `back_insert_iterator`.
Depends on D110495
Reviewed By: ldionne, vitaut, #libc
Differential Revision: https://reviews.llvm.org/D110497
show more ...
|
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3 |
|
| #
555214cb |
| 04-Sep-2021 |
Mark de Wever <[email protected]> |
[libc++][format][2/6] Adds a __output_iterator.
Instead of using a temporary `string` in `__vformat_to_wrapped` use a new generic iterator. This aids to reduce the number of template instantions and
[libc++][format][2/6] Adds a __output_iterator.
Instead of using a temporary `string` in `__vformat_to_wrapped` use a new generic iterator. This aids to reduce the number of template instantions and avoids using a `string` to buffer the entire formatted output.
This changes the type of `format_context` and `wformat_context`, this can still be done since the code isn't ABI stable yet.
Several approaches have been evaluated: - Using a __output_buffer base class with: - a put function to store the buffer in its internal buffer - a virtual flush function to copy the internal buffer to the output - Using a `function` to forward the output operation to the output buffer, much like the next method. - Using a type erased function point to store the data in the buffer. The last version resulted in the best performance. For some cases there's still a loss of speed over the original method. This loss many becomes apparent when large strings are copied to a pointer like iterator, before the compiler optimized this using `memcpy`.
Reviewed By: ldionne, vitaut, #libc
Differential Revision: https://reviews.llvm.org/D110495
show more ...
|