// new stamps the header, so an o3 caller and an ordinary caller both see a type. // the call itself is not a boundary: no fatten, and the callee's prologue does not run. struct node { int v; node* c; }; unchecked o3 node* leaf(int v) { node* n = new(node); n.v = v; n.c = 0; return n; } unchecked o3 int inner() { node* n = leaf(7); int* p = n; return p[-1]; } unchecked o3 int add(int a, int b) { return a + b; } unchecked o3 int nest(int n) { if (n == 0) return 0; return n + nest(n - 1); } unchecked fn main() { node* n = leaf(4); int* p = n; put_n(p[-1] < 0); put_c(' '); put_n(inner() < 0); put_c(' '); put_n(n.v); put_c(' '); put_n(add(20, 3)); put_c(' '); put_n(nest(10)); put_c(' '); tprint(typeof_obj(n)); put_c(10); return 0; }