ctor-1.C 767 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // { dg-do run }
  2. #include <omp.h>
  3. #include <assert.h>
  4. struct B
  5. {
  6. static int icount;
  7. static int dcount;
  8. static int xcount;
  9. B();
  10. B(const B &);
  11. ~B();
  12. B& operator=(const B &);
  13. void doit();
  14. };
  15. int B::icount;
  16. int B::dcount;
  17. int B::xcount;
  18. B::B()
  19. {
  20. #pragma omp atomic
  21. icount++;
  22. }
  23. B::~B()
  24. {
  25. #pragma omp atomic
  26. dcount++;
  27. }
  28. void B::doit()
  29. {
  30. #pragma omp atomic
  31. xcount++;
  32. }
  33. static int nthreads;
  34. void foo()
  35. {
  36. B b;
  37. #pragma omp parallel private(b)
  38. {
  39. #pragma omp master
  40. nthreads = omp_get_num_threads ();
  41. b.doit();
  42. }
  43. }
  44. int main()
  45. {
  46. omp_set_dynamic (0);
  47. omp_set_num_threads (4);
  48. foo();
  49. assert (B::xcount == nthreads);
  50. assert (B::icount == nthreads+1);
  51. assert (B::dcount == nthreads+1);
  52. return 0;
  53. }