rZhBoYao created this revision. rZhBoYao added reviewers: clayborg, wallace, JDevlieghere. rZhBoYao added a project: LLDB. rZhBoYao requested review of this revision. Herald added a subscriber: lldb-commits.
Mangled::operator! claimes to be true if the object has an empty mangled and unmangled name, false otherwise, but it was actually true if the object has an empty mangled name. Luckily, this operator doesn't have a lot of users. The broken logical not operator causes PR52702 <https://llvm.org/PR52702> as https://reviews.llvm.org/D106837 used Mangled::operator! in Symbol::SynthesizeNameIfNeeded. For example, consider the symbol "puts" in a hello world C program: // Inside Symbol::SynthesizeNameIfNeeded (lldb) p m_mangled (lldb_private::Mangled) $0 = (m_mangled = None, m_demangled = "puts") (lldb) p !m_mangled (bool) $1 = true # should be false!! This leads to Symbol::SynthesizeNameIfNeeded overwriting m_demangled part of Mangled (in this case "puts"). In conclusion, this patch turns `callq 0x401030 ; symbol stub for: ___lldb_unnamed_symbol36` back into `callq 0x401030 ; symbol stub for: puts` . Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D116217 Files: lldb/source/Core/Mangled.cpp Index: lldb/source/Core/Mangled.cpp =================================================================== --- lldb/source/Core/Mangled.cpp +++ lldb/source/Core/Mangled.cpp @@ -86,7 +86,7 @@ // Mangled mangled(...); // if (!file_spec) // { ... -bool Mangled::operator!() const { return !m_mangled; } +bool Mangled::operator!() const { return !m_mangled && !m_demangled; } // Clear the mangled and demangled values. void Mangled::Clear() {
Index: lldb/source/Core/Mangled.cpp =================================================================== --- lldb/source/Core/Mangled.cpp +++ lldb/source/Core/Mangled.cpp @@ -86,7 +86,7 @@ // Mangled mangled(...); // if (!file_spec) // { ... -bool Mangled::operator!() const { return !m_mangled; } +bool Mangled::operator!() const { return !m_mangled && !m_demangled; } // Clear the mangled and demangled values. void Mangled::Clear() {
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits