binutils-gdb/gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas
Pierre Muller 8aae434443 Fix pascal behavior for class fields with testcase
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.
2015-04-21 22:10:08 +02:00

64 lines
1.2 KiB
ObjectPascal

{
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.