diff options
| author | Pavel Labath <labath@google.com> | 2016-08-18 08:21:38 +0000 |
|---|---|---|
| committer | Pavel Labath <labath@google.com> | 2016-08-18 08:21:38 +0000 |
| commit | 9361c439e8cef6fcc87edefbc3389ad1160984fd (patch) | |
| tree | fe439cc09665f2c94650ee80761045963f9eebfc /lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp | |
| parent | 6ee4f905dce7c4fde389f8e06c89b463fcbf68ac (diff) | |
| download | bcm5719-llvm-9361c439e8cef6fcc87edefbc3389ad1160984fd.tar.gz bcm5719-llvm-9361c439e8cef6fcc87edefbc3389ad1160984fd.zip | |
Fix parsing of complicated C++ names
Summary:
CPlusPlusLanguage::MethodName was not correctly parsing templated functions whose demangled name
included the return type -- the space before the function name was included in the "context" and
the context itself was not terminated correctly due to a misuse of the substr function (second
argument is length, not the end position). Fix that and add a regression test.
Reviewers: clayborg
Subscribers: lldb-commits
Differential Revision: https://reviews.llvm.org/D23608
llvm-svn: 279038
Diffstat (limited to 'lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp')
| -rw-r--r-- | lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp b/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp new file mode 100644 index 00000000000..8b3cd50bbbf --- /dev/null +++ b/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp @@ -0,0 +1,41 @@ +//===-- CPlusPlusLanguageTest.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(CPlusPlusLanguage, MethodName) +{ + struct TestCase { + std::string input; + std::string context, basename, arguments, qualifiers, scope_qualified_name; + }; + + TestCase test_cases[] = {{"foo::bar(baz)", "foo", "bar", "(baz)", "", "foo::bar"}, + {"std::basic_ostream<char, std::char_traits<char> >& " + "std::operator<<<std::char_traits<char> >" + "(std::basic_ostream<char, std::char_traits<char> >&, char const*)", + "std", "operator<<<std::char_traits<char> >", + "(std::basic_ostream<char, std::char_traits<char> >&, char const*)", "", + "std::operator<<<std::char_traits<char> >"}}; + + for (const auto &test: test_cases) + { + CPlusPlusLanguage::MethodName method(ConstString(test.input)); + EXPECT_TRUE(method.IsValid()); + EXPECT_EQ(test.context, method.GetContext()); + EXPECT_EQ(test.basename, method.GetBasename()); + EXPECT_EQ(test.arguments, method.GetArguments()); + EXPECT_EQ(test.qualifiers, method.GetQualifiers()); + EXPECT_EQ(test.scope_qualified_name, method.GetScopeQualifiedName()); + } +} |

