Fix cast of character to enum type in Ada
authorTom Tromey <tromey@adacore.com>
Fri, 3 May 2019 18:18:26 +0000 (12:18 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 3 May 2019 23:04:56 +0000 (17:04 -0600)
commit222a8d255834c717f1690658a9f85501a46f9403
tree181737fca35a8953bc59e915c910d0d18eaf489f
parentfcd60b848ed7619461b0b0e316201e7745cdb61d
Fix cast of character to enum type in Ada

An internal bug report points out that, when a global character enum
type is used, casting fails, like:

    (gdb) print global_char_enum'('F')
    $1 = 70

The bug here turns out to be that enumerators are qualified, so for
example the mangled name might be "pck__QU48", rather than "QU48".

This patch fixes the problem by only examining the suffix of the
enumerator.  This is ok because the type is already known, and because
the mangling scheme ensures that there won't be clashes.

Tested on x86-64 Fedora 29.

gdb/ChangeLog
2019-05-03  Tom Tromey  <tromey@adacore.com>

* ada-exp.y (convert_char_literal): Check suffix of each
enumerator.

gdb/testsuite/ChangeLog
2019-05-03  Tom Tromey  <tromey@adacore.com>

* gdb.ada/char_enum/pck.ads (Global_Enum_Type): New type.
* gdb.ada/char_enum/foo.adb: Use Global_Enum_Type.
* gdb.ada/char_enum.exp: Add test.
gdb/ChangeLog
gdb/ada-exp.y
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/char_enum.exp
gdb/testsuite/gdb.ada/char_enum/foo.adb
gdb/testsuite/gdb.ada/char_enum/pck.ads