http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56694
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-25 12:28:55 UTC --- Reduced testcase: class GException { public: class vector_mismatch { public: vector_mismatch(int size1, int size2); }; }; class GVector{ public: GVector& operator+=(const GVector& v); int m_num; double* m_data; }; inline GVector& GVector::operator+= (const GVector& v) { if (m_num != v.m_num) throw GException::vector_mismatch(m_num, v.m_num); for (int i = 0; i < m_num; ++i) m_data[i] += v.m_data[i]; }; void eval(GVector* m_gradient, GVector* vect_cpy_grad, int n) { #pragma omp sections { for (int i = 0; i < n; ++i) *m_gradient += vect_cpy_grad[i]; } }