Home | History | Annotate | Download | only in OpenMP
      1 // 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 | FileCheck %s
      4 // expected-no-diagnostics
      5 
      6 #ifndef HEADER
      7 #define HEADER
      8 
      9 void foo() {}
     10 
     11 template <typename T, int C>
     12 T tmain(T argc, T *argv) {
     13 #pragma omp target
     14   foo();
     15 #pragma omp target if (argc > 0)
     16   foo();
     17 #pragma omp target if (C)
     18   foo();
     19   return 0;
     20 }
     21 
     22 // CHECK: template <typename T = int, int C = 5> int tmain(int argc, int *argv) {
     23 // CHECK-NEXT: #pragma omp target
     24 // CHECK-NEXT: foo();
     25 // CHECK-NEXT: #pragma omp target if(argc > 0)
     26 // CHECK-NEXT: foo()
     27 // CHECK-NEXT: #pragma omp target if(5)
     28 // CHECK-NEXT: foo()
     29 // CHECK: template <typename T = char, int C = 1> char tmain(char argc, char *argv) {
     30 // CHECK-NEXT: #pragma omp target
     31 // CHECK-NEXT: foo();
     32 // CHECK-NEXT: #pragma omp target if(argc > 0)
     33 // CHECK-NEXT: foo()
     34 // CHECK-NEXT: #pragma omp target if(1)
     35 // CHECK-NEXT: foo()
     36 // CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
     37 // CHECK-NEXT: #pragma omp target
     38 // CHECK-NEXT: foo();
     39 // CHECK-NEXT: #pragma omp target if(argc > 0)
     40 // CHECK-NEXT: foo()
     41 // CHECK-NEXT: #pragma omp target if(C)
     42 // CHECK-NEXT: foo()
     43 
     44 // CHECK-LABEL: int main(int argc, char **argv) {
     45 int main (int argc, char **argv) {
     46 #pragma omp target
     47 // CHECK-NEXT: #pragma omp target
     48   foo();
     49 // CHECK-NEXT: foo();
     50 #pragma omp target if (argc > 0)
     51 // CHECK-NEXT: #pragma omp target if(argc > 0)
     52   foo();
     53 // CHECK-NEXT: foo();
     54   return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
     55 }
     56 
     57 #endif
     58