diff options
author | Dino Radakovic <dinor@google.com> | 2024-02-08 13:52:58 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-02-08 13:54:16 -0800 |
commit | 8eadbbac42ead8b516ed0b802d2668650d9218ec (patch) | |
tree | 5e54e6d2068dae39cc96e077913499e948e1c7c7 /absl/debugging/internal/demangle_test.cc | |
parent | 36442dd87ed5f568f483f702252c6c5e6028aeb3 (diff) | |
download | abseil-8eadbbac42ead8b516ed0b802d2668650d9218ec.tar.gz abseil-8eadbbac42ead8b516ed0b802d2668650d9218ec.tar.bz2 abseil-8eadbbac42ead8b516ed0b802d2668650d9218ec.zip |
`demangle`: Parse C++20-compatible template param declarations, except those with `requires` expressions
Support for `requires` expressions will be added in a follow-up.
PiperOrigin-RevId: 605418370
Change-Id: I2c84cdf0c4599e36683b3c94dcbb173ab4fc3ee8
Diffstat (limited to 'absl/debugging/internal/demangle_test.cc')
-rw-r--r-- | absl/debugging/internal/demangle_test.cc | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index c1b61253..4e04210e 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -53,17 +53,56 @@ TEST(Demangle, FunctionTemplateWithNesting) { EXPECT_STREQ(tmp, "foo<>()"); } -TEST(Demangle, FunctionTemplateWithConstraint) { +TEST(Demangle, FunctionTemplateWithNonTypeParamConstraint) { char tmp[100]; // template <std::integral T> // int foo(T); // - // foo<Wrapper<int>(5); + // foo<int>(5); ASSERT_TRUE(Demangle("_Z3fooITkSt8integraliEiT_", tmp, sizeof(tmp))); EXPECT_STREQ(tmp, "foo<>()"); } +TEST(Demangle, FunctionTemplateWithAutoParam) { + char tmp[100]; + + // template <auto> + // void foo(); + // + // foo<1>(); + ASSERT_TRUE(Demangle("_Z3fooITnDaLi1EEvv", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "foo<>()"); +} + +TEST(Demangle, FunctionTemplateWithNonTypeParamPack) { + char tmp[100]; + + // template <int&..., typename T> + // void foo(T); + // + // foo(2); + ASSERT_TRUE(Demangle("_Z3fooITpTnRiJEiEvT0_", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "foo<>()"); +} + +TEST(Demangle, FunctionTemplateTemplateParamWithConstrainedArg) { + char tmp[100]; + + // template <typename T> + // concept True = true; + // + // template <typename T> requires True<T> + // struct Fooer {}; + // + // template <template <typename T> typename> + // void foo() {} + // + // foo<Fooer>(); + ASSERT_TRUE(Demangle("_Z3fooITtTyE5FooerEvv", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "foo<>()"); +} + // Test corner cases of boundary conditions. TEST(Demangle, CornerCases) { char tmp[10]; |