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)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 }
32