mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 02:26:20 +02:00
* fixed internal error with bitpacked arrays of composite types whose
size is not a power of two git-svn-id: trunk@7596 -
This commit is contained in:
parent
1ba2224a3e
commit
65e35ac401
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -6907,6 +6907,7 @@ tests/test/tparray17.pp svneol=native#text/plain
|
|||||||
tests/test/tparray18.pp svneol=native#text/plain
|
tests/test/tparray18.pp svneol=native#text/plain
|
||||||
tests/test/tparray19.pp svneol=native#text/plain
|
tests/test/tparray19.pp svneol=native#text/plain
|
||||||
tests/test/tparray2.pp svneol=native#text/plain
|
tests/test/tparray2.pp svneol=native#text/plain
|
||||||
|
tests/test/tparray20.pp svneol=native#text/plain
|
||||||
tests/test/tparray3.pp svneol=native#text/plain
|
tests/test/tparray3.pp svneol=native#text/plain
|
||||||
tests/test/tparray4.pp svneol=native#text/plain
|
tests/test/tparray4.pp svneol=native#text/plain
|
||||||
tests/test/tparray5.pp svneol=native#text/plain
|
tests/test/tparray5.pp svneol=native#text/plain
|
||||||
|
@ -480,8 +480,12 @@ implementation
|
|||||||
byteoffs, bitoffs, alignpower: aint;
|
byteoffs, bitoffs, alignpower: aint;
|
||||||
temp : longint;
|
temp : longint;
|
||||||
begin
|
begin
|
||||||
|
{ only orddefs are bitpacked. Even then we only need special code in }
|
||||||
|
{ case the bitpacked *byte size* is not a power of two, otherwise }
|
||||||
|
{ everything can be handled using the the regular array code. }
|
||||||
if ((l mod 8) = 0) and
|
if ((l mod 8) = 0) and
|
||||||
ispowerof2(l div 8,temp) then
|
(ispowerof2(l div 8,temp) or
|
||||||
|
not is_ordinal(resultdef)) then
|
||||||
begin
|
begin
|
||||||
update_reference_reg_mul(reg,l div 8);
|
update_reference_reg_mul(reg,l div 8);
|
||||||
exit;
|
exit;
|
||||||
|
39
tests/test/tparray20.pp
Normal file
39
tests/test/tparray20.pp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
program FatalError_200608051;
|
||||||
|
|
||||||
|
type
|
||||||
|
String32 = string[ 32];
|
||||||
|
String80 = string[ 80];
|
||||||
|
TDS = record
|
||||||
|
ZZStyleName: packed array[0..24] of String32;
|
||||||
|
end;
|
||||||
|
TDSunp = record
|
||||||
|
ZZStyleName: array[0..24] of String32;
|
||||||
|
end;
|
||||||
|
PDS = ^TDS;
|
||||||
|
|
||||||
|
var
|
||||||
|
DV: PDS;
|
||||||
|
|
||||||
|
function StyleNameToSongStyleNum (TheSTYName80: String80): longint;
|
||||||
|
var
|
||||||
|
a: Integer;
|
||||||
|
begin
|
||||||
|
StyleNameToSongStyleNum := 1;
|
||||||
|
for A := 1 to 24 do
|
||||||
|
if Pos(DV^.ZZStyleName[a], TheSTYName80) > 0 then
|
||||||
|
begin
|
||||||
|
StyleNameToSongStyleNum := A;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
new(dv);
|
||||||
|
for i := 1 to 24 do
|
||||||
|
tdsunp(dv^).ZZStyleName[i]:='MySong'+chr(i+ord('A'));
|
||||||
|
if (StyleNameToSongStyleNum('MySongF') <> 5) then
|
||||||
|
halt(1);
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user