// 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" // Single FileCheck line to make sure that no loops are converted. // CHECK-NOT: for ({{.*[^:]:[^:].*}}) const int N = 6; dependent v; dependent *pv; transparent > cv; int sum = 0; // Checks for the index start and end: void indexStartAndEnd() { for (int i = 0; i < v.size() + 1; ++i) sum += v[i]; for (int i = 0; i < v.size() - 1; ++i) sum += v[i]; for (int i = 1; i < v.size(); ++i) sum += v[i]; for (int i = 1; i < v.size(); ++i) sum += v[i]; for (int i = 0; ; ++i) sum += (*pv)[i]; } // Checks for invalid increment steps: void increment() { for (int i = 0; i < v.size(); --i) sum += v[i]; for (int i = 0; i < v.size(); i) sum += v[i]; for (int i = 0; i < v.size();) sum += v[i]; for (int i = 0; i < v.size(); i += 2) sum ++; } // Checks to make sure that the index isn't used outside of the container: void indexUse() { for (int i = 0; i < v.size(); ++i) v[i] += 1 + i; } // Checks for incorrect loop variables. void mixedVariables() { int badIndex; for (int i = 0; badIndex < v.size(); ++i) sum += v[i]; for (int i = 0; i < v.size(); ++badIndex) sum += v[i]; for (int i = 0; badIndex < v.size(); ++badIndex) sum += v[i]; for (int i = 0; badIndex < v.size(); ++badIndex) sum += v[badIndex]; } // Checks for an array indexed in addition to the container. void multipleArrays() { int badArr[N]; for (int i = 0; i < v.size(); ++i) sum += v[i] + badArr[i]; for (int i = 0; i < v.size(); ++i) sum += badArr[i]; for (int i = 0; i < v.size(); ++i) { int k = badArr[i]; sum += k + 2; } for (int i = 0; i < v.size(); ++i) { int k = badArr[i]; sum += v[i] + k; } } // Checks for multiple containers being indexed container. void multipleContainers() { dependent badArr; for (int i = 0; i < v.size(); ++i) sum += v[i] + badArr[i]; for (int i = 0; i < v.size(); ++i) sum += badArr[i]; for (int i = 0; i < v.size(); ++i) { int k = badArr[i]; sum += k + 2; } for (int i = 0; i < v.size(); ++i) { int k = badArr[i]; sum += v[i] + k; } } // Check to make sure that dereferenced pointers-to-containers behave nicely void derefContainer() { // Note the dependent::operator*() returns another dependent. // This test makes sure that we don't allow an arbitrary number of *'s. for (int i = 0; i < pv->size(); ++i) sum += (**pv).at(i); for (int i = 0; i < pv->size(); ++i) sum += (**pv)[i]; } void wrongEnd() { int bad; for (int i = 0, e = v.size(); i < bad; ++i) sum += v[i]; }