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