diff options
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cilk-plus/CK/pr80038.cc | 47 |
2 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dc80b56..205c083 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-05-01 Xi Ruoyao <ryxi@stu.xidian.edu.cn> + + PR c++/80038 + * g++.dg/cilk-plus/CK/pr80038.cc: New test. + 2017-05-01 David Malcolm <dmalcolm@redhat.com> * gcc.dg/Wmissing-braces-fixits.c: Update expected output to diff --git a/gcc/testsuite/g++.dg/cilk-plus/CK/pr80038.cc b/gcc/testsuite/g++.dg/cilk-plus/CK/pr80038.cc new file mode 100644 index 0000000..85990e5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cilk-plus/CK/pr80038.cc @@ -0,0 +1,47 @@ +/* { dg-options "-fcilkplus" } */ +/* { dg-do run } */ +/* { dg-require-effective-target cilkplus_runtime } */ + +#include <unistd.h> +extern "C" { + extern int __cilkrts_set_param (const char *, const char *); +} + +int objcnt = 0; + +struct foo +{ + int live; + foo () + { objcnt++; } + foo (const foo &) + { objcnt++; } + ~foo () + { objcnt--; } +}; + +void +spawnee (foo f) +{ + usleep(2000); + /* Now both my_test::f and spawnee::f should be alive. */ + if (objcnt != 2) + __builtin_abort (); +} + +void +my_test () +{ + foo f; + _Cilk_spawn spawnee (f); + _Cilk_sync ; +} + +int +main () +{ + if (__cilkrts_set_param ("nworkers", "2") != 0) + __builtin_abort (); + + my_test (); +} |