#include <metal_stdlib>
using namespace metal;

#define TINT_ISOLATE_UB(VOLATILE_NAME) \
  volatile bool VOLATILE_NAME = true; \
  if (VOLATILE_NAME)

void f() {
  {
    int i0520 = 0;
    TINT_ISOLATE_UB(tint_volatile_true) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i62 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_1) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i0520 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_2) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i62 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_3) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i62 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_4) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i60 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_5) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i62 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_6) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
  {
    int i60 = 0;
    TINT_ISOLATE_UB(tint_volatile_true_7) while(true) {
      if (false) {
      } else {
        break;
      }
      {
      }
      continue;
    }
  }
}
