pr58706.C 874 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // PR c++/58706
  2. // { dg-do run }
  3. // { dg-options "-std=c++11" }
  4. template <typename T>
  5. T
  6. foo ()
  7. {
  8. T n = T ();
  9. #pragma omp parallel for reduction (+: n)
  10. for (T i = [](){ return 3; }(); i < 10; ++i)
  11. n++;
  12. return n;
  13. }
  14. template <typename T>
  15. T
  16. bar ()
  17. {
  18. T n = T ();
  19. #pragma omp parallel for reduction (+: n)
  20. for (T i = [](){ return 1; }() + [](){ return 4; }(); i < 10; ++i)
  21. n++;
  22. return n;
  23. }
  24. template <typename T>
  25. T
  26. baz ()
  27. {
  28. T n = T ();
  29. #pragma omp parallel for reduction (+: n)
  30. for (T i = T (); i < [](){ return 7; }() + [](){ return 11; }(); i += [](){ return 3; }() - [](){ return 1; }())
  31. n++;
  32. return n;
  33. }
  34. int
  35. main ()
  36. {
  37. if (foo <int> () != 7 || foo <long long> () != 7)
  38. __builtin_abort ();
  39. if (bar <int> () != 5 || bar <char> () != 5)
  40. __builtin_abort ();
  41. if (baz <int> () != 9 || baz <long long> () != 9)
  42. __builtin_abort ();
  43. }