for-7.C 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // PR c++/
  2. // { dg-do run }
  3. // { dg-additional-options "-std=c++0x" }
  4. extern "C" void abort ();
  5. int cnt;
  6. template <typename T>
  7. void
  8. f0 (T, int)
  9. {
  10. abort ();
  11. }
  12. template <>
  13. void
  14. f0<int> (int, int type)
  15. {
  16. if (type != 0)
  17. abort ();
  18. #pragma omp atomic
  19. cnt++;
  20. }
  21. template <>
  22. void
  23. f0<const char *> (const char *, int type)
  24. {
  25. if (type != 1)
  26. abort ();
  27. #pragma omp atomic
  28. cnt++;
  29. }
  30. template <typename T>
  31. void
  32. f1 ()
  33. {
  34. #pragma omp parallel for
  35. for (auto i = 0; i < 10; i++)
  36. f0 (i, 0);
  37. }
  38. template <typename T>
  39. void
  40. f2 ()
  41. {
  42. #pragma omp parallel for
  43. for (auto i = T (0); i < T (10); i += T (1))
  44. f0 (i, 0);
  45. }
  46. void
  47. f3 ()
  48. {
  49. #pragma omp parallel for
  50. for (auto i = 0; i < 10; i++)
  51. f0 (i, 0);
  52. }
  53. const char *p = "abcdefghij";
  54. template <typename T>
  55. void
  56. f4 ()
  57. {
  58. #pragma omp parallel for
  59. for (auto i = p; i < p + 10; i++)
  60. f0 (i, 1);
  61. }
  62. template <typename T>
  63. void
  64. f5 ()
  65. {
  66. #pragma omp parallel for
  67. for (auto i = T (p); i < T (p + 10); i++)
  68. f0 (i, 1);
  69. }
  70. void
  71. f6 ()
  72. {
  73. #pragma omp parallel for
  74. for (auto i = p; i < p + 10; i++)
  75. f0 (i, 1);
  76. }
  77. int
  78. main ()
  79. {
  80. f1<int> ();
  81. if (cnt != 10)
  82. abort ();
  83. f2<int> ();
  84. if (cnt != 20)
  85. abort ();
  86. f3 ();
  87. if (cnt != 30)
  88. abort ();
  89. f4<int> ();
  90. if (cnt != 40)
  91. abort ();
  92. f5<const char *> ();
  93. if (cnt != 50)
  94. abort ();
  95. f6 ();
  96. if (cnt != 60)
  97. abort ();
  98. }