t_libc2.mod 744 B

123456789101112131415161718192021222324252627
  1. MODULE TLibc2;
  2. // Typed libc prototypes: printf is a varargs function whose result may
  3. // be used or discarded (statement position); malloc/memset/write have
  4. // real signatures. Exit 42.
  5. FROM libc IMPORT printf, malloc, memset, write;
  6. FROM SYSTEM IMPORT ADDRESS, ADR;
  7. VAR ExitCode, n, w : INTEGER;
  8. VAR p : ADDRESS;
  9. VAR buf : ARRAY [0..7] OF CHAR;
  10. BEGIN
  11. n := printf("");
  12. p := malloc(16);
  13. IF p = NIL THEN
  14. ExitCode := 1
  15. ELSE
  16. p := memset(p, 0, 16);
  17. buf[0] := 'x';
  18. buf[1] := CHR(0);
  19. w := write(1, ADR(buf), 0);
  20. printf(""); (* statement: result discarded *)
  21. IF (n = 0) AND (w = 0) AND (p # NIL) AND (buf[0] = 'x') THEN
  22. ExitCode := 42
  23. ELSE
  24. ExitCode := 2
  25. END
  26. END
  27. END TLibc2.