begin recordformat small rec fm(integer i, real r) recordformat big rec fm(integer i, real r, string(255) s) record (small rec fm) small rec, small rec 2 record (big rec fm) big rec record (small rec fm) name small ptr small rec_i = 123 ; small rec_r = 234.56 big rec_i = 123 ; big rec_r = 234.56 ; big rec_s = "A String" ! regular record assignments. These work OK. small ptr == small rec 2 small ptr = small rec small rec = small ptr small rec <- small ptr ! These generate bad code: ! RECORD() on RHS small ptr == RECORD(ADDR(big rec)) small ptr == RECORD(ADDR(small rec)) small rec 2 = RECORD(ADDR(big rec)) small rec 2 <- RECORD(ADDR(big rec)) small ptr = RECORD(ADDR(big rec)) small ptr <- RECORD(ADDR(big rec)) ! RECORD() on LHS RECORD(ADDR(big rec)) = small rec RECORD(ADDR(big rec)) <- small rec RECORD(ADDR(small rec)) = big rec RECORD(ADDR(small rec)) <- big rec endofprogram