1*dc4359feSAMS21 // RUN: %check_clang_tidy -std=c++17-or-later %s modernize-loop-convert %t
2*dc4359feSAMS21 
3*dc4359feSAMS21 struct S {
4*dc4359feSAMS21   int a{0};
5*dc4359feSAMS21   int b{1};
6*dc4359feSAMS21 };
7*dc4359feSAMS21 
8*dc4359feSAMS21 template <typename T, unsigned long Size>
9*dc4359feSAMS21 struct array {
10*dc4359feSAMS21 
beginarray11*dc4359feSAMS21   T *begin() { return data; }
cbeginarray12*dc4359feSAMS21   const T* cbegin() const { return data; }
endarray13*dc4359feSAMS21   T *end() { return data + Size; }
cendarray14*dc4359feSAMS21   const T *cend() const { return data + Size; }
15*dc4359feSAMS21 
16*dc4359feSAMS21   T data[Size];
17*dc4359feSAMS21 };
18*dc4359feSAMS21 
19*dc4359feSAMS21 const int N = 6;
20*dc4359feSAMS21 S Arr[N];
21*dc4359feSAMS21 
f()22*dc4359feSAMS21 void f() {
23*dc4359feSAMS21   int Sum = 0;
24*dc4359feSAMS21 
25*dc4359feSAMS21   for (int I = 0; I < N; ++I) {
26*dc4359feSAMS21     auto [a, b] = Arr[I];
27*dc4359feSAMS21     Sum += a + b;
28*dc4359feSAMS21   }
29*dc4359feSAMS21   // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert]
30*dc4359feSAMS21   // CHECK-FIXES: for (auto [a, b] : Arr) {
31*dc4359feSAMS21   // CHECK-FIXES-NEXT: Sum += a + b;
32*dc4359feSAMS21 
33*dc4359feSAMS21   array<S, N> arr;
34*dc4359feSAMS21   for (auto* It = arr.begin(); It != arr.end(); ++It) {
35*dc4359feSAMS21     auto [a, b] = *It;
36*dc4359feSAMS21     Sum = a + b;
37*dc4359feSAMS21   }
38*dc4359feSAMS21   // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert]
39*dc4359feSAMS21   // CHECK-FIXES: for (auto [a, b] : arr) {
40*dc4359feSAMS21   // CHECK-FIXES-NEXT: Sum = a + b;
41*dc4359feSAMS21 
42*dc4359feSAMS21   for (auto* It = arr.cbegin(); It != arr.cend(); ++It) {
43*dc4359feSAMS21     auto [a, b] = *It;
44*dc4359feSAMS21     Sum = a + b;
45*dc4359feSAMS21   }
46*dc4359feSAMS21   // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert]
47*dc4359feSAMS21   // CHECK-FIXES: for (auto [a, b] : arr) {
48*dc4359feSAMS21   // CHECK-FIXES-NEXT: Sum = a + b;
49*dc4359feSAMS21 }
50