[Demangle] convert itaniumDemangle and nonMicrosoftDemangle to use std::string_view
authorNick Desaulniers <ndesaulniers@google.com>
Fri, 2 Jun 2023 21:53:46 +0000 (14:53 -0700)
committerNick Desaulniers <ndesaulniers@google.com>
Fri, 2 Jun 2023 21:53:49 +0000 (14:53 -0700)
commit61e1c3d80db6e94e8b5b83b3819afefeec4d357b
treeda734d13540b240a385abf5746732140ef12a502
parentfa98bdbd95d14959d3c6c09a4c29ba0d974883dd
[Demangle] convert itaniumDemangle and nonMicrosoftDemangle to use std::string_view

D149104 converted llvm::demangle to use std::string_view. Enabling
"expensive checks" (via -DLLVM_ENABLE_EXPENSIVE_CHECKS=ON) causes
lld/test/wasm/why-extract.s to fail. The reason for this is obscure:

Reason #10007 why std::string_view is dangerous:
Consider the following pattern:

  std::string_view s = ...;
  const char *c = s.data();
  std::strlen(c);

Is c a NUL-terminated C style string? It depends; but if it's not then
it's not safe to call std::strlen on the std::string_view::data().
std::string_view::length() should be used instead.

Fixing this fixes the one lone test that caught this.

microsoftDemangle, rustDemangle, and dlangDemangle should get this same
treatment, too. I will do that next.

Reviewed By: MaskRay, efriedma

Differential Revision: https://reviews.llvm.org/D149675
llvm/include/llvm/Demangle/Demangle.h
llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
llvm/lib/Demangle/Demangle.cpp
llvm/lib/Demangle/ItaniumDemangle.cpp
llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp
llvm/tools/llvm-nm/llvm-nm.cpp
llvm/tools/llvm-opt-report/OptReport.cpp