Re: [Lldb-commits] [PATCH] D17618: Improve looking up functions with equivalent mangled names.
spyffe requested changes to this revision. spyffe added a comment. This revision now requires changes to proceed. I'm concerned about the performance implications here, because `FindBestAlternateMangledName` is invoked for every C++ symbol lookup, not just for ones that would fail unless we did this workaround. We have a `ColectFallbackNames` function in IRExecutionUnit.cpp to try hackier approaches if the simple approaches don't work. Would it be feasible to make this farily heavyweight search part of the fallback names mechanism? http://reviews.llvm.org/D17618 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [PATCH] D17618: Improve looking up functions with equivalent mangled names.
clayborg resigned from this revision. clayborg removed a reviewer: clayborg. clayborg added a comment. Sean should be the one to OK this. http://reviews.llvm.org/D17618 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [PATCH] D17618: Improve looking up functions with equivalent mangled names.
sivachandra updated this revision to Diff 49138. sivachandra added a comment. Add more gtest unittests. http://reviews.llvm.org/D17618 Files: include/lldb/Symbol/SymbolFile.h packages/Python/lldbsuite/test/lang/cpp/stl/TestSTL.py packages/Python/lldbsuite/test/lang/cpp/stl/main.cpp source/Expression/IRExecutionUnit.cpp source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h source/Symbol/SymbolFile.cpp unittests/CMakeLists.txt unittests/Language/CMakeLists.txt unittests/Language/CPlusPlus/CMakeLists.txt unittests/Language/CPlusPlus/SplitIntoArgsTest.cpp unittests/Language/CPlusPlus/TypeNamesEqualityTest.cpp Index: unittests/Language/CPlusPlus/TypeNamesEqualityTest.cpp === --- /dev/null +++ unittests/Language/CPlusPlus/TypeNamesEqualityTest.cpp @@ -0,0 +1,32 @@ +//===-- ScalarTest.cpp --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "gtest/gtest.h" + +#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" + +using namespace lldb_private; + +TEST(TypeNamesEqualTest, Equality) +{ +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("int *", "int*")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("unsigned int *", "unsigned int*")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int", "unsigned int const")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int *", "unsigned int const *")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("unsigned int * const", "unsigned int * const")); +} + +TEST(TypeNamesEqualTest, InEquality) +{ +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("int *", "short int*")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("unsigned int *", "unsigned int")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int", "int const")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int *", "unsigned int * const")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("unsigned int const *", "unsigned int * const")); +} Index: unittests/Language/CPlusPlus/SplitIntoArgsTest.cpp === --- /dev/null +++ unittests/Language/CPlusPlus/SplitIntoArgsTest.cpp @@ -0,0 +1,25 @@ +//===-- ScalarTest.cpp --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "gtest/gtest.h" + +#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" + +using namespace lldb_private; + +TEST(SplitIntoArgumentsTest, Equality) +{ +llvm::StringRef input = "(std::basic_string, std::basic_string )"; +std::vector args; + +CPlusPlusLanguage::SplitIntoArguments(input, args); +ASSERT_EQ(args.size(), static_cast(2)); +ASSERT_STREQ(args[0].c_str(), "std::basic_string "); +ASSERT_STREQ(args[1].c_str(), "std::basic_string "); +} Index: unittests/Language/CPlusPlus/CMakeLists.txt === --- /dev/null +++ unittests/Language/CPlusPlus/CMakeLists.txt @@ -0,0 +1,6 @@ +add_lldb_unittest(LLDBCPlusCPlusLanguageTests + TypeNamesEqualityTest.cpp + SplitIntoArgsTest.cpp + ) + + target_link_libraries(lldbPluginCPlusPlusLanguage) Index: unittests/Language/CMakeLists.txt === --- /dev/null +++ unittests/Language/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(CPlusPlus) Index: unittests/CMakeLists.txt === --- unittests/CMakeLists.txt +++ unittests/CMakeLists.txt @@ -28,5 +28,6 @@ add_subdirectory(Expression) add_subdirectory(Host) add_subdirectory(Interpreter) +add_subdirectory(Language) add_subdirectory(ScriptInterpreter) add_subdirectory(Utility) Index: source/Symbol/SymbolFile.cpp === --- source/Symbol/SymbolFile.cpp +++ source/Symbol/SymbolFile.cpp @@ -135,7 +135,10 @@ } void -SymbolFile::GetMangledNamesForFunction(const std::string _qualified_name, std::vector _names) +SymbolFile::GetMangledNamesForFunction(const SymbolContext , +
Re: [Lldb-commits] [PATCH] D17618: Improve looking up functions with equivalent mangled names.
sivachandra updated this revision to Diff 49098. sivachandra added a comment. Fix a comment in file, fix formatting in another. http://reviews.llvm.org/D17618 Files: include/lldb/Symbol/SymbolFile.h packages/Python/lldbsuite/test/lang/cpp/stl/TestSTL.py packages/Python/lldbsuite/test/lang/cpp/stl/main.cpp source/Expression/IRExecutionUnit.cpp source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h source/Symbol/SymbolFile.cpp unittests/CMakeLists.txt unittests/Language/CMakeLists.txt unittests/Language/CPlusPlus/CMakeLists.txt unittests/Language/CPlusPlus/TypeNamesEqualityTest.cpp Index: unittests/Language/CPlusPlus/TypeNamesEqualityTest.cpp === --- /dev/null +++ unittests/Language/CPlusPlus/TypeNamesEqualityTest.cpp @@ -0,0 +1,32 @@ +//===-- ScalarTest.cpp --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "gtest/gtest.h" + +#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" + +using namespace lldb_private; + +TEST(TypeNamesEqualTest, Equality) +{ +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("int *", "int*")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("unsigned int *", "unsigned int*")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int", "unsigned int const")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int *", "unsigned int const *")); +ASSERT_TRUE(CPlusPlusLanguage::TypeNamesEqual("unsigned int * const", "unsigned int * const")); +} + +TEST(TypeNamesEqualTest, InEquality) +{ +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("int *", "short int*")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("unsigned int *", "unsigned int")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int", "int const")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("const unsigned int *", "unsigned int * const")); +ASSERT_FALSE(CPlusPlusLanguage::TypeNamesEqual("unsigned int const *", "unsigned int * const")); +} Index: unittests/Language/CPlusPlus/CMakeLists.txt === --- /dev/null +++ unittests/Language/CPlusPlus/CMakeLists.txt @@ -0,0 +1,5 @@ +add_lldb_unittest(LLDBCPlusCPlusLanguageTests + TypeNamesEqualityTest.cpp + ) + + target_link_libraries(lldbPluginCPlusPlusLanguage) Index: unittests/Language/CMakeLists.txt === --- /dev/null +++ unittests/Language/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(CPlusPlus) Index: unittests/CMakeLists.txt === --- unittests/CMakeLists.txt +++ unittests/CMakeLists.txt @@ -28,5 +28,6 @@ add_subdirectory(Expression) add_subdirectory(Host) add_subdirectory(Interpreter) +add_subdirectory(Language) add_subdirectory(ScriptInterpreter) add_subdirectory(Utility) Index: source/Symbol/SymbolFile.cpp === --- source/Symbol/SymbolFile.cpp +++ source/Symbol/SymbolFile.cpp @@ -135,7 +135,10 @@ } void -SymbolFile::GetMangledNamesForFunction(const std::string _qualified_name, std::vector _names) +SymbolFile::GetMangledNamesForFunction(const SymbolContext , + const std::string _qualified_name, + const std::vector , + std::vector _names) { return; } Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h === --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -209,7 +209,9 @@ lldb_private::SymbolContextList& sc_list) override; void -GetMangledNamesForFunction (const std::string _qualified_name, +GetMangledNamesForFunction (const lldb_private::SymbolContext& sc, +const std::string _qualified_name, +const std::vector , std::vector _names) override; uint32_t Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp === --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -2966,7 +2966,9 @@ } void -SymbolFileDWARF::GetMangledNamesForFunction (const std::string _qualified_name,