SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %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
    %x_49:vec4<f32> = load %gl_FragCoord
    %11:f32 = access %x_49, 0u
    %12:f32 = access %x_49, 1u
    %13:vec2<f32> = construct %11, %12
    store %uv, %13
    %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %x_52:f32 = load %14
    %16:vec4<f32> = construct %x_52, %x_52, %x_52, %x_52
    store %v1, %16
    %x_55:f32 = load_vector_element %uv, 1u
    %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %x_57:f32 = load %18
    %20:bool = gte %x_55, %x_57
    if %20 [t: %b3] {  # if_1
      %b3 = block {  # true
        %21:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %x_62:f32 = load %21
        store_vector_element %v1, 0u, %x_62
        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %x_65:f32 = load %23
        store_vector_element %v1, 1u, %x_65
        %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %x_68:f32 = load %25
        store_vector_element %v1, 2u, %x_68
        %27:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %x_71:f32 = load %27
        store_vector_element %v1, 3u, %x_71
        exit_if  # if_1
      }
    }
    %29:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
    %x_74:f32 = load %29
    store %a, %x_74
    %31:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
    %x_15:i32 = load %31
    store %i, %x_15
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %x_16:i32 = load %i
        %34:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %x_17:i32 = load %34
        %36:bool = lt %x_16, %x_17
        if %36 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        %37:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %x_84:f32 = load %37
        %39:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %x_86:f32 = load %39
        %41:bool = lt %x_84, %x_86
        if %41 [t: %b8] {  # if_3
          %b8 = block {  # true
            discard
            exit_if  # if_3
          }
        }
        %x_91:f32 = load_vector_element %v1, 0u
        %x_93:f32 = load_vector_element %v1, 1u
        %x_96:f32 = load_vector_element %v1, 2u
        %x_99:f32 = load_vector_element %v1, 3u
        %46:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
        %x_102:f32 = load %46
        %48:f32 = add %x_91, %x_93
        %49:f32 = add %48, %x_96
        %50:f32 = add %49, %x_99
        %51:f32 = pow %50, %x_102
        store %a, %51
        continue %b5
      }
      %b5 = block {  # continuing
        %x_18:i32 = load %i
        %53:i32 = add %x_18, 1i
        store %i, %53
        next_iteration %b4
      }
    }
    %x_104:f32 = load %a
    %55:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %x_106:f32 = load %55
    %57:bool = eq %x_104, %x_106
    if %57 [t: %b9, f: %b10] {  # if_4
      %b9 = block {  # true
        %x_111:vec4<f32> = load %v1
        store %x_GLF_v1, %x_111
        exit_if  # if_4
      }
      %b10 = block {  # false
        %59:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %x_20:i32 = load %59
        %x_113:f32 = convert %x_20
        %62:vec4<f32> = construct %x_113, %x_113, %x_113, %x_113
        store %x_GLF_v1, %62
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
  %b11 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %65:void = call %main_1
    %66:vec4<f32> = load %x_GLF_v1
    %67:main_out = construct %66
    ret %67
  }
}

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