// 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" const int N = 10; int nums[N]; int sum = 0; Val Arr[N]; Val &func(Val &); void aliasing() { // The extra blank braces are left as a placeholder for after the variable // declaration is deleted. for (int i = 0; i < N; ++i) { Val &t = Arr[i]; { } int y = t.x; } // CHECK: for (auto & t : Arr) // CHECK-NEXT: { } // CHECK-NEXT: int y = t.x; for (int i = 0; i < N; ++i) { Val &t = Arr[i]; int y = t.x; int z = Arr[i].x + t.x; } // CHECK: for (auto & [[VAR:[a-z_]+]] : Arr) // CHECK-NEXT: Val &t = [[VAR]]; // CHECK-NEXT: int y = t.x; // CHECK-NEXT: int z = [[VAR]].x + t.x; for (int i = 0; i < N; ++i) { Val t = Arr[i]; int y = t.x; int z = Arr[i].x + t.x; } // CHECK: for (auto & [[VAR:[a-z_]+]] : Arr) // CHECK-NEXT: Val t = [[VAR]]; // CHECK-NEXT: int y = t.x; // CHECK-NEXT: int z = [[VAR]].x + t.x; for (int i = 0; i < N; ++i) { Val &t = func(Arr[i]); int y = t.x; } // CHECK: for (auto & [[VAR:[a-z_]+]] : Arr) // CHECK-NEXT: Val &t = func([[VAR]]); // CHECK-NEXT: int y = t.x; } void sameNames() { int num = 0; for (int i = 0; i < N; ++i) { printf("Fibonacci number is %d\n", nums[i]); sum += nums[i] + 2 + num; (void) nums[i]; } // CHECK: int num = 0; // CHECK-NEXT: for (auto & [[VAR:[a-z_]+]] : nums) // CHECK-NEXT: printf("Fibonacci number is %d\n", [[VAR]]); // CHECK-NEXT: sum += [[VAR]] + 2 + num; // CHECK-NOT: (void) num; // CHECK: } }