http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60586
Bug ID: 60586 Summary: [Cilk+] Parameters evaluation happens inside spawn worker Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: izamyatin at gmail dot com Following test (compiled with eg -O2 -fcilkplus -lcilkrts) #include <stdio.h> #include <cilk/cilk.h> #include <unistd.h> int noop(int x) { return x; } int post_increment(int *x) { sleep(1); return (*x)++; } int main(int argc, char *argv[]) { int m = 5; int n = m; int r = cilk_spawn noop(post_increment(&n)); int n2 = n; cilk_sync; printf("After sync: m = %d, n = %d, r = %d, n2 = %d\n", m, n, r, n2); if (r != m || n2 != m + 1) printf("FAILED\n"); else printf("PASSED\n"); return 0; } outputs After sync: m = 5, n = 6, r = 5, n2 = 5 FAILED That happens because post_increment is called inside spawn worker which is incorrect.