1 // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3 // RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4 
5 // RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s
6 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s
7 // RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
8 // expected-no-diagnostics
9 
10 #ifndef HEADER
11 #define HEADER
12 
13 struct vector {
14   vector() = default;
atvector15   int at(int) { return 0; }
atvector16   int at(int) const { return 1; }
17 };
18 
19 // CHECK: template <typename T> void test(const vector begin_vec) {
20 // CHECK:    #pragma omp parallel for collapse(2)
21 // CHECK:        for (int n = begin_vec.at(0); n < 0; n++) {
22 // CHECK:            for (int h = begin_vec.at(1); h < 1; h++) {
23 // CHECK:                ;
24 // CHECK:            }
25 // CHECK:        }
26 // CHECK: }
27 // CHECK: template<> void test<int>(const vector begin_vec) {
28 // CHECK:    #pragma omp parallel for collapse(2)
29 // CHECK:        for (int n = begin_vec.at(0); n < 0; n++) {
30 // CHECK:            for (int h = begin_vec.at(1); h < 1; h++) {
31 // CHECK:                ;
32 // CHECK:            }
33 // CHECK:        }
34 // CHECK: }
35 template <typename T>
test(const vector begin_vec)36 void test(const vector begin_vec) {
37 #pragma omp parallel for collapse(2)
38   for (int n = begin_vec.at(0); n < 0; n++) {
39     for (int h = begin_vec.at(1); h < 1; h++) {
40       ;
41     }
42   }
43 }
44 
main()45 int main() {
46   vector v;
47   test<int>(v);
48 }
49 #endif
50