Add spaceship operator to cp-name-parser.y While debugging gdb, I saw this: During symbol reading: unexpected demangled name 'operator<=><std::chrono::_V2::system_clock, std::chrono::duration<long int>, std::chrono::duration<long int> >' This happens because cp-name-parser.y does not handle the spaceship operator. This patch implements this. Approved-By: John Baldwin <jhb@FreeBSD.org>
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y index cf3e8bf..9d0085d 100644 --- a/gdb/cp-name-parser.y +++ b/gdb/cp-name-parser.y
@@ -297,7 +297,7 @@ %left '^' %left '&' %left EQUAL NOTEQUAL -%left '<' '>' LEQ GEQ +%left '<' '>' LEQ GEQ SPACESHIP %left LSH RSH %left '@' %left '+' '-' @@ -451,6 +451,8 @@ { $$ = state->make_operator ("<=", 2); } | OPERATOR GEQ { $$ = state->make_operator (">=", 2); } + | OPERATOR SPACESHIP + { $$ = state->make_operator ("<=>", 2); } | OPERATOR ANDAND { $$ = state->make_operator ("&&", 2); } | OPERATOR OROR @@ -1077,6 +1079,10 @@ { $$ = state->d_binary (">=", $1, $3); } ; +exp : exp SPACESHIP exp + { $$ = state->d_binary ("<=>", $1, $3); } + ; + exp : exp '<' exp { $$ = state->d_binary ("<", $1, $3); } ; @@ -1779,6 +1785,7 @@ return c; case '<': HANDLE_TOKEN3 ("<<=", ASSIGN_MODIFY); + HANDLE_TOKEN3 ("<=>", SPACESHIP); HANDLE_TOKEN2 ("<=", LEQ); HANDLE_TOKEN2 ("<<", LSH); state->lexptr++; @@ -2049,6 +2056,14 @@ } static void +should_parse (const char *name) +{ + std::string err; + auto parsed = cp_demangled_name_to_comp (name, &err); + SELF_CHECK (parsed != nullptr); +} + +static void canonicalize_tests () { should_be_the_same ("short int", "short"); @@ -2066,6 +2081,8 @@ should_be_the_same ("something<void ()>", "something< void() >"); should_be_the_same ("something<void ()>", "something<void (void)>"); + + should_parse ("void whatever::operator<=><int, int>"); } #endif