blob: 4d0d40e213f2f8217d73ea8b3ec15b9e280c0c21 [file] [log] [blame]
Alexey Bataev186b28a2014-03-06 05:43:53 +00001// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -ast-print %s | FileCheck %s
2// RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp=libiomp5 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print
Alexey Bataeva769e072013-03-22 06:34:35 +00004// expected-no-diagnostics
5
Alexey Bataev5ec3eb12013-07-19 03:13:43 +00006#ifndef HEADER
7#define HEADER
8
Alexey Bataeva769e072013-03-22 06:34:35 +00009struct St{
10 int a;
11};
12
13struct St1{
14 int a;
15 static int b;
16// CHECK: static int b;
17#pragma omp threadprivate(b)
Alexey Bataev7d2960b2013-09-26 03:24:06 +000018// CHECK-NEXT: #pragma omp threadprivate(St1::b)
Alexey Bataeva769e072013-03-22 06:34:35 +000019} d;
20
21int a, b;
22// CHECK: int a;
23// CHECK: int b;
24#pragma omp threadprivate(a)
25// CHECK-NEXT: #pragma omp threadprivate(a)
26#pragma omp threadprivate(d, b)
27// CHECK-NEXT: #pragma omp threadprivate(d,b)
28
Alexey Bataevd178ad42014-03-07 08:03:37 +000029template <class T>
30struct ST {
31 static T m;
32 #pragma omp threadprivate(m)
33};
34
Alexey Bataeva769e072013-03-22 06:34:35 +000035template <class T> T foo() {
36 static T v;
37 #pragma omp threadprivate(v)
Alexey Bataevd178ad42014-03-07 08:03:37 +000038 v = ST<T>::m;
Alexey Bataeva769e072013-03-22 06:34:35 +000039 return v;
40}
41//CHECK: template <class T = int> int foo() {
42//CHECK-NEXT: static int v;
43//CHECK-NEXT: #pragma omp threadprivate(v)
44//CHECK: template <class T> T foo() {
45//CHECK-NEXT: static T v;
46//CHECK-NEXT: #pragma omp threadprivate(v)
47
Alexey Bataev7d2960b2013-09-26 03:24:06 +000048namespace ns{
49 int a;
50}
51// CHECK: namespace ns {
52// CHECK-NEXT: int a;
53// CHECK-NEXT: }
54#pragma omp threadprivate(ns::a)
55// CHECK-NEXT: #pragma omp threadprivate(ns::a)
56
Alexey Bataeva769e072013-03-22 06:34:35 +000057int main () {
58 static int a;
59// CHECK: static int a;
60#pragma omp threadprivate(a)
61// CHECK-NEXT: #pragma omp threadprivate(a)
62 a=2;
63 return (foo<int>());
64}
Alexey Bataev5ec3eb12013-07-19 03:13:43 +000065
66#endif