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]; 23 }; eval(GVector * m_gradient,GVector * vect_cpy_grad,int n)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