diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c3527dcfe1..3247b66f6b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2018-09-08 Joel Brobecker + + * ada-lang.c (resolve_subexp): Pass correct OPLEN in call to + replace_operator_with_call. + 2018-09-08 Joel Brobecker * ada-lang.c (ada_value_cast): Remove unnecessary parentheses. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 0a73ca48a1..b8a11cdff2 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -3515,7 +3515,7 @@ resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol)) == TYPE_CODE_FUNC)) { - replace_operator_with_call (expp, pc, 0, 0, + replace_operator_with_call (expp, pc, 0, 4, exp->elts[pc + 2].symbol, exp->elts[pc + 1].block); exp = expp->get (); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e667471602..02da57f787 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-09-08 Joel Brobecker + + * gdb.ada/expr_with_funcall: New testcase. + 2018-09-08 Joel Brobecker * gdb.ada/packed_array_assign: New testcase. diff --git a/gdb/testsuite/gdb.ada/expr_with_funcall.exp b/gdb/testsuite/gdb.ada/expr_with_funcall.exp new file mode 100644 index 0000000000..77ad6582f0 --- /dev/null +++ b/gdb/testsuite/gdb.ada/expr_with_funcall.exp @@ -0,0 +1,52 @@ +# Copyright 2018 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib "ada.exp" + +standard_ada_testfile expr_r821_013 + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/expr_r821_013.adb] +runto "expr_r821_013.adb:$bp_location" + +gdb_test "print something()" " = 124" +gdb_test "print something() + 1" " = 125" +gdb_test "print something() - 2" " = 122" +gdb_test "print something() * 3" " = 372" +gdb_test "print something() / 4" " = 31" + +gdb_test "print 1 + something()" " = 125" +gdb_test "print 246 - something()" " = 122" +gdb_test "print 3 * something()" " = 372" +gdb_test "print 496 / something()" " = 4" + +# Same as above, but without using the parentheses in the call to +# function "Something". + +gdb_test "print something" " = 124" +gdb_test "print something + 1" " = 125" +gdb_test "print something - 2" " = 122" +gdb_test "print something * 3" " = 372" +gdb_test "print something / 4" " = 31" + +gdb_test "print 1 + something" " = 125" +gdb_test "print 246 - something" " = 122" +gdb_test "print 3 * something" " = 372" +gdb_test "print 496 / something" " = 4" diff --git a/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb b/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb new file mode 100644 index 0000000000..98e9f2ea11 --- /dev/null +++ b/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb @@ -0,0 +1,23 @@ +-- Copyright 2018 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +with Pck; use Pck; + +procedure Expr_R821_013 is + Val : Integer := Something; +begin + Do_Nothing (Val'Address); -- STOP +end Expr_R821_013; + diff --git a/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb b/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb new file mode 100644 index 0000000000..901b8db622 --- /dev/null +++ b/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb @@ -0,0 +1,26 @@ +-- Copyright 2018 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +package body Pck is + function Something return Integer is + begin + return 124; + end Something; + + procedure Do_Nothing (A : System.Address) is + begin + null; + end Do_Nothing; +end Pck; diff --git a/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads b/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads new file mode 100644 index 0000000000..53cbe52367 --- /dev/null +++ b/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads @@ -0,0 +1,20 @@ +-- Copyright 2018 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +with System; +package Pck is + function Something return Integer; + procedure Do_Nothing (A : System.Address); +end Pck;