Hi! The following testcase works unless -save-temps or ccache is used (or manually performing -E and compilation separately). The problem is that #pragma cilk grainsize is supposed to have macro expansion (except for the grainsize keyword), but we weren't enabling that for -E.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2016-02-17 Jakub Jelinek <ja...@redhat.com> PR c++/69826 * c-pragma.c (c_pp_lookup_pragma): Handle PRAGMA_CILK_GRAINSIZE. (init_pragma): Register PRAGMA_CILK_GRAINSIZE even for flag_preprocess_only. * c-c++-common/cilk-plus/CK/pr69826-1.c: New test. * c-c++-common/cilk-plus/CK/pr69826-2.c: New test. --- gcc/c-family/c-pragma.c.jj 2016-02-01 23:35:05.000000000 +0100 +++ gcc/c-family/c-pragma.c 2016-02-17 14:48:37.489399494 +0100 @@ -1336,6 +1336,13 @@ c_pp_lookup_pragma (unsigned int id, con return; } + if (id == PRAGMA_CILK_GRAINSIZE) + { + *space = "cilk"; + *name = "grainsize"; + return; + } + if (id >= PRAGMA_FIRST_EXTERNAL && (id < PRAGMA_FIRST_EXTERNAL + registered_pp_pragmas.length ())) { @@ -1523,7 +1530,7 @@ init_pragma (void) cpp_register_deferred_pragma (parse_in, "GCC", "ivdep", PRAGMA_IVDEP, false, false); - if (flag_cilkplus && !flag_preprocess_only) + if (flag_cilkplus) cpp_register_deferred_pragma (parse_in, "cilk", "grainsize", PRAGMA_CILK_GRAINSIZE, true, false); --- gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-1.c.jj 2016-02-17 15:09:10.685152534 +0100 +++ gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-1.c 2016-02-17 15:11:39.518070410 +0100 @@ -0,0 +1,25 @@ +/* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-fcilkplus" } */ +/* { dg-additional-options "-std=gnu99" { target c } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ + +#define GRAINSIZE 2 + +int +main () +{ + int a[64]; + #pragma cilk grainsize=GRAINSIZE + _Cilk_for (int i = 0; i < 64; i++) + a[i] = 0; + #pragma cilk grainsize =GRAINSIZE + _Cilk_for (int i = 0; i < 64; i++) + a[i]++; + #pragma cilk grainsize = GRAINSIZE + _Cilk_for (int i = 0; i < 64; i++) + a[i]++; + for (int i = 0; i < 64; i++) + if (a[i] != 2) + __builtin_abort (); + return 0; +} --- gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-2.c.jj 2016-02-17 15:11:57.073824810 +0100 +++ gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-2.c 2016-02-17 15:12:12.409610268 +0100 @@ -0,0 +1,6 @@ +/* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-fcilkplus -save-temps" } */ +/* { dg-additional-options "-std=gnu99" { target c } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ + +#include "pr69826-1.c" Jakub