blob: fa7e14ebeedecfab509df3d88c5e089a11c660ba [file] [log] [blame]
Edwin Vane31896622013-01-08 14:36:29 +00001// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
2// RUN: cpp11-migrate -loop-convert %t.cpp -- -I %S/Inputs
3// RUN: FileCheck -input-file=%t.cpp %s
4
5#include "structures.h"
6
7void complexContainer() {
8 X exes[5];
9 int index = 0;
10
11 for (S::iterator i = exes[index].getS().begin(), e = exes[index].getS().end(); i != e; ++i) {
12 MutableVal k = *i;
13 MutableVal j = *i;
14 }
15 // CHECK: for ({{[a-zA-Z_ ]+&? ?}}[[VAR:[a-z_]+]] : exes[index].getS())
16 // CHECK-NEXT: MutableVal k = [[VAR]];
17 // CHECK-NEXT: MutableVal j = [[VAR]];
18}
19
20void f() {
21 /// begin()/end() - based for loops here:
22 T t;
23 for (T::iterator it = t.begin(); it != t.end(); ++it) {
24 printf("I found %d\n", *it);
25 }
26 // CHECK: for ({{[a-zA-Z_ ]+&? ?}}[[VAR:[a-z_]+]] : t)
27 // CHECK-NEXT: printf("I found %d\n", [[VAR]]);
28
29 T *pt;
30 for (T::iterator it = pt->begin(); it != pt->end(); ++it) {
31 printf("I found %d\n", *it);
32 }
33 // CHECK: for ({{[a-zA-Z_ ]+&? ?}}[[VAR:[a-z_]+]] : *pt)
34 // CHECK-NEXT: printf("I found %d\n", [[VAR]]);
35
36 S s;
37 for (S::const_iterator it = s.begin(); it != s.end(); ++it) {
38 printf("s has value %d\n", (*it).x);
39 }
40 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : s)
41 // CHECK-NEXT: printf("s has value %d\n", ([[VAR]]).x);
42
43 S *ps;
44 for (S::const_iterator it = ps->begin(); it != ps->end(); ++it) {
45 printf("s has value %d\n", (*it).x);
46 }
47 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : *ps)
48 // CHECK-NEXT: printf("s has value %d\n", ([[VAR]]).x);
49
50 for (S::const_iterator it = s.begin(); it != s.end(); ++it) {
51 printf("s has value %d\n", it->x);
52 }
53 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : s)
54 // CHECK-NEXT: printf("s has value %d\n", [[VAR]].x);
55
56 for (S::iterator it = s.begin(); it != s.end(); ++it) {
57 it->x = 3;
58 }
59 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : s)
60 // CHECK-NEXT: [[VAR]].x = 3;
61
62 for (S::iterator it = s.begin(); it != s.end(); ++it) {
63 (*it).x = 3;
64 }
65 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : s)
66 // CHECK-NEXT: ([[VAR]]).x = 3;
67
68 for (S::iterator it = s.begin(); it != s.end(); ++it) {
69 it->nonConstFun(4, 5);
70 }
71 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : s)
72 // CHECK-NEXT: [[VAR]].nonConstFun(4, 5);
73
74 U u;
75 for (U::iterator it = u.begin(); it != u.end(); ++it) {
76 printf("s has value %d\n", it->x);
77 }
78 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : u)
79 // CHECK-NEXT: printf("s has value %d\n", [[VAR]].x);
80
81 for (U::iterator it = u.begin(); it != u.end(); ++it) {
82 printf("s has value %d\n", (*it).x);
83 }
84 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : u)
85 // CHECK-NEXT: printf("s has value %d\n", ([[VAR]]).x);
86
87 U::iterator A;
88 for (U::iterator i = u.begin(); i != u.end(); ++i)
89 int k = A->x + i->x;
90 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : u)
91 // CHECK-NEXT: int k = A->x + [[VAR]].x;
92
93 dependent<int> v;
94 for (dependent<int>::const_iterator it = v.begin();
95 it != v.end(); ++it) {
96 printf("Fibonacci number is %d\n", *it);
97 }
98 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : v)
99 // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
100
101 for (dependent<int>::const_iterator it(v.begin());
102 it != v.end(); ++it) {
103 printf("Fibonacci number is %d\n", *it);
104 }
105 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : v)
106 // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]);
107
108 doublyDependent<int,int> intmap;
109 for (doublyDependent<int,int>::iterator it = intmap.begin();
110 it != intmap.end(); ++it) {
111 printf("intmap[%d] = %d", it->first, it->second);
112 }
113 // CHECK: for ({{[a-zA-Z_ ]*&? ?}}[[VAR:[a-z_]+]] : intmap)
114 // CHECK-NEXT: printf("intmap[%d] = %d", [[VAR]].first, [[VAR]].second);
115}