fpc/tests/test/treadonlydata.pp
pierre e45ad64d41 * Revert changes to tarray15.pp
* Modify treadonlydata.pp to not use dynamic array.
   + Add test treadonlydata2.pp that should fail at compile time.

git-svn-id: trunk@42752 -
2019-08-21 07:23:51 +00:00

79 lines
1.9 KiB
ObjectPascal

program treadonlydata;
{$define target_supports_rodata}
{$if defined(msdos) or defined(hasamiga) or defined(atari) or defined(palmos)}
{$undef target_supports_rodata}
{$endif}
{$mode objfpc}
{ needed for "except" to work }
uses
SysUtils;
{$push}
{$J-}
const
rc: LongInt = 5;
rc1: array [0..2] of LongInt = (1, 2, 3);
{$J+}
const
wc: LongInt = 78;
wc1: array [0..2] of LongInt = (1, 2, 3);
has_errors : boolean = false;
{$pop}
var
p : plongint;
begin
{$ifdef target_supports_rodata}
try
p := @rc;
p^ := 42;
writeln('Error: Trying to write a read-only longint constant did not generate an exception');
has_errors:=true;
except
writeln('OK: Trying to write read-only data generated exception');
end;
try
p := @rc1[1];
p^ := 42;
writeln('Error: Trying to write a read-only longint array data element did not generate an exception');
has_errors:=true;
except
writeln('OK: Trying to write read-only data generated exception');
end;
{$else}
try
p := @rc;
p^ := 42;
writeln('Trying to write a read-only longint constant did not generate an exception, as expected');
except
writeln('Trying to write a read-only longint constant generated exception, while system is supposed not to support this');
has_errors:=true;
end;
try
p := @rc1[1];
p^ := 42;
writeln('Trying to write a read-only longint array data element did not generate an exception, as expected');
except
writeln('Trying to write a read-only longint array data element generated exception, while system is supposed not to support this');
has_errors:=true;
end;
{$endif}
try
wc := 42;
except
writeln('Error: Trying to write normal longint initialized "const" generated exception');
has_errors:=true;
end;
try
wc1[1] := 42;
except
writeln('Error: Trying to write normal array data element generated exception');
has_errors:=true;
end;
if has_errors then
halt(1);
end.