1 // PR tree-optimization/30558
2 // { dg-do compile }
3 // { dg-options "-fopenmp" }
4 
5 template <typename T> struct F
6 {
7   ~F ();
8   F (T);
9   const T &operator[] (unsigned i) const;
10 };
11 
foo(const F<T> & x)12 template <typename T> F<T> foo (const F<T> &x)
13 {
14   return F<T> (x[1]);
15 }
16 
17 struct G
18 {
GG19   G () { bar (2); }
20   F<int> &operator () (F<int> x);
21   void bar (int);
22 };
23 
24 int
main()25 main ()
26 {
27   try
28   {
29     G g;
30 #pragma omp parallel for
31     for (int i = 0; i < 10; ++i)
32       {
33 	F<int> j (i);
34 	F<int> f = g (j);
35 	F<int> h = foo (f);
36       }
37   }
38   catch (int &e)
39   {
40   }
41 }
42