__attribute__((noipa)) int barrier_copy (char *x, int y) { asm volatile ("" : : "g" (x), "g" (y) : "memory"); if (y == 0) __builtin_strcpy (x, "abcd"); return y; } __attribute__((noipa)) char * test_2 (int x) { char *p; if (x) p = __builtin_malloc (4); else p = __builtin_calloc (16, 1); char *q = p + 2; if (barrier_copy (q, x)) return p; if (__builtin_strcmp (q, "abcd") != 0) __builtin_abort (); return p; } int main () { __builtin_free (test_2 (0)); __builtin_free (test_2 (1)); return 0; }