1// { dg-do compile } 2// { dg-options "-fopenmp" } 3// { dg-require-effective-target fopenmp } 4 5class GException { 6public: 7 class vector_mismatch { 8 public: 9 vector_mismatch(int size1, int size2); 10 }; 11}; 12class GVector{ 13public: 14 GVector& operator+=(const GVector& v); 15 int m_num; 16 double* m_data; 17}; 18inline 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]; 23}; 24void 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} 32