aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2024-04-20 10:44:13 -0600
committerTom Tromey <tom@tromey.com>2024-05-14 13:28:40 -0600
commit3b099df59c47c4f09da0941c096098dde00a87dc (patch)
treed898ec57b7a7c2443d554b7ec0452fa6350408ff /gdb
parenta4b7c5f5cda16795dd8be11494e8f1b5de21d69f (diff)
downloadgdb-3b099df59c47c4f09da0941c096098dde00a87dc.zip
gdb-3b099df59c47c4f09da0941c096098dde00a87dc.tar.gz
gdb-3b099df59c47c4f09da0941c096098dde00a87dc.tar.bz2
Allow function types as template parameters in name canonicalizer
This adds function types as template parameters in the C++ name canonicalizer. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11907 Approved-By: John Baldwin <jhb@FreeBSD.org>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/cp-name-parser.y4
-rw-r--r--gdb/cp-support.c7
2 files changed, 4 insertions, 7 deletions
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
index c0138ef..cf3e8bf 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -596,6 +596,7 @@ template_arg : typespec_2
| '&' '(' start ')'
{ $$ = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), $3); }
| exp
+ | function
;
function_args : typespec_2
@@ -2062,6 +2063,9 @@ canonicalize_tests ()
should_be_the_same ("x::y::z<0b111>", "x::y::z<0D7>");
should_be_the_same ("x::y::z<0xff'ff>", "x::y::z<65535>");
+
+ should_be_the_same ("something<void ()>", "something< void() >");
+ should_be_the_same ("something<void ()>", "something<void (void)>");
}
#endif
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index 536dbc4..bd714ad 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -2186,15 +2186,8 @@ test_cp_remove_params ()
CHECK_INCOMPL ("A::foo<(anonymous namespace)::B",
"A::foo");
- /* Shouldn't this parse? Looks like a bug in
- cp_demangled_name_to_comp. See PR c++/22411. */
-#if 0
CHECK ("A::foo<void(int)>::func(int)",
"A::foo<void(int)>::func");
-#else
- CHECK_INCOMPL ("A::foo<void(int)>::func(int)",
- "A::foo");
-#endif
CHECK_INCOMPL ("A::foo<void(int",
"A::foo");