blob: 0075f5eab69ae76819f3322cf8a5c5d22443f461 [file] [log] [blame]
Edwin Vane31896622013-01-08 14:36:29 +00001// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
2// RUN: grep -Ev "// *[A-Z-]+:" %S/Inputs/negative-header.h > \
3// RUN: %T/negative-header.h
4// RUN: cpp11-migrate -loop-convert %t.cpp -- -I %S/Inputs/
5// RUN: FileCheck -input-file=%t.cpp %s
6// RUN: FileCheck -input-file=%T/negative-header.h %S/Inputs/negative-header.h
7
8#include "negative-header.h"
9#include "structures.h"
10
11// Single FileCheck line to make sure that no loops are converted.
12// CHECK-NOT: for ({{.*[^:]:[^:].*}})
13
14const int N = 6;
15int arr[N] = {1, 2, 3, 4, 5, 6};
16int (*pArr)[N] = &arr;
17int sum = 0;
18
19// Checks for the index start and end:
20void indexStartAndEnd() {
21 for (int i = 0; i < N + 1; ++i)
22 sum += arr[i];
23
24 for (int i = 0; i < N - 1; ++i)
25 sum += arr[i];
26
27 for (int i = 1; i < N; ++i)
28 sum += arr[i];
29
30 for (int i = 1; i < N; ++i)
31 sum += arr[i];
32
33 for (int i = 0; ; ++i)
34 sum += (*pArr)[i];
35}
36
37// Checks for invalid increment steps:
38void increment() {
39 for (int i = 0; i < N; --i)
40 sum += arr[i];
41
42 for (int i = 0; i < N; i)
43 sum += arr[i];
44
45 for (int i = 0; i < N;)
46 sum += arr[i];
47
48 for (int i = 0; i < N; i += 2)
49 sum ++;
50}
51
52// Checks to make sure that the index isn't used outside of the array:
53void indexUse() {
54 for (int i = 0; i < N; ++i)
55 arr[i] += 1 + i;
56}
57
58// Check for loops that don't mention arrays
59void noArray() {
60 for (int i = 0; i < N; ++i)
61 sum += i;
62
63 for (int i = 0; i < N; ++i) { }
64
65 for (int i = 0; i < N; ++i) ;
66}
67
68// Checks for incorrect loop variables.
69void mixedVariables() {
70 int badIndex;
71 for (int i = 0; badIndex < N; ++i)
72 sum += arr[i];
73
74 for (int i = 0; i < N; ++badIndex)
75 sum += arr[i];
76
77 for (int i = 0; badIndex < N; ++badIndex)
78 sum += arr[i];
79
80 for (int i = 0; badIndex < N; ++badIndex)
81 sum += arr[badIndex];
82}
83
84// Checks for multiple arrays indexed.
85void multipleArrays() {
86 int badArr[N];
87
88 for (int i = 0; i < N; ++i)
89 sum += arr[i] + badArr[i];
90
91 for (int i = 0; i < N; ++i) {
92 int k = badArr[i];
93 sum += arr[i] + k;
94 }
95}
96
97struct HasArr {
98 int Arr[N];
99 Val ValArr[N];
100};
101
102struct HasIndirectArr {
103 HasArr HA;
104 void implicitThis() {
105 for (int i = 0; i < N; ++i) {
106 printf("%d", HA.Arr[i]);
107 }
108
109 for (int i = 0; i < N; ++i) {
110 printf("%d", HA.ValArr[i].x);
111 }
112 }
113
114 void explicitThis() {
115 for (int i = 0; i < N; ++i) {
116 printf("%d", this->HA.Arr[i]);
117 }
118
119 for (int i = 0; i < N; ++i) {
120 printf("%d", this->HA.ValArr[i].x);
121 }
122 }
123};