// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp // RUN: cpp11-migrate -loop-convert %t.cpp -- -I %S/Inputs // RUN: FileCheck -input-file=%t.cpp %s #include "structures.h" void complexContainer() { X exes[5]; int index = 0; for (S::iterator i = exes[index].getS().begin(), e = exes[index].getS().end(); i != e; ++i) { MutableVal k = *i; MutableVal j = *i; } // CHECK: for (auto & elem : exes[index].getS()) // CHECK-NEXT: MutableVal k = elem; // CHECK-NEXT: MutableVal j = elem; } void f() { /// begin()/end() - based for loops here: T t; for (T::iterator it = t.begin(); it != t.end(); ++it) { printf("I found %d\n", *it); } // CHECK: for (auto & elem : t) // CHECK-NEXT: printf("I found %d\n", elem); T *pt; for (T::iterator it = pt->begin(); it != pt->end(); ++it) { printf("I found %d\n", *it); } // CHECK: for (auto & elem : *pt) // CHECK-NEXT: printf("I found %d\n", elem); S s; for (S::const_iterator it = s.begin(); it != s.end(); ++it) { printf("s has value %d\n", (*it).x); } // CHECK: for (auto & elem : s) // CHECK-NEXT: printf("s has value %d\n", (elem).x); S *ps; for (S::const_iterator it = ps->begin(); it != ps->end(); ++it) { printf("s has value %d\n", (*it).x); } // CHECK: for (auto & p : *ps) // CHECK-NEXT: printf("s has value %d\n", (p).x); for (S::const_iterator it = s.begin(); it != s.end(); ++it) { printf("s has value %d\n", it->x); } // CHECK: for (auto & elem : s) // CHECK-NEXT: printf("s has value %d\n", elem.x); for (S::iterator it = s.begin(); it != s.end(); ++it) { it->x = 3; } // CHECK: for (auto & elem : s) // CHECK-NEXT: elem.x = 3; for (S::iterator it = s.begin(); it != s.end(); ++it) { (*it).x = 3; } // CHECK: for (auto & elem : s) // CHECK-NEXT: (elem).x = 3; for (S::iterator it = s.begin(); it != s.end(); ++it) { it->nonConstFun(4, 5); } // CHECK: for (auto & elem : s) // CHECK-NEXT: elem.nonConstFun(4, 5); U u; for (U::iterator it = u.begin(); it != u.end(); ++it) { printf("s has value %d\n", it->x); } // CHECK: for (auto & elem : u) // CHECK-NEXT: printf("s has value %d\n", elem.x); for (U::iterator it = u.begin(); it != u.end(); ++it) { printf("s has value %d\n", (*it).x); } // CHECK: for (auto & elem : u) // CHECK-NEXT: printf("s has value %d\n", (elem).x); U::iterator A; for (U::iterator i = u.begin(); i != u.end(); ++i) int k = A->x + i->x; // CHECK: for (auto & elem : u) // CHECK-NEXT: int k = A->x + elem.x; dependent v; for (dependent::const_iterator it = v.begin(); it != v.end(); ++it) { printf("Fibonacci number is %d\n", *it); } // CHECK: for (auto & elem : v) // CHECK-NEXT: printf("Fibonacci number is %d\n", elem); for (dependent::const_iterator it(v.begin()); it != v.end(); ++it) { printf("Fibonacci number is %d\n", *it); } // CHECK: for (auto & elem : v) // CHECK-NEXT: printf("Fibonacci number is %d\n", elem); doublyDependent intmap; for (doublyDependent::iterator it = intmap.begin(); it != intmap.end(); ++it) { printf("intmap[%d] = %d", it->first, it->second); } // CHECK: for (auto & elem : intmap) // CHECK-NEXT: printf("intmap[%d] = %d", elem.first, elem.second); }