1453e02caSRitanya B Bharadwaj // RUN: %clang_cc1 -w -verify -fopenmp -I %S/Inputs -ast-print %s | FileCheck %s --check-prefix=CHECK 2453e02caSRitanya B Bharadwaj // expected-no-diagnostics 3453e02caSRitanya B Bharadwaj 4453e02caSRitanya B Bharadwaj static int variable = 100; 5453e02caSRitanya B Bharadwaj static float variable1 = 200; 6453e02caSRitanya B Bharadwaj static float variable2 = variable1; 7453e02caSRitanya B Bharadwaj 8453e02caSRitanya B Bharadwaj static int var = 1; 9453e02caSRitanya B Bharadwaj 10453e02caSRitanya B Bharadwaj static int var1 = 10; 11453e02caSRitanya B Bharadwaj static int *var2 = &var1; 12453e02caSRitanya B Bharadwaj static int **ptr1 = &var2; 13453e02caSRitanya B Bharadwaj 14453e02caSRitanya B Bharadwaj int arr[2] = {1,2}; 15453e02caSRitanya B Bharadwaj int (*arrptr)[2] = &arr; 16453e02caSRitanya B Bharadwaj 17453e02caSRitanya B Bharadwaj class declare{ 18453e02caSRitanya B Bharadwaj public: int x; 19453e02caSRitanya B Bharadwaj void print(); 20453e02caSRitanya B Bharadwaj }; 21453e02caSRitanya B Bharadwaj declare obj1; 22453e02caSRitanya B Bharadwaj declare *obj2 = &obj1; 23453e02caSRitanya B Bharadwaj 24453e02caSRitanya B Bharadwaj struct target{ 25453e02caSRitanya B Bharadwaj int x; 26453e02caSRitanya B Bharadwaj void print(); 27453e02caSRitanya B Bharadwaj }; 28453e02caSRitanya B Bharadwaj static target S; 29453e02caSRitanya B Bharadwaj 30*58eba709SRitanya B Bharadwaj static int var3 = 100; 31*58eba709SRitanya B Bharadwaj static int *ptr_3 = &var3; 32*58eba709SRitanya B Bharadwaj static char c = 'a'; 33*58eba709SRitanya B Bharadwaj 34453e02caSRitanya B Bharadwaj #pragma omp declare target 35453e02caSRitanya B Bharadwaj int target_var = variable; 36453e02caSRitanya B Bharadwaj float target_var1 = variable2; 37453e02caSRitanya B Bharadwaj int *ptr = &var; 38453e02caSRitanya B Bharadwaj int ***ptr2 = &ptr1; 39453e02caSRitanya B Bharadwaj int (**ptr3)[2] = &arrptr; 40453e02caSRitanya B Bharadwaj declare **obj3 = &obj2; 41453e02caSRitanya B Bharadwaj target *S1 = &S; 42453e02caSRitanya B Bharadwaj #pragma omp end declare target 43*58eba709SRitanya B Bharadwaj #pragma omp declare target(ptr_3) 44*58eba709SRitanya B Bharadwaj #pragma omp declare target to(c) 45*58eba709SRitanya B Bharadwaj 46453e02caSRitanya B Bharadwaj // CHECK: #pragma omp declare target 47453e02caSRitanya B Bharadwaj // CHECK-NEXT: static int variable = 100; 48453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 49453e02caSRitanya B Bharadwaj 50453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 51453e02caSRitanya B Bharadwaj // CHECK-NEXT: static float variable1 = 200; 52453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 53453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 54453e02caSRitanya B Bharadwaj // CHECK-NEXT: static float variable2 = variable1; 55453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 56453e02caSRitanya B Bharadwaj 57453e02caSRitanya B Bharadwaj // CHECK: #pragma omp declare target 58453e02caSRitanya B Bharadwaj // CHECK-NEXT: static int var = 1; 59453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 60453e02caSRitanya B Bharadwaj 61453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 62453e02caSRitanya B Bharadwaj // CHECK-NEXT: static int var1 = 10; 63453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 64453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 65453e02caSRitanya B Bharadwaj // CHECK-NEXT: static int *var2 = &var1; 66453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 67453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 68453e02caSRitanya B Bharadwaj // CHECK-NEXT: static int **ptr1 = &var2; 69453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 70453e02caSRitanya B Bharadwaj 71453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 72453e02caSRitanya B Bharadwaj // CHECK-NEXT: int arr[2] = {1, 2}; 73453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 74453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 75453e02caSRitanya B Bharadwaj // CHECK-NEXT: int (*arrptr)[2] = &arr; 76453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 77453e02caSRitanya B Bharadwaj 78453e02caSRitanya B Bharadwaj // CHECK-NEXT: class declare { 79453e02caSRitanya B Bharadwaj // CHECK-NEXT: public: 80453e02caSRitanya B Bharadwaj // CHECK-NEXT: int x; 81453e02caSRitanya B Bharadwaj // CHECK-NEXT: void print(); 82453e02caSRitanya B Bharadwaj // CHECK-NEXT: }; 83453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 84453e02caSRitanya B Bharadwaj // CHECK-NEXT: declare obj1; 85453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 86453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 87453e02caSRitanya B Bharadwaj // CHECK-NEXT: declare *obj2 = &obj1; 88453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 89453e02caSRitanya B Bharadwaj 90453e02caSRitanya B Bharadwaj // CHECK-NEXT: struct target { 91453e02caSRitanya B Bharadwaj // CHECK-NEXT: int x; 92453e02caSRitanya B Bharadwaj // CHECK-NEXT: void print(); 93453e02caSRitanya B Bharadwaj // CHECK-NEXT: }; 94453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 95453e02caSRitanya B Bharadwaj // CHECK-NEXT: static target S; 96453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 97*58eba709SRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 98*58eba709SRitanya B Bharadwaj // CHECK-NEXT: static int var3 = 100; 99*58eba709SRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 100*58eba709SRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 101*58eba709SRitanya B Bharadwaj // CHECK-NEXT: static int *ptr_3 = &var3; 102*58eba709SRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 103*58eba709SRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 104*58eba709SRitanya B Bharadwaj // CHECK-NEXT: static char c = 'a'; 105*58eba709SRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 106453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 107453e02caSRitanya B Bharadwaj // CHECK-NEXT: int target_var = variable; 108453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 109453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 110453e02caSRitanya B Bharadwaj // CHECK-NEXT: float target_var1 = variable2; 111453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 112453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 113453e02caSRitanya B Bharadwaj // CHECK-NEXT: int *ptr = &var; 114453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 115453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 116453e02caSRitanya B Bharadwaj // CHECK-NEXT: int ***ptr2 = &ptr1; 117453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 118453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 119453e02caSRitanya B Bharadwaj // CHECK-NEXT: int (**ptr3)[2] = &arrptr; 120453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 121453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 122453e02caSRitanya B Bharadwaj // CHECK-NEXT: declare **obj3 = &obj2; 123453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 124453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp declare target 125453e02caSRitanya B Bharadwaj // CHECK-NEXT: target *S1 = &S; 126453e02caSRitanya B Bharadwaj // CHECK-NEXT: #pragma omp end declare target 127453e02caSRitanya B Bharadwaj 128