void messing_with_macros() {
  for (int i = 0; i < N; ++i) {
    printf("Value: %d\n", arr[i]);
  }
  // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
  // CHECK-FIXES: for (auto & elem : arr)
  // CHECK-FIXES-NEXT:  printf("Value: %d\n", elem);

  for (int i = 0; i < N; ++i) {
    printf("Value: %d\n", CONT arr[i]);
  }

  // Multiple macro arguments.
  for (int i = 0; i < N; ++i) {
    TWO_PARAM(arr[i], arr[i]);
    THREE_PARAM(arr[i], arr[i], arr[i]);
  }
  // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead
  // CHECK-FIXES: for (auto & elem : arr)
  // CHECK-FIXES-NEXT: TWO_PARAM(elem, elem);
  // CHECK-FIXES-NEXT: THREE_PARAM(elem, elem, elem);
}
void messing_with_macros() {
  for (int I = 0; I < N; ++I) {
    printf("Value: %d\n", Arr[I]);
  }
  // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
  // CHECK-FIXES: for (int I : Arr)
  // CHECK-FIXES-NEXT:  printf("Value: %d\n", I);

  for (int I = 0; I < N; ++I) {
    printf("Value: %d\n", CONT Arr[I]);
  }

  // Multiple macro arguments.
  for (int I = 0; I < N; ++I) {
    TWO_PARAM(Arr[I], Arr[I]);
    THREE_PARAM(Arr[I], Arr[I], Arr[I]);
  }
  // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead
  // CHECK-FIXES: for (int & I : Arr)
  // CHECK-FIXES-NEXT: TWO_PARAM(I, I);
  // CHECK-FIXES-NEXT: THREE_PARAM(I, I, I);
}