mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 02:19:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			701 B
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			701 B
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{$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.
 |