fpc/tests/test/tstprocv.pp
fpc 790a4fe2d3 * log and id tags removed
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00

78 lines
1.4 KiB
ObjectPascal

{ %FAIL }
{ this compilation should fail
because an ansitring should not be allowed
as equivalent to a normal short string
for procvars PM }
{$mode fpc}
{$H-}
uses
strings;
Type
type_error_proc = procedure (Const St : String);
Const
error_proc : type_error_proc = nil;
has_errors : boolean = false;
var
st : string;
ast : ansistring;
pst : pchar;
procedure string_error_proc(const err : string);
begin
{$ifdef DEBUG}
writeln('String error proc: ',err);
{$endif DEBUG}
if err<>st then
has_errors:=true;
end;
procedure ansistring_error_proc(const err : ansistring);
begin
{$ifdef DEBUG}
writeln('Ansistring error proc: ',err);
{$endif DEBUG}
if err<>ast then
has_errors:=true;
end;
procedure pchar_error_proc(const err : pchar);
begin
{$ifdef DEBUG}
writeln('Pchar error proc: ',err);
{$endif DEBUG}
if strcomp(err,pst)<>0 then
has_errors:=true;
end;
begin
st:='direct short string';
string_error_proc(st);
ast:='direct ansistring';
ansistring_error_proc(ast);
pst:='direct short string';
pchar_error_proc(pst);
error_proc:=@string_error_proc;
st:='short string via procvar';
error_proc(st);
error_proc:=@ansistring_error_proc;
ast:='ansistring via procvar';
error_proc(ast);
error_proc:=@pchar_error_proc;
pst:='pchar via procvar';
error_proc(pst);
if has_errors then
begin
Writeln('Wrong code is generated');
halt(1);
end;
end.