summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/gomp/pr81154.C
blob: dc0aec33e14324e878ff6a9fbde183b4efed53aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// PR c++/81154
// { dg-do compile }

template <typename T>
struct C
{
  int foo (T n) const
  {
#pragma omp parallel shared (foo)	// { dg-error "is not a variable in clause" }
    ;
#pragma omp parallel private (foo)	// { dg-error "is not a variable in clause" }
    ;
#pragma omp parallel firstprivate (foo)	// { dg-error "is not a variable in clause" }
    ;
#pragma omp parallel for lastprivate (foo)	// { dg-error "is not a variable in clause" }
    for (T i = 0; i < n; i++)
      ;
#pragma omp parallel for linear (foo)	// { dg-error "is not a variable in clause" }
    for (T i = 0; i < n; i++)
      ;
#pragma omp parallel reduction (+:foo)	// { dg-error "is not a variable in clause" }
    ;
    return 0;
  }
  int foo (int x, int y) { return x; }
};

struct D
{
  typedef int T;
  int foo (T n) const
  {
#pragma omp parallel shared (foo)	// { dg-error "is not a variable in clause" }
    ;
#pragma omp parallel private (foo)	// { dg-error "is not a variable in clause" }
    ;
#pragma omp parallel firstprivate (foo)	// { dg-error "is not a variable in clause" }
    ;
#pragma omp parallel for lastprivate (foo)	// { dg-error "is not a variable in clause" }
    for (T i = 0; i < n; i++)
      ;
#pragma omp parallel for linear (foo)	// { dg-error "is not a variable in clause" }
    for (T i = 0; i < n; i++)
      ;
#pragma omp parallel reduction (+:foo)	// { dg-error "is not a variable in clause" }
    ;
    return 0;
  }
  int foo (int x, int y) { return x; }
};

int
main ()
{
  C<int> ().foo (1);
  D ().foo (1);
}