1 // RUN: %clang_cc1 -verify -fopenmp --std=c++20 -ast-print %s -Wsign-conversion | FileCheck %s
2 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++20 -emit-pch -o %t %s
3 // RUN: %clang_cc1 -fopenmp -std=c++20 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4 
5 // RUN: %clang_cc1 -verify -fopenmp-simd --std=c++20 -ast-print %s -Wsign-conversion | FileCheck %s
6 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++20 -emit-pch -o %t %s
7 // RUN: %clang_cc1 -fopenmp-simd -std=c++20 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
8 // expected-no-diagnostics
9 
10 #ifndef HEADER
11 #define HEADER
12 
13 template <typename T> class iterator {
14 public:
15   T &operator*() const;
16   iterator &operator++();
17 };
18 template <typename T>
19 bool operator==(const iterator<T> &, const iterator<T> &);
20 template <typename T>
21 unsigned long operator-(const iterator<T> &, const iterator<T> &);
22 template <typename T>
23 iterator<T> operator+(const iterator<T> &, unsigned long);
24 class vector {
25 public:
26   vector();
27   iterator<int> begin();
28   iterator<int> end();
29 };
30 // CHECK: void foo() {
foo()31 void foo() {
32 // CHECK-NEXT: vector vec;
33   vector vec;
34 // CHECK-NEXT: #pragma omp for
35 #pragma omp for
36 // CHECK-NEXT: for (int i : vec)
37   for (int i : vec)
38     ;
39 }
40 #endif
41