For Loop Conversion
[lldb.git] / clang-tools-extra / test / loop-convert / loop-convert-pseudoarray.cpp
1 // RUN: rm -rf %t.cpp
2 // RUN: grep -Ev "//\s*[A-Z-]+:" %s > %t.cpp
3 // RUN: loop-convert . %t.cpp -- -I %S/Inputs \
4 // RUN:           && FileCheck -input-file=%t.cpp %s
5 // RUN: rm -rf %t.cpp
6 #include "structures.h"
7
8 const int N = 6;
9 dependent<int> v;
10 dependent<int> *pv;
11
12 transparent<dependent<int> > cv;
13
14 void f() {
15   int sum = 0;
16   for (int i = 0, e = v.size(); i < e; ++i) {
17     printf("Fibonacci number is %d\n", v[i]);
18     sum += v[i] + 2;
19   }
20   // CHECK: for (auto & [[VAR:[a-z_]+]] : v)
21   // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
22   // CHECK-NEXT: sum += [[VAR]] + 2;
23
24   for (int i = 0, e = v.size(); i < e; ++i) {
25     printf("Fibonacci number is %d\n", v.at(i));
26     sum += v.at(i) + 2;
27   }
28   // CHECK: for (auto & [[VAR:[a-z_]+]] : v)
29   // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
30   // CHECK-NEXT: sum += [[VAR]] + 2;
31
32   for (int i = 0, e = pv->size(); i < e; ++i) {
33     printf("Fibonacci number is %d\n", pv->at(i));
34     sum += pv->at(i) + 2;
35   }
36   // CHECK: for (auto & [[VAR:[a-z_]+]] : *pv)
37   // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
38   // CHECK-NEXT: sum += [[VAR]] + 2;
39
40   // This test will fail if size() isn't called repeatedly, since it
41   // returns unsigned int, and 0 is deduced to be signed int.
42   // FIXME: Insert the necessary explicit conversion, or write out the types
43   // explicitly.
44   for (int i = 0; i < pv->size(); ++i) {
45     printf("Fibonacci number is %d\n", (*pv).at(i));
46     sum += (*pv)[i] + 2;
47   }
48   // CHECK: for (auto & [[VAR:[a-z_]+]] : *pv)
49   // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
50   // CHECK-NEXT: sum += [[VAR]] + 2;
51
52   for (int i = 0; i < cv->size(); ++i) {
53     printf("Fibonacci number is %d\n", cv->at(i));
54     sum += cv->at(i) + 2;
55   }
56   // CHECK: for (auto & [[VAR:[a-z_]+]] : *cv)
57   // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
58   // CHECK-NEXT: sum += [[VAR]] + 2;
59 }
60
61 // Check for loops that don't mention containers
62 void noContainer() {
63   for (auto i = 0; i < v.size(); ++i) { }
64   // CHECK: for (auto & [[VAR:[a-z_]+]] : v) { }
65
66   for (auto i = 0; i < v.size(); ++i) ;
67   // CHECK: for (auto & [[VAR:[a-z_]+]] : v) ;
68 }