diff options
author | Michael Buch <michaelbuch12@gmail.com> | 2025-10-01 13:07:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-10-01 13:07:21 +0100 |
commit | 2a96d19ab01a4b5d992f492233f6a21d1e7cc4e0 (patch) | |
tree | d58b3804f48057d2961cb989390f1b77e8050afe /clang/lib/Serialization/ModuleCache.cpp | |
parent | a374017bbcc8191fa6b7b2939ffcb9bb831df419 (diff) | |
download | llvm-2a96d19ab01a4b5d992f492233f6a21d1e7cc4e0.zip llvm-2a96d19ab01a4b5d992f492233f6a21d1e7cc4e0.tar.gz llvm-2a96d19ab01a4b5d992f492233f6a21d1e7cc4e0.tar.bz2 |
[lldb][CPlusPlusLanguage] Avoid redundant const char* -> StringRef roundtrip (#161499)
We've been seen (very sporadic) lifetime issues around this area. Here's
an example backtrace:
```
[ 8] 0x0000000188e56743 libsystem_platform.dylib`_sigtramp + 55
[ 9] 0x00000001181e041f LLDB`lldb_private::CPlusPlusLanguage::SymbolNameFitsToLanguage(lldb_private::Mangled) const [inlined] unsigned long std::1::constexpr_strlen[abi:nn200100]<char>(char const*) + 7 at constexpr_c_functions.h:63:10
[ 9] 0x00000001181e0418 LLDB`lldb_private::CPlusPlusLanguage::SymbolNameFitsToLanguage(lldb_private::Mangled) const [inlined] std::__1::char_traits<char>::length[abi:nn200100](char const*) at char_traits.h:232:12
[ 9] 0x00000001181e0418 LLDB`lldb_private::CPlusPlusLanguage::SymbolNameFitsToLanguage(lldb_private::Mangled) const [inlined] llvm::StringRef::StringRef(char const*) at StringRef.h:90:33
[ 9] 0x00000001181e0418 LLDB`lldb_private::CPlusPlusLanguage::SymbolNameFitsToLanguage(lldb_private::Mangled) const [inlined] llvm::StringRef::StringRef(char const*) at StringRef.h:92:38
[ 9] 0x00000001181e0418 LLDB`lldb_private::CPlusPlusLanguage::SymbolNameFitsToLanguage(lldb_private::Mangled) const + 20 at CPlusPlusLanguage.cpp:68:62
```
Looks like we're calling `strlen` on a nullptr. I stared at this
codepath for a while but am still not sure how that could happen unless
the underlying `ConstString` somehow pointed to corrupted data.
But `SymbolNameFitsToLanguage` does some roundtripping through a `const
char*` before calling `GetManglingScheme`. No other callsite does this
and it just seems redundant.
This patch cleans this up.
rdar://161128180
Diffstat (limited to 'clang/lib/Serialization/ModuleCache.cpp')
0 files changed, 0 insertions, 0 deletions