Browse Source
Problem reported as PR pascal/17815 Part 1/3: Remember the case pattern that allowed finding a field of this. File gdb/p-exp.y modified This is the fix in the pascal parser (p-exp.y), to avoid the error that GDB does find normal variables case insensitively, but not fields of this, inside a class or object method. Part 2/3: Add "class" option for pascal compiler File gdb/testsuite/lib/pascal.exp This part of the patch series is unchanged. It adds class option to pascal compiler which adds the required command line option to accept pascal class types. Part 3/3: New file: gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp New file: gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas Here is an updated version of this test, using Pedro's suggestions. Test to check that PR 17815 is fixed.gdb-7.10-branch
6 changed files with 157 additions and 4 deletions
@ -0,0 +1,58 @@ |
|||
# Copyright 2015 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/>. |
|||
|
|||
load_lib "pascal.exp" |
|||
|
|||
standard_testfile .pas |
|||
|
|||
if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug class]] != "" } { |
|||
untested $testfile.exp |
|||
return -1 |
|||
} |
|||
|
|||
clean_restart ${testfile} |
|||
set bp_location [gdb_get_line_number "set breakpoint here"] |
|||
|
|||
if { ![runto ${srcfile}:${bp_location}] } { |
|||
return 0 |
|||
} |
|||
|
|||
# We are now inside CHECK method. |
|||
gdb_test "p X" " = 67" |
|||
gdb_test "p B.X" " = 11" |
|||
gdb_test "p Y" " = 33" |
|||
gdb_test "p B.Y" " = 35" |
|||
# As A is global, we can also check its value. |
|||
gdb_test "p A.X" " = 67" |
|||
gdb_test "p A.Y" " = 33" |
|||
# Now test lowercase version. |
|||
gdb_test "p x" " = 67" |
|||
gdb_test "p y" " = 33" |
|||
gdb_test "p B.x" " = 11" |
|||
gdb_test "p B.y" " = 35" |
|||
# As A is global, we can also check its value, with lowercase. |
|||
gdb_test "p A.x" " = 67" |
|||
gdb_test "p A.y" " = 33" |
|||
# Also test lowercase class names. |
|||
gdb_test "p b.X" " = 11" |
|||
gdb_test "p b.x" " = 11" |
|||
gdb_test "p b.Y" " = 35" |
|||
gdb_test "p b.y" " = 35" |
|||
gdb_test "p a.X" " = 67" |
|||
gdb_test "p a.x" " = 67" |
|||
gdb_test "p a.Y" " = 33" |
|||
gdb_test "p a.y" " = 33" |
|||
|
|||
gdb_exit |
|||
@ -0,0 +1,63 @@ |
|||
{ |
|||
Copyright 2015 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/>. |
|||
} |
|||
|
|||
|
|||
program test_gdb_17815; |
|||
|
|||
|
|||
type |
|||
TA = class |
|||
public |
|||
x, y : integer; |
|||
constructor Create; |
|||
function check(b : TA) : boolean; |
|||
destructor Done; virtual; |
|||
end; |
|||
|
|||
constructor TA.Create; |
|||
begin |
|||
x:=-1; |
|||
y:=-1; |
|||
end; |
|||
|
|||
destructor TA.Done; |
|||
begin |
|||
end; |
|||
|
|||
function TA.check (b : TA) : boolean; |
|||
begin |
|||
check:=(x < b.x); { set breakpoint here } |
|||
end; |
|||
|
|||
|
|||
|
|||
var |
|||
a, b : TA; |
|||
|
|||
begin |
|||
a:=TA.Create; |
|||
b:=TA.Create; |
|||
a.x := 67; |
|||
a.y := 33; |
|||
b.x := 11; |
|||
b.y := 35; |
|||
if a.check (b) then |
|||
writeln('Error in check') |
|||
else |
|||
writeln('check OK'); |
|||
end. |
|||
|
|||
Loading…
Reference in new issue