SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  zero:i32 @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%returnRed_ = func():vec4<f32> {
  $B2: {
    %x_33:ptr<function, bool, read_write> = var, false
    %x_34:ptr<function, vec4<f32>, read_write> = var
    %x_48:ptr<function, vec4<f32>, read_write> = var
    %x_51:ptr<function, vec4<f32>, read_write> = var
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %x_49:ptr<function, bool, read_write> = var
        loop [b: $B4, c: $B5] {  # loop_2
          $B4: {  # body
            %9:ptr<uniform, i32, read> = access %x_6, 0u
            %10:i32 = load %9
            %11:bool = eq %10, 1i
            if %11 [t: $B6] {  # if_1
              $B6: {  # true
                store %x_33, true
                store %x_34, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                store %x_48, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                store %x_49, true
                exit_loop  # loop_2
              }
            }
            continue  # -> $B5
          }
          $B5: {  # continuing
            store %x_48, vec4<f32>(0.0f)
            store %x_49, false
            break_if true  # -> [t: exit_loop loop_2, f: $B4]
          }
        }
        %12:vec4<f32> = load %x_48
        store %x_51, %12
        %13:bool = load %x_49
        if %13 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        store %x_33, true
        store %x_34, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        store %x_51, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_loop  # loop_1
      }
    }
    %14:vec4<f32> = load %x_51
    ret %14
  }
}
%main_1 = func():void {
  $B8: {
    loop [b: $B9, c: $B10] {  # loop_3
      $B9: {  # body
        %16:vec4<f32> = call %returnRed_
        %x_30:vec4<f32> = let %16
        store %x_GLF_color, %x_30
        if false [t: $B11, f: $B12] {  # if_3
          $B11: {  # true
            exit_if  # if_3
          }
          $B12: {  # false
            exit_loop  # loop_3
          }
        }
        continue  # -> $B10
      }
      $B10: {  # continuing
        next_iteration  # -> $B9
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %19:void = call %main_1
    %20:vec4<f32> = load %x_GLF_color
    %21:main_out = construct %20
    ret %21
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
