diff options
author | Siva Chandra <sivachandra@chromium.org> | 2014-10-18 06:14:00 -0700 |
---|---|---|
committer | Siva Chandra <sivachandra@chromium.org> | 2014-11-03 18:01:39 -0800 |
commit | e0f52461c2467b6610391681fa27cd9b3c5def57 (patch) | |
tree | dd366cad441389a5483994a0c6ad2454464ac4e2 /gdb/testsuite/gdb.cp/pr17494.exp | |
parent | f868b157aa4079bcdcb482b6b6634b5df8f74dbd (diff) | |
download | gdb-e0f52461c2467b6610391681fa27cd9b3c5def57.zip gdb-e0f52461c2467b6610391681fa27cd9b3c5def57.tar.gz gdb-e0f52461c2467b6610391681fa27cd9b3c5def57.tar.bz2 |
Fix evaluation of method calls under EVAL_SKIP.
When evaluating method calls under EVAL_SKIP, the "object" and the
arguments to the method should also be evaluated under EVAL_SKIP,
instead of skipping to evaluate them as was being done previously.
gdb/ChangeLog:
PR c++/17494
* eval.c (evaluate_subexp_standard): Evaluate the "object" and
the method args also under EVAL_SKIP when evaluating method
calls under EVAL_SKIP.
gdb/testsuite/ChangeLog:
PR c++/17494
* gdb.cp/pr17494.cc: New file.
* gdb.cp/pr17494.exp: New file.
Diffstat (limited to 'gdb/testsuite/gdb.cp/pr17494.exp')
-rw-r--r-- | gdb/testsuite/gdb.cp/pr17494.exp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.cp/pr17494.exp b/gdb/testsuite/gdb.cp/pr17494.exp new file mode 100644 index 0000000..7f2e0cf --- /dev/null +++ b/gdb/testsuite/gdb.cp/pr17494.exp @@ -0,0 +1,57 @@ +# Copyright 2014 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 <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite + +if {[skip_cplus_tests]} { continue } + +standard_testfile .cc + +if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} { + return -1 +} + +if {![runto_main]} { + return -1 +} + +gdb_breakpoint [gdb_get_line_number "Break here"] +gdb_continue_to_breakpoint "Break here" + +gdb_test "p a.geta()" ".* = 12345" "a.geta()" +gdb_test "p a_ptr->geta()" ".* = 12345" "a.geta()" + +gdb_test "p false ? a.geta() : 123" ".* = 123" "ternop 1" +gdb_test "p false ? a_ptr->geta() : 123" ".* = 123" "ternop 2" +gdb_test "p (true ? 123 : a.geta()) + 123" ".* = 246" "ternop 3" +gdb_test "p (true ? 123 : a_ptr->geta()) + 123" ".* = 246" "ternop 4" +gdb_test "p false ? (a.*m1)() : 123" ".* = 123" "ternop 5" +gdb_test "p false ? (a_ptr->*m1)() : 123" ".* = 123" "ternop 6" +gdb_test "p (true ? 123 : (a.*m1)()) + 123" ".* = 246" "ternop 7" +gdb_test "p (true ? 123 : (a_ptr->*m1)()) + 123" ".* = 246" "ternop 8" + +gdb_test "p false ? a.adda(456) : 123" ".* = 123" "ternop 9" +gdb_test "p false ? a_ptr->adda(456) : 123" ".* = 123" "ternop 10" +gdb_test "p (true ? 123 : a.adda(456)) + 123" ".* = 246" "ternop 11" +gdb_test "p (true ? 123 : a_ptr->adda(456)) + 123" ".* = 246" "ternop 12" +gdb_test "p false ? (a.*m2)(123) : 123" ".* = 123" "ternop 13" +gdb_test "p false ? (a_ptr->*m2)(123) : 123" ".* = 123" "ternop 14" +gdb_test "p (true ? 123 : (a.*m2)(123)) + 123" ".* = 246" "ternop 15" +gdb_test "p (true ? 123 : (a_ptr->*m2)(123)) + 123" ".* = 246" "ternop 16" + +gdb_test "p false ? (a.*(&A::f))(1, 2) : 123" ".* = 123" "ternop 17" +gdb_test "p false ? (a_ptr->*(&A::f))(1, 2) : 123" ".* = 123" "ternop 18" +gdb_test "p (true ? 123 : (a.*(&A::f))(1, 2)) + 123" ".* = 246" "ternop 19" +gdb_test "p (true ? 123 : (a_ptr->*(&A::f))(1, 2)) + 123" ".* = 246" "ternop 20" |