SKIP: FAILED

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 4> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 2> @offset(0)
}

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

$B1: {  # root
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_v1:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %uv:ptr<function, vec2<f32>, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %11:vec4<f32> = load %gl_FragCoord
    %12:vec2<f32> = swizzle %11, xy
    store %uv, %12
    %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %14:f32 = load %13
    %15:vec4<f32> = construct %14
    store %v1, %15
    %16:f32 = load_vector_element %uv, 1u
    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %18:f32 = load %17
    %19:bool = gte %16, %18
    if %19 [t: $B3] {  # if_1
      $B3: {  # true
        %20:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %21:f32 = load %20
        store_vector_element %v1, 0u, %21
        %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %23:f32 = load %22
        store_vector_element %v1, 1u, %23
        %24:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %25:f32 = load %24
        store_vector_element %v1, 2u, %25
        %26:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %27:f32 = load %26
        store_vector_element %v1, 3u, %27
        exit_if  # if_1
      }
    }
    %28:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
    %29:f32 = load %28
    store %a, %29
    %30:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
    %31:i32 = load %30
    store %i, %31
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %32:i32 = load %i
        %33:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %34:i32 = load %33
        %35:bool = lt %32, %34
        if %35 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %36:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %37:f32 = load %36
        %38:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %39:f32 = load %38
        %40:bool = lt %37, %39
        if %40 [t: $B8] {  # if_3
          $B8: {  # true
            store %continue_execution, false
            exit_if  # if_3
          }
        }
        %41:f32 = load_vector_element %v1, 0u
        %42:f32 = load_vector_element %v1, 1u
        %43:f32 = add %41, %42
        %44:f32 = load_vector_element %v1, 2u
        %45:f32 = add %43, %44
        %46:f32 = load_vector_element %v1, 3u
        %47:f32 = add %45, %46
        %48:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
        %49:f32 = load %48
        %50:f32 = pow %47, %49
        store %a, %50
        continue  # -> $B5
      }
      $B5: {  # continuing
        %51:i32 = load %i
        %52:i32 = add %51, 1i
        store %i, %52
        next_iteration  # -> $B4
      }
    }
    %53:f32 = load %a
    %54:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %55:f32 = load %54
    %56:bool = eq %53, %55
    if %56 [t: $B9, f: $B10] {  # if_4
      $B9: {  # true
        %57:vec4<f32> = load %v1
        store %x_GLF_v1, %57
        exit_if  # if_4
      }
      $B10: {  # false
        %58:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %59:i32 = load %58
        %60:f32 = convert %59
        %61:vec4<f32> = construct %60
        store %x_GLF_v1, %61
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B11: {
    store %gl_FragCoord, %gl_FragCoord_param
    %64:void = call %main_1
    %65:vec4<f32> = load %x_GLF_v1
    %66:main_out = construct %65
    %67:bool = load %continue_execution
    %68:bool = eq %67, false
    if %68 [t: $B12] {  # if_5
      $B12: {  # true
        terminate_invocation
      }
    }
    ret %66
  }
}

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