unittest_demangle.pass.cpp uses the preprocessor to #include cxa_demangle.cpp. D148566 will make more use of std::string_view in libcxxabi rather than the home-grown StringView, but as a result of D149092, a definition of abort_message needs to be provided. Otherwise builds of check-cxxabi with -DLLVM_ENABLE_ASSERTIONS=ON will fail to link with the errors: /usr/bin/ld: /tmp/lit-tmp-0akcq37p/cc6DLdvw.o: in function `(anonymous namespace)::itanium_demangle::starts_with(std::__1::basic_string_view<char, std::__1::char_traits<char> >, char)': unittest_demangle.pass.cpp:(.text+0x81): undefined reference to `abort_message' /usr/bin/ld: /tmp/lit-tmp-0akcq37p/cc6DLdvw.o: in function `(anonymous namespace)::itanium_demangle::starts_with(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >)': unittest_demangle.pass.cpp:(.text+0x2aa): undefined reference to `abort_message' /usr/bin/ld: unittest_demangle.pass.cpp:(.text+0x312): undefined reference to `abort_message' /usr/bin/ld: /tmp/lit-tmp-0akcq37p/cc6DLdvw.o: in function `(anonymous namespace)::itanium_demangle::OutputBuffer::writeUnsigned(unsigned long, bool)': unittest_demangle.pass.cpp:(.text+0x54f): undefined reference to `abort_message' /usr/bin/ld: unittest_demangle.pass.cpp:(.text+0x5b7): undefined reference to `abort_message' /usr/bin/ld: /tmp/lit-tmp-0akcq37p/cc6DLdvw.o:unittest_demangle.pass.cpp:(.text+0xe6e): more undefined references to `abort_message' follow /usr/bin/ld: /home/libcxx-builder/.buildkite-agent/builds/google-libcxx-builder-f0560ea595b1-1/llvm-project/libcxx-ci/build/generic-gcc/test/Output/unittest_demangle.pass.cpp.dir/t.tmp.exe: hidden symbol `abort_message' isn't defined Use the preprocessor further to provide the definition of abort_message for this unittest. Reviewed By: #libc_abi, phosek Differential Revision: https://reviews.llvm.org/D151160
89 lines
1.9 KiB
C++
89 lines
1.9 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++03
|
|
|
|
#include "../src/cxa_demangle.cpp"
|
|
#include "../src/abort_message.cpp"
|
|
|
|
using namespace __cxxabiv1;
|
|
|
|
void testPODSmallVector() {
|
|
{ // {push/pop}_back
|
|
PODSmallVector<int, 1> PSV;
|
|
PSV.push_back(0);
|
|
PSV.push_back(1);
|
|
PSV.push_back(2);
|
|
PSV.push_back(3);
|
|
for (int i = 0; i < 4; ++i)
|
|
assert(PSV[i] == i);
|
|
PSV.pop_back();
|
|
for (int i = 0; i < 3; ++i)
|
|
assert(PSV[i] == i);
|
|
PSV.pop_back();
|
|
PSV.pop_back();
|
|
assert(!PSV.empty() && PSV.size() == 1);
|
|
PSV.pop_back();
|
|
assert(PSV.empty() && PSV.size() == 0);
|
|
}
|
|
|
|
{
|
|
PODSmallVector<int, 1> PSV1;
|
|
PSV1.push_back(1);
|
|
PSV1.push_back(2);
|
|
PSV1.push_back(3);
|
|
|
|
PODSmallVector<int, 1> PSV2;
|
|
std::swap(PSV1, PSV2);
|
|
assert(PSV1.size() == 0);
|
|
assert(PSV2.size() == 3);
|
|
int i = 1;
|
|
for (int x : PSV2) {
|
|
assert(x == i);
|
|
++i;
|
|
}
|
|
assert(i == 4);
|
|
std::swap(PSV1, PSV2);
|
|
assert(PSV1.size() == 3);
|
|
assert(PSV2.size() == 0);
|
|
i = 1;
|
|
for (int x : PSV1) {
|
|
assert(x == i);
|
|
++i;
|
|
}
|
|
assert(i == 4);
|
|
}
|
|
|
|
{
|
|
PODSmallVector<int, 10> PSV1;
|
|
PODSmallVector<int, 10> PSV2;
|
|
PSV1.push_back(0);
|
|
PSV1.push_back(1);
|
|
PSV1.push_back(2);
|
|
assert(PSV1.size() == 3);
|
|
assert(PSV2.size() == 0);
|
|
std::swap(PSV1, PSV2);
|
|
assert(PSV1.size() == 0);
|
|
assert(PSV2.size() == 3);
|
|
int i = 0;
|
|
for (int x : PSV2) {
|
|
assert(x == i);
|
|
++i;
|
|
}
|
|
for (int x : PSV1) {
|
|
assert(false);
|
|
(void)x;
|
|
}
|
|
}
|
|
}
|
|
|
|
int main(int, char**) {
|
|
testPODSmallVector();
|
|
return 0;
|
|
}
|