111
|
1 // { dg-do compile }
|
|
2 // { dg-options "-fopenmp" }
|
|
3 // { dg-require-effective-target fopenmp }
|
|
4
|
|
5 class GException {
|
|
6 public:
|
|
7 class vector_mismatch {
|
|
8 public:
|
|
9 vector_mismatch(int size1, int size2);
|
|
10 };
|
|
11 };
|
|
12 class GVector{
|
|
13 public:
|
|
14 GVector& operator+=(const GVector& v);
|
|
15 int m_num;
|
|
16 double* m_data;
|
|
17 };
|
|
18 inline GVector& GVector::operator+= (const GVector& v)
|
|
19 {
|
|
20 if (m_num != v.m_num)
|
|
21 throw GException::vector_mismatch(m_num, v.m_num);
|
|
22 for (int i = 0; i < m_num; ++i) m_data[i] += v.m_data[i];
|
131
|
23 }; // { dg-warning "control reaches end of non-void function" }
|
111
|
24 void eval(GVector* m_gradient, GVector* vect_cpy_grad, int n)
|
|
25 {
|
|
26 #pragma omp sections
|
|
27 {
|
|
28 for (int i = 0; i < n; ++i)
|
|
29 *m_gradient += vect_cpy_grad[i];
|
|
30 }
|
|
31 }
|