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_36_phi:ptr<function, bool, read_write> = var
    %x_51_phi:ptr<function, vec4<f32>, read_write> = var
    store %x_36_phi, false
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %x_48_phi:ptr<function, vec4<f32>, read_write> = var
        %x_49_phi:ptr<function, bool, read_write> = var
        %11:bool = load %x_36_phi
        %x_36:bool = let %11
        loop [b: $B4, c: $B5] {  # loop_2
          $B4: {  # body
            %13:ptr<uniform, i32, read> = access %x_6, 0u
            %14:i32 = load %13
            %x_44:i32 = let %14
            %16:bool = eq %x_44, 1i
            if %16 [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_phi, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                store %x_49_phi, true
                exit_loop  # loop_2
              }
            }
            continue  # -> $B5
          }
          $B5: {  # continuing
            store %x_48_phi, vec4<f32>(0.0f)
            store %x_49_phi, false
            break_if true  # -> [t: exit_loop loop_2, f: $B4]
          }
        }
        %17:vec4<f32> = load %x_48_phi
        store %x_48, %17
        %18:bool = load %x_49_phi
        %x_49:bool = let %18
        %20:vec4<f32> = load %x_48
        store %x_51_phi, %20
        if %x_49 [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_phi, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_loop  # loop_1
      }
    }
    %21:vec4<f32> = load %x_51_phi
    %x_51:vec4<f32> = let %21
    ret %x_51
  }
}
%main_1 = func():void {
  $B8: {
    loop [b: $B9, c: $B10] {  # loop_3
      $B9: {  # body
        %24:vec4<f32> = call %returnRed_
        %x_30:vec4<f32> = let %24
        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: {
    %27:void = call %main_1
    %28:vec4<f32> = load %x_GLF_color
    %29:main_out = construct %28
    ret %29
  }
}

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.  *
********************************************************************
