SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
  matrix_a_uni:mat4x4<f32> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %x:ptr<function, i32, read_write> = var
    %matrix_u:ptr<function, vec4<f32>, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %matrix_b:ptr<function, vec4<f32>, read_write> = var
    %x_42:ptr<function, vec4<f32>, read_write> = var
    store %x, 4i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %9:i32 = load %x
        %10:bool = gte %9, 1i
        if %10 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %11:i32 = load %x
        %x_11:i32 = let %11
        store_vector_element %matrix_u, %x_11, 1.0f
        continue  # -> $B4
      }
      $B4: {  # continuing
        %13:i32 = load %x
        %14:i32 = sub %13, 1i
        store %x, %14
        next_iteration  # -> $B3
      }
    }
    store %b, 4i
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %15:ptr<uniform, vec4<f32>, read> = access %x_8, 0u, 0i
        %16:f32 = load_vector_element %15, 0u
        %17:bool = lt %16, -1.0f
        if %17 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %18:i32 = load %b
        %x_14:i32 = let %18
        %20:i32 = load %b
        %21:bool = gt %20, 1i
        if %21 [t: $B11, f: $B12] {  # if_3
          $B11: {  # true
            %22:vec4<f32> = load %matrix_b
            %23:vec4<f32> = load %matrix_b
            %24:vec4<f32> = min %22, %23
            store %x_42, %24
            exit_if  # if_3
          }
          $B12: {  # false
            %25:vec4<f32> = load %matrix_u
            store %x_42, %25
            exit_if  # if_3
          }
        }
        %26:f32 = load_vector_element %x_42, 1u
        store_vector_element %matrix_b, %x_14, %26
        continue  # -> $B8
      }
      $B8: {  # continuing
        %27:i32 = load %b
        %28:i32 = sub %27, 1i
        store %b, %28
        next_iteration  # -> $B7
      }
    }
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %30:void = call %main_1
    %31:vec4<f32> = load %x_GLF_color
    %32:main_out = construct %31
    ret %32
  }
}

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