diff --git a/clang/docs/tools/clang-formatted-files.txt b/clang/docs/tools/clang-formatted-files.txt --- a/clang/docs/tools/clang-formatted-files.txt +++ b/clang/docs/tools/clang-formatted-files.txt @@ -3102,7 +3102,6 @@ libc/src/__support/CPP/Bitset.h libc/src/__support/CPP/Functional.h libc/src/__support/CPP/Limits.h -libc/src/__support/CPP/StringView.h libc/src/__support/CPP/Utility.h libc/src/__support/CPP/vector.h libc/src/__support/File/file.cpp @@ -3451,7 +3450,6 @@ libcxx/src/ryu/d2s.cpp libcxx/src/ryu/f2s.cpp libcxxabi/src/cxa_guard_impl.h -libcxxabi/src/demangle/StringView.h libcxxabi/src/demangle/Utility.h libunwind/src/cet_unwind.h lld/COFF/CallGraphSort.cpp @@ -5250,7 +5248,6 @@ llvm/include/llvm/Debuginfod/DIFetcher.h llvm/include/llvm/Debuginfod/HTTPClient.h llvm/include/llvm/Demangle/Demangle.h -llvm/include/llvm/Demangle/StringView.h llvm/include/llvm/Demangle/Utility.h llvm/include/llvm/DWARFLinker/DWARFLinker.h llvm/include/llvm/DWARFLinker/DWARFLinkerCompileUnit.h diff --git a/libcxxabi/src/demangle/StringView.h b/libcxxabi/src/demangle/StringView.h deleted file mode 100644 --- a/libcxxabi/src/demangle/StringView.h +++ /dev/null @@ -1,109 +0,0 @@ -//===--- StringView.h -------------------------------------------*- 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 -// -//===----------------------------------------------------------------------===// -// -// FIXME: Use std::string_view instead when we support C++17. -// There are two copies of this file in the source tree. The one under -// libcxxabi is the original and the one under llvm is the copy. Use -// cp-to-llvm.sh to update the copy. See README.txt for more details. -// -//===----------------------------------------------------------------------===// - -#ifndef DEMANGLE_STRINGVIEW_H -#define DEMANGLE_STRINGVIEW_H - -#include "DemangleConfig.h" - -#include <__cxxabi_config.h> -#include -#include - -#ifdef _LIBCXXABI_COMPILER_CLANG -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-template" -#endif - -DEMANGLE_NAMESPACE_BEGIN - -class StringView { - const char *First; - const char *Last; - -public: - static const size_t npos = ~size_t(0); - - template - StringView(const char (&Str)[N]) : First(Str), Last(Str + N - 1) {} - StringView(const char *First_, size_t Len) - : First(First_), Last(First_ + Len) {} - StringView(const char *Str) : First(Str), Last(Str + std::strlen(Str)) {} - StringView() : First(nullptr), Last(nullptr) {} - - StringView substr(size_t Pos, size_t Len = npos) const { - assert(Pos <= size()); - if (Len > size() - Pos) - Len = size() - Pos; - return StringView(begin() + Pos, Len); - } - - size_t find(char C, size_t From = 0) const { - // Avoid calling memchr with nullptr. - if (From < size()) { - // Just forward to memchr, which is faster than a hand-rolled loop. - if (const void *P = ::memchr(First + From, C, size() - From)) - return size_t(static_cast(P) - First); - } - return npos; - } - - void remove_prefix(size_t N) { - assert(size() >= N); - First += N; - } - void remove_suffix(size_t N) { - assert(size() >= N); - Last -= N; - } - - char front() const { - assert(!empty()); - return *begin(); - } - - char back() const { - assert(!empty()); - return *(end() - 1); - } - - bool startsWith(char C) const { return !empty() && *begin() == C; } - - bool startsWith(StringView Str) const { - if (Str.size() > size()) - return false; - return std::strncmp(Str.begin(), begin(), Str.size()) == 0; - } - - const char &operator[](size_t Idx) const { return *(begin() + Idx); } - - const char *begin() const { return First; } - const char *end() const { return Last; } - size_t size() const { return static_cast(Last - First); } - bool empty() const { return First == Last; } -}; - -inline bool operator==(const StringView &LHS, const StringView &RHS) { - return LHS.size() == RHS.size() && - std::strncmp(LHS.begin(), RHS.begin(), LHS.size()) == 0; -} - -DEMANGLE_NAMESPACE_END - -#ifdef _LIBCXXABI_COMPILER_CLANG -#pragma clang diagnostic pop -#endif - -#endif diff --git a/libcxxabi/src/demangle/cp-to-llvm.sh b/libcxxabi/src/demangle/cp-to-llvm.sh --- a/libcxxabi/src/demangle/cp-to-llvm.sh +++ b/libcxxabi/src/demangle/cp-to-llvm.sh @@ -6,7 +6,7 @@ set -e cd $(dirname $0) -HDRS="ItaniumDemangle.h ItaniumNodes.def StringView.h StringViewExtras.h Utility.h" +HDRS="ItaniumDemangle.h ItaniumNodes.def StringViewExtras.h Utility.h" LLVM_DEMANGLE_DIR=$1 if [[ -z "$LLVM_DEMANGLE_DIR" ]]; then diff --git a/llvm/include/llvm/Demangle/StringView.h b/llvm/include/llvm/Demangle/StringView.h deleted file mode 100644 --- a/llvm/include/llvm/Demangle/StringView.h +++ /dev/null @@ -1,98 +0,0 @@ -//===--- StringView.h ----------------*- mode:c++;eval:(read-only-mode) -*-===// -// Do not edit! See README.txt. -// 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 -// -//===----------------------------------------------------------------------===// -// -// FIXME: Use std::string_view instead when we support C++17. -// There are two copies of this file in the source tree. The one under -// libcxxabi is the original and the one under llvm is the copy. Use -// cp-to-llvm.sh to update the copy. See README.txt for more details. -// -//===----------------------------------------------------------------------===// - -#ifndef DEMANGLE_STRINGVIEW_H -#define DEMANGLE_STRINGVIEW_H - -#include "DemangleConfig.h" -#include -#include - -DEMANGLE_NAMESPACE_BEGIN - -class StringView { - const char *First; - const char *Last; - -public: - static const size_t npos = ~size_t(0); - - template - StringView(const char (&Str)[N]) : First(Str), Last(Str + N - 1) {} - StringView(const char *First_, size_t Len) - : First(First_), Last(First_ + Len) {} - StringView(const char *Str) : First(Str), Last(Str + std::strlen(Str)) {} - StringView() : First(nullptr), Last(nullptr) {} - - StringView substr(size_t Pos, size_t Len = npos) const { - assert(Pos <= size()); - if (Len > size() - Pos) - Len = size() - Pos; - return StringView(begin() + Pos, Len); - } - - size_t find(char C, size_t From = 0) const { - // Avoid calling memchr with nullptr. - if (From < size()) { - // Just forward to memchr, which is faster than a hand-rolled loop. - if (const void *P = ::memchr(First + From, C, size() - From)) - return size_t(static_cast(P) - First); - } - return npos; - } - - void remove_prefix(size_t N) { - assert(size() >= N); - First += N; - } - void remove_suffix(size_t N) { - assert(size() >= N); - Last -= N; - } - - char front() const { - assert(!empty()); - return *begin(); - } - - char back() const { - assert(!empty()); - return *(end() - 1); - } - - bool startsWith(char C) const { return !empty() && *begin() == C; } - - bool startsWith(StringView Str) const { - if (Str.size() > size()) - return false; - return std::strncmp(Str.begin(), begin(), Str.size()) == 0; - } - - const char &operator[](size_t Idx) const { return *(begin() + Idx); } - - const char *begin() const { return First; } - const char *end() const { return Last; } - size_t size() const { return static_cast(Last - First); } - bool empty() const { return First == Last; } -}; - -inline bool operator==(const StringView &LHS, const StringView &RHS) { - return LHS.size() == RHS.size() && - std::strncmp(LHS.begin(), RHS.begin(), LHS.size()) == 0; -} - -DEMANGLE_NAMESPACE_END - -#endif diff --git a/llvm/unittests/Demangle/CMakeLists.txt b/llvm/unittests/Demangle/CMakeLists.txt --- a/llvm/unittests/Demangle/CMakeLists.txt +++ b/llvm/unittests/Demangle/CMakeLists.txt @@ -10,5 +10,4 @@ OutputBufferTest.cpp PartialDemangleTest.cpp RustDemangleTest.cpp - StringViewTest.cpp ) diff --git a/llvm/unittests/Demangle/StringViewTest.cpp b/llvm/unittests/Demangle/StringViewTest.cpp deleted file mode 100644 --- a/llvm/unittests/Demangle/StringViewTest.cpp +++ /dev/null @@ -1,48 +0,0 @@ -//===- llvm/unittest/StringViewTest.cpp - StringView unit tests -----------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#include "llvm/Demangle/StringView.h" -#include "gtest/gtest.h" - -using namespace llvm; -using llvm::itanium_demangle::StringView; - -namespace llvm { -namespace itanium_demangle { - -std::ostream &operator<<(std::ostream &OS, const StringView &S) { - return OS.write(S.begin(), S.size()); -} - -} // namespace itanium_demangle -} // namespace llvm - -TEST(StringViewTest, EmptyInitializerList) { - StringView S = {}; - EXPECT_TRUE(S.empty()); - - S = {}; - EXPECT_TRUE(S.empty()); -} - -TEST(StringViewTest, Substr) { - StringView S("abcdef"); - - EXPECT_EQ("abcdef", S.substr(0)); - EXPECT_EQ("f", S.substr(5)); - EXPECT_EQ("", S.substr(6)); - - EXPECT_EQ("", S.substr(0, 0)); - EXPECT_EQ("a", S.substr(0, 1)); - EXPECT_EQ("abcde", S.substr(0, 5)); - EXPECT_EQ("abcdef", S.substr(0, 6)); - EXPECT_EQ("abcdef", S.substr(0, 7)); - - EXPECT_EQ("f", S.substr(5, 100)); - EXPECT_EQ("", S.substr(6, 100)); -}