Packed record fields

Pascal according to ANSI and ISO standards

Waldek
Look at the following program:

program pack2;
type pr = packed record r: record j : integer end end;
var v : pr;
procedure foo(var i : integer);
begin
end;
begin
  foo(v.r.j);
end
.

I think this program _should_ be illegal (otherwise possibilities
to pack pr would be quite limited), but I can not find full justification
based on ISO 7185 or ISO 10206. Namely, 6.6.3.3 (in ISO 7185) and
6.7.3.3 (in ISO 10206) tells us that components of packed records
should not be passed as var parameters. But "j" is a component of "r",
which is not a packed record. The question is if "j" is a
component of "v"? I was not able to find any definition of
component in the standards, but it seems that in the standards
component means what could be otherwise called "direct component".
If "j" is not a component of "v", then AFAICS the program above
is legal...

Any comments?                                            
scott
I compiled it as:

PC compiler shell vs. 1.12.00 Copyright (C) 2005 S. A. Moore
Reading instruction file c:\ip\windows\i80386\bin\pc.ins
Building C:\TEST\test

Pascal parser vs. 1.12.01 Copyright (C) 2005 S. A. Moore
Processing: C:\TEST\test.pas
*** C:\TEST\test.pas [6:5] Symbol 'i' defined but never referenced ***
   foo(v.r.j);
         ^
*** C:\TEST\test.pas [8:9] Packed component cannot appear as variable 
parameter
***
Errors this compilation: 2
No output file was generated
Function complete
Build has errors, terminating

Sooo, basically IP considers any element of a packed, however deeply
nested to be subject to that restriction. I think that rule is
intuitive.

I suspect the 6.6.3.3 limitation key is if by "components" of a record
that also includes components of components of components.. etc.

I'll see if I can't find a concrete quotation in 7185 for ya tomorrow.