* new testsuite setup

This commit is contained in:
peter 2000-11-29 23:14:10 +00:00
parent d8d3c08e63
commit c5dcb7d36d
650 changed files with 27084 additions and 0 deletions

1231
tests/Makefile Normal file

File diff suppressed because it is too large Load Diff

104
tests/Makefile.fpc Normal file
View File

@ -0,0 +1,104 @@
#
# Makefile.fpc for Free Pascal Tests directory
#
[defaults]
defaultrule=alltests
[rules]
.PHONY: all units tests cont_tests
# Unix like OS ?
ifeq ($(OS_TARGET),linux)
INUNIX=1
endif
ifeq ($(OS_TARGET),freebsd)
INUNIX=1
endif
# For linux by default no graph tests
ifdef INUNIX
NOGRAPH=1
endif
#
# Tools
#
ifndef LONGLOG
export LONGLOG:=longlog
endif
ifndef LOG
export LOG:=log
endif
units : units/$(FPCMADE)
units/$(FPCMADE):
$(MAKE) -C units
DOTEST=dotest$(EXEEXT)
$(DOTEST) : utils/dotest.pp utils/redir.pp
$(FPC) -Fu../units -FE. utils/dotest
testcheck: units $(DOTEST)
#
# Test run targets
#
DIRS=webtbs webtbf tbs tbf test testopt
all : alltests
tests : clean all_compilations
cont_tests : all_compilations
%.log : %.pp
$(DOTEST) $<
%.elg : %.pp
$(DOTEST) -e $<
alltbs : testcheck $(patsubst %.pp,%.log,$(wildcard tbs/*.pp))
alltbf : testcheck $(patsubst %.pp,%.log,$(wildcard tbf/*.pp))
allwebtbs : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/*.pp))
allwebtbf : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/*.pp))
alltest : testcheck $(patsubst %.pp,%.log,$(wildcard test/*.pp))
alltestopt : testcheck $(patsubst %.pp,%.log,$(wildcard testopt/*.pp))
alltests: alltest alltbs alltbf allwebtbs allwebtbf
clean:
-rm -f $(addsuffix /*$(PPUEXT),$(DIRS))
-rm -f $(addsuffix /*$(OEXT),$(DIRS))
-rm -f $(addsuffix /*.rst,$(DIRS))
-rm -f $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-rm -f $(addsuffix /*.log,$(DIRS))
-rm -f $(addsuffix /*.elg,$(DIRS))
ifdef INUNIX
-rm -f $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
else
-rm -f $(addsuffix /*$(EXEEXT),$(DIRS))
endif
-rm -f *.tmp
-rm -f $(LOG) $(LONGLOG) fail
-rm -f ppas.sh ppas.bat
full : clean all_compilations allexec
info :
@echo This Makefile allows to test the compiler
@echo compilation of 'ts*.pp' should succeed
@echo compilation of 'tf*.pp' should fail
@echo compilation of 'test*.pp' should succeed
@echo 'to*.pp' files should also compile
@echo simply run \'make tests\' to test all compilation
@echo run \'make allexec\' to test also if the executables
@echo created behave like the should
@echo run \'make tesiexec\' to test executables
@echo that require interactive mode

9
tests/tbf/tb1.pp Normal file
View File

@ -0,0 +1,9 @@
{ Old file: tbf0008.pp }
{ tests the crash when decrementing constants OK 0.9.2 }
const
compilerconst=1;
begin
dec(compilerconst);
end.

6
tests/tbf/tb10.pp Normal file
View File

@ -0,0 +1,6 @@
{ Old file: tbf0085.pp }
{ shows runerror 216 OK 0.99.1 (CEC) }
Begin
writeln(l);
end.

18
tests/tbf/tb11.pp Normal file
View File

@ -0,0 +1,18 @@
{ Old file: tbf0086.pp }
{ shows runerror 216 OK 0.99.1 (CEC) }
var
v: word;
w: shortint;
z: byte;
y: integer;
type
zz: shortint = 255;
Begin
y:=64000;
z:=32767;
w:=64000;
v:=-1;
end.

18
tests/tbf/tb12.pp Normal file
View File

@ -0,0 +1,18 @@
{ Old file: tbf0087.pp }
{ shows internal error 12 - no more SegFaults OK 0.99.1 (FK) }
{
BP Error message is 'Pointer variable Expected'
}
type
tobj=object
l : longint;
constructor init;
end;
var
o : tobj;
begin
new(o); {This will create a internal error 9999}
new(o,init); {This will create a Segfault and Core Dump under linux}
end.

6
tests/tbf/tb13.pp Normal file
View File

@ -0,0 +1,6 @@
{ Old file: tbf0088.pp }
{ internal error 12 or Runerror 216 OK 0.99.1 (FK) }
Begin
typeof(x1); { Gives out an internal error -- better then 9999 though }
end.

6
tests/tbf/tb14.pp Normal file
View File

@ -0,0 +1,6 @@
{ Old file: tbf0089.pp }
{ internal error 12 or Runerror 216 OK 0.99.1 (FK) }
Begin
sizeof(x);
end.

8
tests/tbf/tb15.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0094.pp }
{ internal error when recordtype not found with case OK 0.99.1 }
begin
case textrec(l).mode of
1 ;
end;
end.

42
tests/tbf/tb16.pp Normal file
View File

@ -0,0 +1,42 @@
{ Old file: tbf0097.pp }
{ two errors in bp7 but not in FPC OK 0.99.6 (FK) }
{
This compiles fine with FPC, but not with Bp7 see 2 comments
}
type
t=object
s : string; { No ; needed ? }
procedure p;
end;
t2=object(t)
procedure p1(p : string);
end;
procedure t2.p1(p : string);
begin
end;
procedure t.p;
var
s : longint; { Not allowed with BP7 }
x : longint;
procedure nested;
var
s : longint;
begin
end;
begin
end;
begin
end.

10
tests/tbf/tb17.pp Normal file
View File

@ -0,0 +1,10 @@
{ Old file: tbf0100.pp }
{ a unit may only occure once in uses OK 0.99.6 (PM) }
unit tbs0100;
interface
uses dos;
implementation
uses dos; { Not Allowed in BP7}
end.

21
tests/tbf/tb18.pp Normal file
View File

@ -0,0 +1,21 @@
{ Old file: tbf0101.pp }
{ no type checking for routines in interfance and OK 0.99.1 (CEC) }
Unit tbs0101;
Interface
Procedure MyProc(V: Integer);
Implementation
Procedure MyProc(Y: Integer);
Begin
end;
end.

8
tests/tbf/tb19.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0108.pp }
{ gives wrong error message OK 0.99.1 (PFV) }
uses
dos,
;
begin
end.

9
tests/tbf/tb2.pp Normal file
View File

@ -0,0 +1,9 @@
{ Old file: tbf0010.pp }
{ tests string constants exceeding lines OK 0.9.2 }
program hello;
begin
writeln('Hello);
end.

12
tests/tbf/tb20.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0109.pp }
{ syntax error not detected when using a set as pointer OK 0.99.1 (FK) }
Type T = (aa,bb,cc,dd,ee,ff,gg,hh);
Tset = set of t;
Var a: Tset;
Begin
If (aa in a^) Then begin end;
{it seems that correct code is generated, but the syntax is wrong}
End.

8
tests/tbf/tb21.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0110.pp }
{ SigSegv when using undeclared var in Case OK 0.99.6 (PFV) }
Begin
Case Pai(hp1)^.typ Of
ait_instruction:
End
End.

24
tests/tbf/tb22.pp Normal file
View File

@ -0,0 +1,24 @@
{ Old file: tbf0117.pp }
{ internalerror 17 (and why is there an automatic float OK 0.99.6 (FK) }
var
i: word;
j: integer;
Begin
i:=65530;
i:=i+1; { CF check }
i:=i-1;
i:=i*5;
i:=i/5;
i:=i shl 5;
i:=i shr 5;
Inc(i); { no check }
j:=32765; { OV check }
j:=j+1;
inc(j);
j:=j-1;
j:=j*5;
j:=j div 5;
j:=j shl 5;
j:=j shr 5;
end.

20
tests/tbf/tb23.pp Normal file
View File

@ -0,0 +1,20 @@
{ Old file: tbf0127.pp }
{ problem with cdecl in implementation part OK 0.99.7 (PFV) }
unit tbf0127;
interface
procedure x(l : longint);
implementation
procedure crash;
begin
x(1234); { called with pascal calling conventions }
end;
procedure x(l : longint);external;cdecl;
end.

12
tests/tbf/tb24.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0136.pp }
{ No types necessary in the procedure header OK 0.99.6 (PFV) }
{
No type declaration necessary ????
}
procedure p(handle1,handle2);
begin
end;
begin
end.

23
tests/tbf/tb25.pp Normal file
View File

@ -0,0 +1,23 @@
{ Old file: tbf0148.pp }
{ crash when setting function result of a declared but not yet implemented function in another function }
unit test;
interface
Function t(a: Byte): byte;
Function DoT(b: byte): Byte;
implementation
Function t(a: Byte): Byte;
var f: byte;
Begin
DoT := f;
End;
Function DoT(b: byte): Byte;
Begin
End;
end.

13
tests/tbf/tb26.pp Normal file
View File

@ -0,0 +1,13 @@
{ Old file: tbf0151.pp }
{ crash when using undeclared variable in withstatement OK 0.99.7 (PFV) }
type tr = record
l1, l2: longint
end;
var r: tr;
begin
with r do
inc(l)
end.

20
tests/tbf/tb27.pp Normal file
View File

@ -0,0 +1,20 @@
{ Old file: tbf0153.pp }
{ Asm, indexing a local/para var should produce an error like tp7 OK 0.99.9 (PFV) }
{$asmmode att}
procedure asmfunc(p:pointer);assembler;
asm
{
this is changed into movl %eax,(%ebx+8) which is not correct, and tp7
also doesn't allow 'mov p[bx],ax' or 'mov p+bx,ax'
Solution: for parameters and locals the index must be turned off
Don't forget to check the intel assembler also
}
movl %eax,p(%ebx)
end;
begin
end.

20
tests/tbf/tb28.pp Normal file
View File

@ -0,0 +1,20 @@
{ Old file: tbf0155.pp }
{ Asm, Missing string return for asm functions }
{ this is not a real bug but rather a feature :
assembler function are only accepted for
simple return values
i.e. either in register or FPU (PM) }
{ so for the moment this is rejected code ! }
function asmstr:string;assembler;
asm
movl __RESULT,%edi
movl $0x4101,%al
stosw
end;
begin
writeln(asmstr);
end;

20
tests/tbf/tb29.pp Normal file
View File

@ -0,0 +1,20 @@
{ Old file: tbf0157.pp }
{ Invalid compilation and also crashes OK 0.99.7 (PFV) }
{ this should be rejected because we only accept integer args }
program write_it;
var x,y:real;
i : longint;
s : string;
begin
x:=5.6;
y:=45.789;
write(y:2:3,' ',x:3:4);
write(i:5);
s:='short';
write(s:11);
write(i:5:2);
write(s:25:3);
write(x:5.2);
end.

15
tests/tbf/tb3.pp Normal file
View File

@ -0,0 +1,15 @@
{ Old file: tbf0029.pp }
{ tests typeof(object type) OK 0.99.1 (FK) }
type
TA = object
end;
var
P: Pointer;
begin
{ must fail on compilation because
TA has no VMT }
P := pointer(TypeOf(TA));
end.

11
tests/tbf/tb30.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0158.pp }
{ Invalid boolean typecast OK 0.99.7 (PFV) }
program tmp;
var
Molo :Boolean;
begin
Molo := 1; { This should give out a Type mismatch error ! }
end.

14
tests/tbf/tb31.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0161.pp }
{ internal error when trying to create a set with another OK 0.99.9 (PFV) }
Program tbs0161;
{the following program should give a syntax error, but causes an internal error}
const s = [1,2,3,4,5];
var b: Byte;
Begin
If b in [s] then;
End.

17
tests/tbf/tb32.pp Normal file
View File

@ -0,0 +1,17 @@
{ Old file: tbf0164.pp }
{ crash when using undeclared array index in with statement OK 0.99.8 (PFV) }
type t1r = record
a, b: Byte;
end;
t2r = record
l1, l2: Array[1..4] Of t1r;
end;
Var r: t2r;
begin
with r.l1[counter] Do
Inc(a)
end.

13
tests/tbf/tb33.pp Normal file
View File

@ -0,0 +1,13 @@
{ Old file: tbf0166.pp }
{ forward type used in declaration crashes instead of error OK 0.99.9 (PFV) }
type
punknown=^unknown;
t=object
procedure p(i:unknown);
end;
begin
end.

12
tests/tbf/tb34.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0167.pp }
{ crash when declaring a procedure with same name as object OK 0.99.9 (PFV) }
type ObjTest = Object
End;
Procedure ObjTest;
Begin
end;
Begin
end.

9
tests/tbf/tb35.pp Normal file
View File

@ -0,0 +1,9 @@
{ Old file: tbf0168.pp }
{ set:=set+element is allowed (should be: set:=set+[element]) OK 0.99.9 (PFV) }
var bset: set of 0..31;
b: byte;
Begin
bset := bset + b;
End.

14
tests/tbf/tb36.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0172.pp }
{ with with absolute seg:ofs should not be possible OK 0.99.9 (PM) }
type
rec=record
a : longint;
end;
var
r1 : rec absolute $40:$49;
begin
with r1 do
a:=1;
end.

12
tests/tbf/tb37.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0173.pp }
{ secondbugs is parsed as asm, but should be normal pascalcode OK 0.99.9 (PFV) }
var
secondbug : word;
procedure p;assembler;
begin
if secondbug=0 then;
end;
begin
end.

13
tests/tbf/tb38.pp Normal file
View File

@ -0,0 +1,13 @@
{ Old file: tbf0175.pp }
{ Asm, mov word,%eax should not be allowed without casting emits a warning (or error with range checking enabled) OK 0.99.11 (PM) }
{ this will just give out an error }
{$asmmode att}
{$R+}
var
w : word;
begin
asm
movl w,%ecx
end;
end.

12
tests/tbf/tb39.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0186.pp }
{ Erroneous array syntax is accepted. OK 0.99.9 (PFV) }
program bug0186;
var
endline:^integer;
line:array [1..endline^] of ^char;
begin
new (endline);
endline^:=5;
endline^:=10;
end.

12
tests/tbf/tb4.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0036.pp }
{ assigning a single character to array of char ?OK 0.9.9 }
program bug0036;
{Discovered by Daniel Mantione.}
var a:array[0..31] of char;
begin
a:=' '; {Incorrect Pascal statement, but why a protection error?}
end.

12
tests/tbf/tb40.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0196.pp }
{ "function a;" is accepted (should require result type) OK 0.99.1 (PM) }
Program bug0195;
function a;
begin
end;
begin
a
end.

16
tests/tbf/tb41.pp Normal file
View File

@ -0,0 +1,16 @@
{ Old file: tbf0197.pp }
{ should produce an error: problem with c1:=c2<c3 where c? is OK 0.99.11 (PM) a comp type }
var i : DWord;
c1, c2 : comp;
begin
c1 := 20000; c2 := 100;
i := 0;
repeat
inc(i);
c1 := (abs(3*c1)-c2) < c2; { notice this !!! :) :) }
until (i > 1000);
Writeln(c1);
end.

34
tests/tbf/tb42.pp Normal file
View File

@ -0,0 +1,34 @@
{ Old file: tbf0205.pp }
{ and parsing bugs, generates wrong code (tp7 gives parser error) OK 0.99.11 (PM) }
program bug_show;
{ By PAV (pavsoft@usa.net) }
function bad_uppercase(s:string):string;
var i:integer;
begin
for i:=1 to length(s) do
if (ord(s[i])>=97 and ord(s[i])<=122) then s[i]:=chr(ord(s[i])-97+65);
bad_uppercase:=s;
end;
function good_uppercase(s:string):string;
var i:integer;
begin
for i:=1 to length(s) do
if (ord(s[i])>=97) and (ord(s[i])<=122) then s[i]:=chr(ord(s[i])-97+65);
good_uppercase:=s;
end;
const cadena='Free Paskal Compiler 0.99.8 !!! (bug)';
begin
writeln('This is the original string before convert it');
writeln(cadena);
writeln();
writeln('This is a bad result, using "if ( and )"');
writeln(bad_uppercase(cadena));
writeln();
writeln('This is a good result, using "if () and ()"');
writeln(good_uppercase(cadena));
writeln();
end.

14
tests/tbf/tb43.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0208.pp }
{ implicit conversion from boolean to longint should not be allowed }
program tbf0208;
{ implicit boolean to integer conversion should not be
allowed }
var
b : boolean;
i : longint;
begin
b:=true;
i:=b;
end.

16
tests/tbf/tb44.pp Normal file
View File

@ -0,0 +1,16 @@
{ Old file: tbf0219.pp }
{ wrong error message OK 0.99.11 (PFV) }
{ Should give '(' expected in line 6 }
const
replaces=4;
replacetab : array[1..replaces,1..2] of string[32]=(
':',' or colon',
'mem8','mem or bits8',
'mem16','mem or bits16',
'mem32','mem or bits32'
)
begin
end.

17
tests/tbf/tb45.pp Normal file
View File

@ -0,0 +1,17 @@
{ Old file: tbf0230.pp }
{ several strange happen on the ln function: ln(0): no FPE and writeln can't write non numeric values Gives out an exception on compiling because of zero div OK 0.99.11 (PM) }
{$ifdef go32v2}
uses
dpmiexcp;
{$endif}
var
e : extended;
begin
e:=-1.0;
writeln(ln(0));
writeln(power(0,1.0));
writeln(ln(e));
end .

20
tests/tbf/tb46.pp Normal file
View File

@ -0,0 +1,20 @@
{ Old file: tbf0231.pp }
{ Problem with comments OK 0.99.11 (PFV) }
{$undef dummy}
{$ifdef DUMMY}
(* <= this should not be considered as a
higher comment level !!
test
{$endif dummy}
var
e : extended;
begin
e:=1.0;
writeln(ln(e));
end.

11
tests/tbf/tb47.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0234.pp }
{ New with void pointer OK 0.99.11 (PM) }
program bug0232;
var p:pointer;
begin
new(p);
dispose(p);
end.

14
tests/tbf/tb48.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0242.pp }
{ Crash when passing a procedure to formal parameter OK 0.99.11 (PM) }
procedure p;
begin
end;
procedure p1(var x);
begin
end;
begin
p1(p);
end.

29
tests/tbf/tb49.pp Normal file
View File

@ -0,0 +1,29 @@
{ Old file: tbf0245.pp }
{ assigning pointers to address of consts is allowed (refused by BP !) OK 0.99.13 (PFV) }
const
r = 3.5;
s = 'test idiot';
type
preal = ^real;
pstring = ^string;
procedure ss;
begin
end;
var
p : pointer;
pr : preal;
ps : pstring;
begin
p:=@ss;
p:=@s;
pr:=@r;
ps:=@s;
pr^:=7.8;
ps^:='test3';
Writeln('r=',r,' s=',s);
end.

14
tests/tbf/tb5.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0049.pp }
{ shows an error while defining subrange types OK 0.99.7 (PFV) }
type
days = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);
weekend = Sat..Sun;
var
w : weekend;
begin
w:=5;
{$message the line before should produce an error }
end.

16
tests/tbf/tb50.pp Normal file
View File

@ -0,0 +1,16 @@
{ Old file: tbf0246.pp }
{ const para can be changed without error OK 0.99.13 (PFV) }
type
tref=record
ofs : longint;
end;
procedure p(const ref:tref);
begin
with ref do
ofs:=ofs+1; { This should issue an error, because ref is const ! }
end;
begin
end.

11
tests/tbf/tb51.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0248.pp }
{ Asm, Wrong assembler code accepted by new assembler reader OK 0.99.11 (PFV) }
{$asmmode att}
begin
asm
call *%eax // this is correct
movl %esi,*%eax
end;
end.

24
tests/tbf/tb52.pp Normal file
View File

@ -0,0 +1,24 @@
{ Old file: tbf0265.pp }
{ nested proc with for-counter in other lex level OK 0.99.13 (PFV) }
PROGRAM t9;
PROCEDURE Eeep;
VAR
X: BYTE;
NewNG: STRING;
PROCEDURE SubProc;
BEGIN
newng := 'alt';
FOR X := 1 TO LENGTH(NewNG) DO BEGIN
WRITELN(X);
END;
END;
BEGIN
SubProc;
END;
BEGIN
Eeep;
END.

11
tests/tbf/tb53.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0269.pp }
{ wrong linenumber for repeat until when type mismatch OK 0.99.12b (PM) }
{ No idea how I could test this !! PM }
{ we should parse the compiler output !! }
{ Wrong line number for error message }
begin
repeat
writeln('test');
until sptr;
end.

39
tests/tbf/tb54.pp Normal file
View File

@ -0,0 +1,39 @@
{ Old file: tbf0272.pp }
{ No error issued if wrong parameter in function inside a second function OK 0.99.13 (PFV) }
program test_const_string;
const
conststring = 'Constant string';
function astring(s :string) : string;
begin
astring:='Test string'+s;
end;
procedure testvar(var s : string);
begin
writeln('testvar s is "',s,'"');
end;
procedure testconst(const s : string);
begin
writeln('testconst s is "',s,'"');
end;
procedure testvalue(s : string);
begin
writeln('testvalue s is "',s,'"');
end;
const
s : string = 'test';
begin
testvalue(astring('e'));
testconst(astring(s));
testconst(conststring);
testvar(conststring);{ refused a compile time }
end.

22
tests/tbf/tb55.pp Normal file
View File

@ -0,0 +1,22 @@
{ Old file: tbf0281.pp }
{ dup id checking with property is wrong }
{$mode objfpc}
type
test_one = class
protected
fTest : String;
public
property Test: String READ fTest WRITE fTest;
procedure Testen(Test: BOolean);
{ ^ duplicate identifier? }
end;
procedure test_one.testen(test: boolean);
begin
end;
begin
end.

12
tests/tbf/tb56.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0284.pp }
{ wrong file position with dup id in other unit OK 0.99.13 (PFV) }
uses tbs0284b;
{$HINTS ON}
type
o2=object(o1)
p : longint;
end;
begin
end.

14
tests/tbf/tb57.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0298.pp }
{ l1+l2:=l1+l2 gives no error OK 0.99.13 (PFV) }
program test_loc_mem;
{$ifdef go32v2}
uses
dpmiexcp;
{$endif go32v2}
var l1,l2 : longint;
begin
l1+l2:=l1+l2;
end.

7
tests/tbf/tb58.pp Normal file
View File

@ -0,0 +1,7 @@
{ Old file: tbf0300.pp }
{ crash if method on non existing object is parsed (form bugs 651) OK 0.99.13 (PFV) }
procedure nonexistent_class_or_object.method; begin end;
begin
end.

11
tests/tbf/tb59.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0301.pp }
{ crash if destructor without object name is parsed OK 0.99.13 (PFV) }
Program bug0301;
destructor done;
begin
end;
begin
end.

24
tests/tbf/tb6.pp Normal file
View File

@ -0,0 +1,24 @@
{ Old file: tbf0060.pp }
{ shows missing type checking for case statements OK 0.99.1 (CEC) }
Program Test;
{ No errors -- problems is due to the fact that the rules for type
compatibility (p.47 language guide) -- are not respected, in other words
in case statements there is no type checking whatsoever in fpc!!
I think that these are separate cases:
1st case) s32bit,u32bit,u8bit,s8bit,s16bit,u16bit
2nd case) uchar
3rd case) bool8bit
These are not /should not be compatible with each other in a case
statement imho - CEC
}
var
myvar:char;
Begin
case myvar of
1: ;
#2: ;
end;
end.

13
tests/tbf/tb60.pp Normal file
View File

@ -0,0 +1,13 @@
{ Old file: tbf0310.pp }
{ local and para dup are not detected OK 0.99.15 (FK) }
procedure p(s:string);
var
s : string;
begin
writeln(s);
end;
begin
p('test');
end.

14
tests/tbf/tb61.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbf0311.pp }
{ No dup id checking in variant records OK 0.99.15 (FK) }
type
tsplitextended = record
case byte of
0: (a: array[0..9] of byte);
{ the following "a" should give a duplicate identifier error }
1: (a: array[0..4] of word);
2: (a: array[0..1] of cardinal; w: word);
end;
begin
end.

12
tests/tbf/tb62.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0314.pp }
{ }
procedure p(var b);
begin
end;
var
s : string;
begin
p(@s[1]);
end.

8
tests/tbf/tb63.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0315.pp }
{ }
begin
asm
movl $%1000, %eax
end;
end.

30
tests/tbf/tb64.pp Normal file
View File

@ -0,0 +1,30 @@
{ Old file: tbf0320.pp }
{ }
{$ifdef fpc}{$mode delphi}{$endif}
{ These should give an error, as also done in tp,delphi.
See tbs0319.pp for a test with class which should compile in
delphi mode }
type
cl=object
k : longint;
procedure p1;
procedure p2;
end;
procedure cl.p1;
var
k : longint;
begin
end;
procedure cl.p2;
var
p1 : longint;
begin
end;
begin
end.

9
tests/tbf/tb65.pp Normal file
View File

@ -0,0 +1,9 @@
{ Old file: tbf0323.pp }
{ }
{$ifdef fpc}{$mode delphi}{$endif}
type
TA = (aOne := 1, aTwo, aThree, aFour, aSix);
begin
end.

13
tests/tbf/tb66.pp Normal file
View File

@ -0,0 +1,13 @@
{ Old file: tbf0324.pp }
{ }
{$ifdef fpc}{$mode delphi}{$endif}
function k2:longint;
var
result : word;
begin
end;
begin
end.

17
tests/tbf/tb67.pp Normal file
View File

@ -0,0 +1,17 @@
{ Old file: tbf0325.pp }
{ }
{$ifdef fpc}{$mode delphi}{$endif}
function k2(result:word):longint;
begin
end;
function k3(l:word):longint;
var
result : word;
begin
end;
begin
end.

9
tests/tbf/tb68.pp Normal file
View File

@ -0,0 +1,9 @@
{ Old file: tbf0326.pp }
{ }
{$mode delphi}
const
anyconst = %11111;
begin
end.

24
tests/tbf/tb69.pp Normal file
View File

@ -0,0 +1,24 @@
{ Old file: tbf0328.pp }
{ }
{$ifdef fpc}{$mode delphi}{$endif}
procedure k1(l:longint);
begin
end;
procedure k1(l:string);overload;
begin
end;
procedure k2(l:longint);overload;
begin
end;
procedure k2(l:string);
begin
end;
begin
end.

6
tests/tbf/tb7.pp Normal file
View File

@ -0,0 +1,6 @@
{ Old file: tbf0061.pp }
{ shows wrong errors when compiling (NOT A bugs) OK 0.99.1 }
Begin
55ms;
end.

8
tests/tbf/tb70.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0342.pp }
{ }
type
WORD=word;
begin
end.

12
tests/tbf/tb71.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0343.pp }
{ }
{$mode delphi}
type
TListEntry = record
Next: ^TListEntry; (*<-- Error message here*)
Data: Integer;
end;
begin
end.

8
tests/tbf/tb72.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0345.pp }
{ }
var
WORD : array[1..2] of word;
begin
end.

12
tests/tbf/tb73.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0347.pp }
{ }
{$mode delphi}
type x = ^longint;
var y:x;
begin
y [5]:=5;
end.

17
tests/tbf/tb74.pp Normal file
View File

@ -0,0 +1,17 @@
{ Old file: tbf0349.pp }
{ }
{$mode delphi}
type
TCl=class;
const
b=1;
type
TCL=class
end;
begin
end.

12
tests/tbf/tb75.pp Normal file
View File

@ -0,0 +1,12 @@
{ %OPT=-Sew }
{ Old file: tbf0351.pp }
{$MACRO OFF}
{ The next line should give a Warning that macro support not has
been turned on }
{$define mac1 := writeln('test')}
begin
end.

18
tests/tbf/tb76.pp Normal file
View File

@ -0,0 +1,18 @@
{ Old file: tbf0352.pp }
{ }
{$ifdef fpc}{$MODE OBJFPC}{$endif}
Procedure Proc1(args:array of const);
begin
end;
Procedure Proc2(args:array of longint);
Begin
{ this should give an error }
Proc1(args);
End;
Begin
Proc1([0,1]);
End.

12
tests/tbf/tb77.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0353.pp }
{ }
{ $version >= 1.1}
type
ti = interface
private
procedure p;
end;
begin
end.

11
tests/tbf/tb78.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0354.pp }
{ }
{ $version >= 1.1}
type
ti = interface
constructor create;
end;
begin
end.

11
tests/tbf/tb79.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0355.pp }
{ }
{ $version >= 1.1}
type
ti = interface
destructor destroy;
end;
begin
end.

8
tests/tbf/tb8.pp Normal file
View File

@ -0,0 +1,8 @@
{ Old file: tbf0071.pp }
{ shows that an unterminated constant string in a writeln() statement crashes the compiler. }
program tbf0071;
begin
writeln ('
end.

11
tests/tbf/tb80.pp Normal file
View File

@ -0,0 +1,11 @@
{ Old file: tbf0356.pp }
{ }
{ $version >= 1.1}
type
ti = interface
l : longint;
end;
begin
end.

12
tests/tbf/tb81.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0357.pp }
{ }
{ $version >= 1.1}
type
ti = interface
protected
procedure p;
end;
begin
end.

12
tests/tbf/tb82.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0358.pp }
{ }
{ $version >= 1.1}
type
ti = interface
public
procedure p;
end;
begin
end.

12
tests/tbf/tb83.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbf0359.pp }
{ }
{ $version >= 1.1}
type
ti = interface
published
procedure p;
end;
begin
end.

18
tests/tbf/tb84.pp Normal file
View File

@ -0,0 +1,18 @@
{ Old file: tbf0360.pp }
{ }
procedure myproc;
var
a: word;
a: word;
a: word;
a: word;
a: word;
begin
a := 1;
writeln (a);
end;
begin
myproc;
end.

34
tests/tbf/tb85.pp Normal file
View File

@ -0,0 +1,34 @@
{ Old file: tbf0361.pp }
{ }
type
ExecProc = Procedure;
type
MenuItem = record
Caption: String[32];
Exec: ExecProc;
end;
Procedure AddItem(ACaption: String; AExec: ExecProc; var Item: MenuItem);
begin
Item.Caption:=ACaption;
Item.Exec:=AExec;
end;
Procedure ExecFirstItem;
begin
Writeln('Result of "Item 1"');
end;
var M1,M2,M3: MenuItem;
Ep: ExecProc;
begin
AddItem('Item 1',Nil,M1);
Ep:=ExecFirstItem; // should give error in fpc mode
AddItem('Item 2',Ep,M2);
AddItem('Item 3',@ExecFirstItem,M3);
end.

11
tests/tbf/tb86.pp Normal file
View File

@ -0,0 +1,11 @@
type
r=record
a :longint;
end;
var
w : ^r;
begin
if w^<>$1111 then
writeln;
end.

8
tests/tbf/tb87.pp Normal file
View File

@ -0,0 +1,8 @@
var
i,j : longint;
begin
i:=longint;
j:=i*word+j*shortint;
j:= 15 +5*i +(i*i)+sqr(word);
end.

10
tests/tbf/tb88.pp Normal file
View File

@ -0,0 +1,10 @@
{$mode objfpc}
label l;
begin
try
goto l;
finally
end;
l:
end.

10
tests/tbf/tb89.pp Normal file
View File

@ -0,0 +1,10 @@
{$mode objfpc}
label l;
begin
try
finally
l:
end;
goto l;
end.

34
tests/tbf/tb9.pp Normal file
View File

@ -0,0 +1,34 @@
{ Old file: tbf0075.pp }
{ shows invalid pchar output to console OK 0.99.1 }
Unit tbs0075;
Interface
Procedure MyTest;Far; { IMPLEMENTATION expected error. }
{ Further information: NEAR IS NOT ALLOWED IN BORLAND PASCAL }
{ Therefore the bugfix should only be for the FAR keyword. }
Procedure MySecondTest;
Implementation
{ near and far are not allowed here, but maybe we don't care since they are ignored by }
{ FPC. }
Procedure MyTest;
Begin
end;
Procedure MySecondTest;Far;Forward;
Procedure MySecondTest;Far;
Begin
end;
end.

10
tests/tbf/tb90.pp Normal file
View File

@ -0,0 +1,10 @@
{$mode objfpc}
label l;
begin
try
except
goto l;
end;
l:
end.

14
tests/tbf/tb91.pp Normal file
View File

@ -0,0 +1,14 @@
{$mode objfpc}
uses
sysutils;
label l;
begin
try
except
on e : exception do
goto l;
end;
l:
end.

20
tests/tbf/tb92.pp Normal file
View File

@ -0,0 +1,20 @@
{$mode objfpc}
type
tc1 = class
l : longint;
property p : longint read l;
end;
tc2 = class(tc1)
{ in Delphi mode }
{ parameters can have the same name as properties }
procedure p1(p : longint);
end;
procedure tc2.p1(p : longint);
begin
end;
begin
end.

20
tests/tbf/tb93.pp Normal file
View File

@ -0,0 +1,20 @@
type
obj = object
procedure method1;
procedure method2;
end;
procedure obj.method1;
procedure obj.method2;
begin
end;
begin
end;
begin
end.

23
tests/tbf/tb94.pp Normal file
View File

@ -0,0 +1,23 @@
{$mode objfpc}
type
to1 = class
procedure p;virtual;
end;
to2 = class(to1)
function p : longint;override;
end;
procedure to1.p;
begin
end;
function to2.p : longint;
begin
end;
begin
end.

12
tests/tbs/tb1.pp Normal file
View File

@ -0,0 +1,12 @@
{ Old file: tbs0001.pp }
{ tests a bugs in the .ascii output (#0 and too long) OK 0.9.2 }
program smalltest;
const
teststr : string = ' '#9#255#0;
begin
writeln(teststr);
teststr := 'gaga';
writeln(teststr);
if teststr<>'gaga' then halt(1);
end.

16
tests/tbs/tb10.pp Normal file
View File

@ -0,0 +1,16 @@
{ Old file: tbs0012.pp }
{ tests type conversation byte(a>b) OK 0.9.9 (FK) }
var
a,b : longint;
begin
a:=1;
b:=2;
if byte(a>b)=byte(a<b) then
begin
writeln('Ohhhh');
Halt(1);
end;
end.

14
tests/tbs/tb100.pp Normal file
View File

@ -0,0 +1,14 @@
{ Old file: tbs0118.pp }
{ Procedural vars cannot be assigned nil ? OK 0.99.6 (FK) }
program Test1;
type
ExampleProc = procedure;
var
Eg: ExampleProc;
begin
Eg := nil; { This produces a compiler error }
end.

47
tests/tbs/tb101.pp Normal file
View File

@ -0,0 +1,47 @@
{ Old file: tbs0119.pp }
{ problem with methods OK 0.99.6 (FK) }
program ObjTest;
uses crt;
type
ObjectA = object
procedure Greetings;
procedure DoIt;
end;
ObjectB = object (ObjectA)
procedure Greetings;
procedure DoIt;
end;
procedure ObjectA.Greetings;
begin
writeln(' A');
end;
procedure ObjectA.DoIt;
begin
writeln('A ');
Greetings;
end;
procedure ObjectB.Greetings;
begin
writeln(' B');
end;
procedure ObjectB.DoIt;
begin
writeln('B');
Greetings;
end;
var
A: ObjectA;
B: ObjectB;
begin
A.DoIt;
B.DoIt;
writeln; writeln('Now doing it directly:');
A.Greetings;
B.Greetings;
end.

Some files were not shown because too many files have changed in this diff Show More