diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l index a0c9816e568..c6ce1aec53a 100644 --- a/gdb/ada-lex.l +++ b/gdb/ada-lex.l @@ -227,7 +227,7 @@ false { return FALSEKEYWORD; } /* ATTRIBUTES */ -{TICK}[a-z][a-z_]+ { BEGIN INITIAL; return processAttribute (yytext+1); } +{TICK}[a-z][a-z_]+ { BEGIN INITIAL; return processAttribute (yytext); } /* PUNCTUATION */ @@ -663,6 +663,11 @@ attributes[] = { static int processAttribute (const char *str) { + gdb_assert (*str == '\''); + ++str; + while (isspace (*str)) + ++str; + for (const auto &item : attributes) if (strcasecmp (str, item.name) == 0) return item.code; diff --git a/gdb/testsuite/gdb.ada/formatted_ref.exp b/gdb/testsuite/gdb.ada/formatted_ref.exp index bb5f78c0d72..882dbf17725 100644 --- a/gdb/testsuite/gdb.ada/formatted_ref.exp +++ b/gdb/testsuite/gdb.ada/formatted_ref.exp @@ -70,13 +70,15 @@ proc test_p_x_addr { var addr } { global gdb_prompt foreach attr {access unchecked_access unrestricted_access} { - set test "print/x $var'$attr" - gdb_test_multiple $test $test { - -re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" { - pass $test - } - -re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" { - fail "$test (prints unexpected address)" + foreach space {"" " "} { + set test "print/x $var'$space$attr" + gdb_test_multiple $test $test { + -re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" { + pass $test + } + -re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" { + fail "$test (prints unexpected address)" + } } } }