diff options
author | Dino Radakovic <dinor@google.com> | 2024-02-13 20:56:28 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-02-13 20:57:21 -0800 |
commit | c14dfbf9c1759c39bf4343b9e54a43975fbba930 (patch) | |
tree | 0400df4eba10f37251c1df5413ca2a7c464c1736 /absl/debugging/internal/demangle_test.cc | |
parent | 0a362eb290044fa39f6c6a120e4627ff9998e55b (diff) | |
download | abseil-c14dfbf9c1759c39bf4343b9e54a43975fbba930.tar.gz abseil-c14dfbf9c1759c39bf4343b9e54a43975fbba930.tar.bz2 abseil-c14dfbf9c1759c39bf4343b9e54a43975fbba930.zip |
`demangle`: Parse optional single template argument for built-in types
The optional single template argument for built-in types is not documented in LLVM's comments that list the grammar, but it is [intentionally implemented](https://github.com/llvm/llvm-project/commit/4bc4d51c18d5c087dfbdad1753c84bba8dbf3be0).
PiperOrigin-RevId: 606843797
Change-Id: Ib5ef1983812e9ea68a39fe64b87b6ad6ce81b93c
Diffstat (limited to 'absl/debugging/internal/demangle_test.cc')
-rw-r--r-- | absl/debugging/internal/demangle_test.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index 86e66886..555e5908 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -150,6 +150,38 @@ TEST(Demangle, FunctionTemplateTemplateParamWithConstrainedArg) { EXPECT_STREQ(tmp, "foo<>()"); } +TEST(Demangle, NonTemplateBuiltinType) { + char tmp[100]; + + // void foo(__my_builtin_type t); + // + // foo({}); + ASSERT_TRUE(Demangle("_Z3foou17__my_builtin_type", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "foo()"); +} + +TEST(Demangle, SingleArgTemplateBuiltinType) { + char tmp[100]; + + // template <typename T> + // __my_builtin_type<T> foo(); + // + // foo<int>(); + ASSERT_TRUE(Demangle("_Z3fooIiEu17__my_builtin_typeIT_Ev", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "foo<>()"); +} + +TEST(Demangle, FailsOnTwoArgTemplateBuiltinType) { + char tmp[100]; + + // template <typename T, typename U> + // __my_builtin_type<T, U> foo(); + // + // foo<int, char>(); + ASSERT_FALSE( + Demangle("_Z3fooIicEu17__my_builtin_typeIT_T0_Ev", tmp, sizeof(tmp))); +} + // Test corner cases of boundary conditions. TEST(Demangle, CornerCases) { char tmp[10]; |