Commit | Line | Data |
---|---|---|
e2882c85 | 1 | # Copyright 2011-2018 Free Software Foundation, Inc. |
598997c8 KS |
2 | # |
3 | # Contributed by Red Hat, originally written by Keith Seitz. | |
4 | # | |
5 | # This program is free software; you can redistribute it and/or modify | |
6 | # it under the terms of the GNU General Public License as published by | |
7 | # the Free Software Foundation; either version 3 of the License, or | |
8 | # (at your option) any later version. | |
9 | # | |
10 | # This program is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | # GNU General Public License for more details. | |
14 | # | |
15 | # You should have received a copy of the GNU General Public License | |
16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | ||
18 | # This file is part of the gdb testsuite. | |
19 | ||
20 | proc test_class {class} { | |
21 | ||
22 | # An array holding the overload types for the methods A::outer::foo | |
23 | # and A::B::inner::foo. The first element is the overloaded method | |
24 | # parameter. The second element is the expected source file number, | |
25 | # e.g. "ovsrch?.cc". | |
26 | array set tests { | |
27 | "char*" 4 | |
28 | "int" 3 | |
29 | "void" 2 | |
30 | } | |
31 | ||
32 | # Test each overload instance twice: once quoted, once unquoted | |
d8ea7931 | 33 | set conditional1 "if (a_param == 3)" |
598997c8 KS |
34 | set conditional2 "if (A::outer::func ())" |
35 | foreach ovld [array names tests] { | |
36 | set method "${class}::foo ($ovld) const" | |
0e7a53fc | 37 | set result "Breakpoint (\[0-9\]).*file .*ovsrch$tests($ovld).*" |
598997c8 KS |
38 | gdb_test "break $method" $result |
39 | gdb_test "break '$method'" $result | |
40 | ||
41 | # Also test with a conditional tacked onto the end. | |
42 | if {[string compare $ovld "void"] != 0} { | |
43 | gdb_test "break $method $conditional1" $result | |
44 | gdb_test "break '$method' $conditional1" $result | |
45 | gdb_test "break $method $conditional2" $result | |
46 | gdb_test "break '$method' $conditional2" $result | |
47 | } | |
48 | } | |
49 | ||
50 | # Test whether open parentheses are correctly identified as overload | |
51 | # information or conditional. | |
f8eba3c6 | 52 | gdb_test "break ${class}::hibob if (a_param == 3)" "Breakpoint (\[0-9\]).*" |
598997c8 KS |
53 | } |
54 | ||
55 | if { [skip_cplus_tests] } { continue } | |
56 | ||
57 | # Test for c++/11734 | |
f5f3a911 | 58 | standard_testfile ovsrch1.cc ovsrch2.cc ovsrch3.cc ovsrch4.cc |
598997c8 | 59 | |
5b362f04 | 60 | if {[prepare_for_testing "failed to prepare" $testfile \ |
f5f3a911 | 61 | [list $srcfile $srcfile2 $srcfile3 $srcfile4] {c++ debug}]} { |
598997c8 KS |
62 | return -1 |
63 | } | |
64 | ||
65 | if {![runto_main]} { | |
66 | perror "couldn't run to breakpoint" | |
67 | continue | |
68 | } | |
69 | ||
70 | # Break in A::stop_here and run tests. | |
f8eba3c6 TT |
71 | if {[gdb_breakpoint "A::stop_here"]} { |
72 | pass "break A::stop_here" | |
598997c8 KS |
73 | } |
74 | ||
f8eba3c6 TT |
75 | if {[gdb_breakpoint "'A::stop_here'"]} { |
76 | pass "break 'A::stop_here'" | |
598997c8 KS |
77 | } |
78 | ||
79 | gdb_continue_to_breakpoint "stop_here" | |
f8eba3c6 | 80 | test_class A::outer |
598997c8 KS |
81 | |
82 | # Break in A::B::stop_here_too and run tests. | |
f8eba3c6 TT |
83 | if {[gdb_breakpoint "A::B::stop_here_too"]} { |
84 | pass "break A::B::stop_here_too" | |
598997c8 KS |
85 | } |
86 | ||
f8eba3c6 TT |
87 | if {[gdb_breakpoint "'A::B::stop_here_too'"]} { |
88 | pass "break 'A::B::stop_here_too'" | |
598997c8 KS |
89 | } |
90 | ||
91 | gdb_continue_to_breakpoint "stop_here_too" | |
f8eba3c6 | 92 | test_class A::B::inner |
598997c8 KS |
93 | |
94 | gdb_exit | |
95 | return 0 |