aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/ELFObjectFile.cpp
diff options
context:
space:
mode:
authorDaniel McIntosh <Daniel.McIntosh@ibm.com>2021-06-08 13:59:11 -0400
committerAbhina Sreeskantharajan <Abhina.Sreeskantharajan@ibm.com>2021-06-08 13:59:34 -0400
commitee2a92c29df6d37a4dc5d0f6795f0fe531962b9d (patch)
tree7e9e6c432af30111df6f705010c6206b0426bb0d /llvm/lib/Object/ELFObjectFile.cpp
parent4d680b06c92a0b785da9bb4370cd7d8819b6d726 (diff)
downloadllvm-ee2a92c29df6d37a4dc5d0f6795f0fe531962b9d.zip
llvm-ee2a92c29df6d37a4dc5d0f6795f0fe531962b9d.tar.gz
llvm-ee2a92c29df6d37a4dc5d0f6795f0fe531962b9d.tar.bz2
[libcxx] Remove VLA from libcxx locale header
The buffer size (`__nbuf`) in `num_put::do_put` is currently not an integral/core constant expression. As a result, `__nar` is a Variable Length Array (VLA). VLAs are a GNU extension and not part of the base C++ standard, so unless there is good reason to do so they probably shouldn't be used in any of the standard library headers. The call to `__iob.flags()` is the only thing keeping `__nbuf` from being a compile time constant, so the solution here is to simply err on the side of caution and always allocate a buffer large enough to fit the base prefix. Note that, while the base prefix for hex (`0x`) is slightly longer than the base prefix for octal (`0`), this isn't a concern. The difference in the space needed for the value portion of the string is enough to make up for this. (Unless we're working with small, oddly sized types such as a hypothetical `uint9_t`, the space needed for the value portion in octal is at least 1 more than the space needed for the value portion in hex). This PR also adds `constexpr` to `__nbuf` to enforce compile time const-ness going forward. Reviewed By: Mordante, #libc, Quuxplusone, ldionne Differential Revision: https://reviews.llvm.org/D103558
Diffstat (limited to 'llvm/lib/Object/ELFObjectFile.cpp')
0 files changed, 0 insertions, 0 deletions