]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.cp/nextoverthrow.exp
* lib/gdb.exp (skip_unwinder_tests): New proc.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.cp / nextoverthrow.exp
1 # Copyright 2008-2012 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16
17 if { [skip_cplus_tests] } { continue }
18
19 standard_testfile .cc
20
21 # Create and source the file that provides information about the compiler
22 # used to compile the test case.
23 if [get_compiler_info "c++"] {
24 untested nextoverthrow.exp
25 return -1
26 }
27
28 if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
29 return -1
30 }
31
32 if ![runto_main] then {
33 perror "couldn't run to main"
34 continue
35 }
36
37 if {![skip_unwinder_tests]} {
38 unsupported "nextoverthrow.exp could not find _Unwind_DebugHook"
39 return -1
40 }
41
42 # Set a temporary breakpoint and then continue to it.
43 # The breakpoint is set according to a marker in the file.
44 proc tbreak_and_cont {text} {
45 global testfile
46
47 set line [gdb_get_line_number $text $testfile.cc]
48 gdb_breakpoint "$testfile.cc:$line" temporary
49 gdb_test "continue" "Temporary breakpoint.*" "continuing to $text"
50 }
51
52 # Verify the value of testval.
53 proc verify_testval {name value} {
54 gdb_test "print testval == $value" " = true" $name
55 }
56
57 # See http://sourceware.org/bugzilla/show_bug.cgi?id=9593
58 # Our general approach here is to do some operation, verify
59 # that testval has not changed, continue to the location at
60 # which the next test starts, and verify testval again.
61 # This works around platform differences in debuginfo that
62 # make looking at the source line unreliable.
63
64 # A simple test of next over a throw.
65 tbreak_and_cont "Start: first test"
66 gdb_test "next" ".*" "next over a throw 1"
67 tbreak_and_cont "End: first test"
68 verify_testval "pre-check - next over a throw 1" -1
69
70 tbreak_and_cont "Start: nested throw"
71 verify_testval "post-check - next over a throw 1" 0
72 gdb_test "next" ".*" "next over a throw 2"
73 tbreak_and_cont "End: nested throw"
74 verify_testval "pre-check - next over a throw 2" 0
75
76 tbreak_and_cont "Start: step in test"
77 verify_testval "post-check - next over a throw 2" 1
78 gdb_test "step" "function1().*" "step into function2 1"
79 gdb_test "next" ".*" "next over a throw 3"
80 tbreak_and_cont "End: step in test"
81 verify_testval "pre-check - next over a throw 3" 1
82
83 tbreak_and_cont "Start: next past catch"
84 verify_testval "post-check - next over a throw 3" 2
85 gdb_test "next" ".*" "next past catch"
86 tbreak_and_cont "End: next past catch"
87 verify_testval "pre-check - next past catch" 2
88
89 tbreak_and_cont "Start: rethrow"
90 verify_testval "post-check - next past catch" 3
91 gdb_test "next" ".*" "next over a throw 4"
92 tbreak_and_cont "End: rethrow"
93 verify_testval "pre-check - next over a throw 4" 3
94
95 tbreak_and_cont "Start: first finish"
96 verify_testval "post-check - next over a throw 4" 4
97 gdb_test "step" "function1().*" "step into function2 2"
98 gdb_test "finish" ".*" "finish 1"
99 tbreak_and_cont "End: first finish"
100 verify_testval "pre-check - finish 1" 4
101
102 tbreak_and_cont "Start: second finish"
103 verify_testval "post-check - finish 1" 5
104 gdb_test "step" "function1 ().*" "step into finish method"
105 gdb_test "finish" ".*" "finish 2"
106 tbreak_and_cont "End: second finish"
107 verify_testval "pre-check - finish 2" 5
108
109 tbreak_and_cont "Start: first until"
110 verify_testval "post-check - finish 2" 6
111 gdb_test "step" ".*" "step into finish, for until"
112 gdb_test "until" ".*" "until with no argument 1"
113 set line [gdb_get_line_number "marker for until" $testfile.cc]
114 gdb_test "until $line" "function1 ().*" "next past catch 6"
115 gdb_test "until" ".*" "until with no argument 2"
116 tbreak_and_cont "End: first until"
117 verify_testval "pre-check - until 1" 6
118
119 tbreak_and_cont "Start: second until"
120 verify_testval "post-check - until 1" 7
121 set line [gdb_get_line_number "until here" $testfile.cc]
122 gdb_test "step" "function1 ().*" "step into until"
123 gdb_test "until $line" ".*" "until-over-throw"
124 tbreak_and_cont "End: second until"
125 verify_testval "pre-check - until 2" 7
126
127 tbreak_and_cont "Start: advance"
128 verify_testval "post-check - until 2" 8
129 gdb_test "step" "function1 ().*" "step into until, for advance"
130 gdb_test "advance $line" ".*" "advance-over-throw"
131 tbreak_and_cont "End: advance"
132 verify_testval "pre-check - advance" 8
133
134 tbreak_and_cont "Start: resumebpt"
135 gdb_test "tbreak _Unwind_RaiseException"
136 gdb_test "continue" "Temporary breakpoint.*" "continuing to _Unwind_RaiseException"
137 gdb_test "finish" "Run till exit .*"
138 gdb_test {set $retpc=$pc}
139 gdb_test {break *$retpc if dummy ()}
140 tbreak_and_cont "Second: resumebpt"
141 gdb_test "next"
142
143 tbreak_and_cont "done"
144 verify_testval "post-check - advance" 10