ソースを参照

+ 304,305,306

peter 26 年 前
コミット
a5c7366212
4 ファイル変更85 行追加0 行削除
  1. 20 0
      bugs/bug0304.pp
  2. 17 0
      bugs/bug0305.pp
  3. 45 0
      bugs/bug0306.pp
  4. 3 0
      bugs/readme.txt

+ 20 - 0
bugs/bug0304.pp

@@ -0,0 +1,20 @@
+{$asmmode intel}
+
+var
+  cb : word;
+
+procedure A(B: word); assembler; inline;
+asm
+   MOV  AX,B
+   CMP  AX,[CB]
+   JZ   @@10
+   CLI
+   MOV  [CB],AX
+   STI
+@@10:
+end;
+
+begin
+  a(1);
+  a(2);
+end.

+ 17 - 0
bugs/bug0305.pp

@@ -0,0 +1,17 @@
+uses
+{$ifdef go32v2}
+dpmiexcp,
+{$endif}
+sysutils;
+var i,j,k:real;
+begin
+  i:=100;
+  read(j);
+  try
+    k:=i/j;
+    writeln(k:5:3);
+  except
+    k:=0;
+    writeln('Illegal Input');
+  end;
+end.

+ 45 - 0
bugs/bug0306.pp

@@ -0,0 +1,45 @@
+{$MODE objfpc}
+{$H+}
+
+{
+   Don't forget break,continue support
+}
+
+program stackcrash;
+uses sysutils;
+type
+  TMyClass = class
+  public
+    procedure Proc1;
+    procedure Proc2;
+  end;
+
+procedure TMyClass.Proc1;
+var
+  x, y: Integer;
+begin
+  try
+    exit;
+  except
+    on e: Exception do begin e.Message := '[Proc1]' + e.Message; raise e end;
+  end;
+end;
+
+procedure TMyClass.Proc2;
+var
+  x: array[0..7] of Byte;
+  crash: Boolean;
+begin
+  crash := True;        // <--- ! This corrupts the stack?!?
+  raise Exception.Create('I will crash now...');
+end;
+
+var
+  obj: TMyClass;
+begin
+  obj := TMyClass.Create;
+  obj.Proc1;
+  WriteLn('Proc1 done, calling Proc2...');
+  obj.Proc2;
+  WriteLn('Proc2 done');
+end.

+ 3 - 0
bugs/readme.txt

@@ -393,3 +393,6 @@ Unfixed bugs:
 bug0262.pp   problems with virtual and overloaded methods
 bug0293.pp   no error with variable name = type name
 bug0299.pp   passing Array[0..1] of char by value to proc leads to problems
+bug0304.pp   Label redefined when inlining assembler
+bug0305.pp   Finally is not handled correctly after inputting 0
+bug0306.pp   Address is not popped with exit in try...except block