diff options
author | Tom Tromey <tromey@adacore.com> | 2021-03-15 08:20:24 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2021-03-15 08:20:24 -0600 |
commit | 6813ceb03f889f4ed0dd163866b6eaa42a097838 (patch) | |
tree | 312d1f2933bda27b6b1d5a1195d567687c3561d3 /gdb/ada-exp.y | |
parent | 3b5c4de0cf93667ffc98f112db7dcbea92292e32 (diff) | |
download | gdb-6813ceb03f889f4ed0dd163866b6eaa42a097838.zip gdb-6813ceb03f889f4ed0dd163866b6eaa42a097838.tar.gz gdb-6813ceb03f889f4ed0dd163866b6eaa42a097838.tar.bz2 |
Fix unary + in Ada
My previous Ada patches introduced a bug that I found after checkin.
I had incorrectly implemented unary +. There was a test for the
overloaded case, but no test for the ordinary case.
This patch adds the tests and fixes the bug.
Tested on x86-64 Fedora 32.
gdb/ChangeLog
2021-03-15 Tom Tromey <tromey@adacore.com>
* ada-exp.y (simple_exp): Always push a result for unary '+'.
gdb/testsuite/ChangeLog
2021-03-15 Tom Tromey <tromey@adacore.com>
* gdb.ada/fixed_points.exp: Add tests of unary + and -.
Diffstat (limited to 'gdb/ada-exp.y')
-rw-r--r-- | gdb/ada-exp.y | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y index e8ffb8e..146b1ac 100644 --- a/gdb/ada-exp.y +++ b/gdb/ada-exp.y @@ -589,12 +589,14 @@ simple_exp : '+' simple_exp %prec UNARY operation_up arg = ada_pop (); operation_up empty; - /* We only need to handle the overloading - case here, not anything else. */ + /* If an overloaded operator was found, use + it. Otherwise, unary + has no effect and + the argument can be pushed instead. */ operation_up call = maybe_overload (UNOP_PLUS, arg, empty); if (call != nullptr) - pstate->push (std::move (call)); + arg = std::move (call); + pstate->push (std::move (arg)); } ; |