llvm-project/libcxxabi
Nathan Sidwell d3b10150b6 [demangler] Simplify OutputBuffer initialization
Every non-testcase use of OutputBuffer contains code to allocate an
initial buffer (using either 128 or 1024 as initial guesses). There's
now no need to do that, given recent changes to the buffer extension
heuristics -- it allocates a 1k(ish) buffer on first need.

Just pass in a buffer (if any) to the constructor.  Thus the
OutputBuffer's ownership of the buffer starts at its own lifetime
start. We can reduce the lifetime of this object in several cases.

That new constructor takes a 'size_t *' for the size argument, as all
uses with a non-null buffer are passing through a malloc'd buffer from
their own caller in this manner.

The buffer reset member function is never used, and is deleted.

Some adjustment to a couple of uses is needed, due to the lazy buffer
creation of this patch.

a) the Microsoft demangler can demangle empty strings to nothing,
which it then memoizes.  We need to avoid the UB of passing nullptr to
memcpy.

b) a unit test checks insertion of no characters into an empty buffer.
We need to avoid UB when converting that to std::string.

The original buffer initialization code would return a failure code if
that first malloc failed.  Existing code either ignored that, called
std::terminate with a FIXME, or returned an error code.

But that's not foolproof anyway, as a subsequent buffer extension
failure ends up calling std::terminate. I am working on addressing
that unfortunate failure mode in a manner more consistent with the C++
ABI design.

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D122604
2022-10-17 04:23:16 -07:00
..
cmake [runtimes] Don't link against compiler-rt when we don't find it 2022-08-24 10:33:10 -04:00
fuzz
include [libcxxabi] Check __SEH__, when checking if ARM EHABI is implied 2022-06-06 23:19:22 +03:00
lib [libc++/abi] Revert "[libc++] Move the weak symbols list to libc++abi" 2020-10-05 11:42:13 -04:00
src [demangler] Simplify OutputBuffer initialization 2022-10-17 04:23:16 -07:00
test [runtimes] Remove all traces of the legacy testing configuration system 2022-09-30 15:03:33 -04:00
www Remove references to old mailing lists that have moved to discourse. Replace with links to discourse. 2022-07-22 09:59:03 -07:00
.clang-format [libcxx] Remove extraneous '---' lines in .clang-format files 2022-06-15 01:34:37 -07:00
.gitignore
CMakeLists.txt [runtimes] Add the ability to customize the output name of libc++, libc++abi and libunwind 2022-10-11 15:19:59 -04:00
CREDITS.TXT
LICENSE.TXT