* fixed mantis #9522: no longer allow typecasting ordinal constants

to complex types (caused a lot of internal errors later on, and
    was also Delphi-incompatible)

git-svn-id: trunk@8369 -
This commit is contained in:
Jonas Maebe 2007-09-03 15:55:26 +00:00
parent 498da17875
commit 1ee8207ffa
10 changed files with 64 additions and 5 deletions

10
.gitattributes vendored
View File

@ -5828,6 +5828,7 @@ tests/tbf/tb0199a.pp -text
tests/tbf/tb0200.pp svneol=native#text/x-pascal
tests/tbf/tb0201.pp svneol=native#text/plain
tests/tbf/tb0202.pp svneol=native#text/plain
tests/tbf/tb0203.pp svneol=native#text/plain
tests/tbf/ub0115.pp svneol=native#text/plain
tests/tbf/ub0149.pp svneol=native#text/plain
tests/tbf/ub0158a.pp svneol=native#text/plain
@ -6214,7 +6215,6 @@ tests/tbs/tb0391.pp svneol=native#text/plain
tests/tbs/tb0392.pp svneol=native#text/plain
tests/tbs/tb0393.pp svneol=native#text/plain
tests/tbs/tb0394.pp svneol=native#text/plain
tests/tbs/tb0395.pp svneol=native#text/plain
tests/tbs/tb0396.pp svneol=native#text/plain
tests/tbs/tb0397.pp svneol=native#text/plain
tests/tbs/tb0398.pp svneol=native#text/plain
@ -7338,6 +7338,7 @@ tests/webtbf/tw3716.pp svneol=native#text/plain
tests/webtbf/tw3738.pp svneol=native#text/plain
tests/webtbf/tw3740.pp svneol=native#text/plain
tests/webtbf/tw3790.pp svneol=native#text/plain
tests/webtbf/tw3812.pp svneol=native#text/plain
tests/webtbf/tw3930a.pp svneol=native#text/plain
tests/webtbf/tw3931b.pp svneol=native#text/plain
tests/webtbf/tw3969.pp svneol=native#text/plain
@ -7432,6 +7433,12 @@ tests/webtbf/tw9039d.pp svneol=native#text/plain
tests/webtbf/tw9225.pp svneol=native#text/plain
tests/webtbf/tw9499.pp svneol=native#text/plain
tests/webtbf/tw9499a.pp svneol=native#text/plain
tests/webtbf/tw9522.pp svneol=native#text/plain
tests/webtbf/tw9522a.pp svneol=native#text/plain
tests/webtbf/tw9522b.pp svneol=native#text/plain
tests/webtbf/tw9522c.pp svneol=native#text/plain
tests/webtbf/tw9522d.pp svneol=native#text/plain
tests/webtbf/tw9522e.pp svneol=native#text/plain
tests/webtbf/uw0744.pp svneol=native#text/plain
tests/webtbf/uw0840a.pp svneol=native#text/plain
tests/webtbf/uw0840b.pp svneol=native#text/plain
@ -8046,7 +8053,6 @@ tests/webtbs/tw3780.pp svneol=native#text/plain
tests/webtbs/tw3782.pp svneol=native#text/plain
tests/webtbs/tw3796.pp svneol=native#text/plain
tests/webtbs/tw3805.pp svneol=native#text/plain
tests/webtbs/tw3812.pp svneol=native#text/plain
tests/webtbs/tw3814.pp svneol=native#text/plain
tests/webtbs/tw3827.pp svneol=native#text/plain
tests/webtbs/tw3829.pp svneol=native#text/plain

View File

@ -1793,13 +1793,19 @@ implementation
else
begin
{ only if the same size or formal def }
{ only if the same size or formal def, and }
{ don't allow type casting of constants to }
{ structured types }
if not(
(left.resultdef.typ=formaldef) or
(
not(is_open_array(left.resultdef)) and
not(is_array_constructor(left.resultdef)) and
(left.resultdef.size=resultdef.size)
(left.resultdef.size=resultdef.size) and
(not is_constnode(left) or
(not(resultdef.typ in [arraydef,recorddef,setdef,stringdef,
filedef,variantdef,objectdef]) or
is_class_or_interface(resultdef)))
) or
(
is_void(left.resultdef) and

View File

@ -1,4 +1,5 @@
{ %VERSION=1.1 }
{ %fail }
type
dummyrec = record
i : int64;

View File

@ -1,3 +1,5 @@
{ %fail }
{ Source provided for Free Pascal Bug Report 3812 }
{ Submitted by "Sergey@michint" on 2005-03-22 }
{ e-mail: }

7
tests/webtbf/tw9522.pp Normal file
View File

@ -0,0 +1,7 @@
{ %fail }
type T4Char = array[0..3] of char;
begin
writeln(T4Char(65)[0]);
end.

7
tests/webtbf/tw9522a.pp Normal file
View File

@ -0,0 +1,7 @@
{ %fail }
type T4Char = array[0..3] of char;
begin
writeln(ansistring(65));
end.

7
tests/webtbf/tw9522b.pp Normal file
View File

@ -0,0 +1,7 @@
{ %fail }
type ts = set of 0..7;
begin
writeln(1 in ts(65));
end.

7
tests/webtbf/tw9522c.pp Normal file
View File

@ -0,0 +1,7 @@
{ %fail }
type ts = string[1];
begin
writeln(ts(65));
end.

8
tests/webtbf/tw9522d.pp Normal file
View File

@ -0,0 +1,8 @@
{ %fail }
type
tr = record b: byte; end;
begin
writeln(tr(65).b);
end.

8
tests/webtbf/tw9522e.pp Normal file
View File

@ -0,0 +1,8 @@
{ %fail }
type
tobj = object b : byte; end;
begin
writeln(tobj(65).b);
end.