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, 2> @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, 4> @offset(0)
}

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

%b1 = block {  # root
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %m23:ptr<function, mat2x3<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %x_46:f32 = load %8
    %10:vec3<f32> = construct %x_46, 0.0f, 0.0f
    %11:vec3<f32> = construct 0.0f, %x_46, 0.0f
    %12:mat2x3<f32> = construct %10, %11
    store %m23, %12
    store %i, 1i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_80:ptr<function, bool, read_write> = var
        %x_81_phi:ptr<function, bool, read_write> = var
        %x_54:i32 = load %i
        %16:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %x_56:i32 = load %16
        %18:bool = lt %x_54, %x_56
        if %18 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %19:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_60:i32 = load %19
        %21:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_62:i32 = load %21
        %23:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %x_64:f32 = load %23
        %25:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
        %x_66:f32 = load_vector_element %25, %x_62
        %27:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
        %28:f32 = add %x_66, %x_64
        store_vector_element %27, %x_62, %28
        %x_70:f32 = load_vector_element %gl_FragCoord, 1u
        %30:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %x_72:f32 = load %30
        %32:bool = lt %x_70, %x_72
        if %32 [t: %b7] {  # if_2
          %b7 = block {  # true
            exit_if  # if_2
          }
        }
        store %x_81_phi, true
        if true [t: %b8] {  # if_3
          %b8 = block {  # true
            %x_79:f32 = load_vector_element %gl_FragCoord, 0u
            %34:bool = lt %x_79, 0.0f
            store %x_80, %34
            %35:bool = load %x_80
            store %x_81_phi, %35
            exit_if  # if_3
          }
        }
        %x_81:bool = load %x_81_phi
        %37:bool = eq %x_81, false
        if %37 [t: %b9] {  # if_4
          %b9 = block {  # true
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_85:i32 = load %i
        %39:i32 = add %x_85, 1i
        store %i, %39
        next_iteration %b3
      }
    }
    %x_87:mat2x3<f32> = load %m23
    %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_89:i32 = load %41
    %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_92:i32 = load %43
    %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_95:i32 = load %45
    %47:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_98:i32 = load %47
    %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_101:i32 = load %49
    %51:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %x_104:i32 = load %51
    %53:f32 = convert %x_89
    %54:f32 = convert %x_92
    %55:f32 = convert %x_95
    %56:vec3<f32> = construct %53, %54, %55
    %57:f32 = convert %x_98
    %58:f32 = convert %x_101
    %59:f32 = convert %x_104
    %60:vec3<f32> = construct %57, %58, %59
    %x_108:mat2x3<f32> = construct %56, %60
    %62:vec3<f32> = access %x_87, 0u
    %63:vec3<f32> = access %x_108, 0u
    %64:vec3<bool> = eq %62, %63
    %65:bool = all %64
    %66:vec3<f32> = access %x_87, 1u
    %67:vec3<f32> = access %x_108, 1u
    %68:vec3<bool> = eq %66, %67
    %69:bool = all %68
    %70:bool = and %65, %69
    if %70 [t: %b10, f: %b11] {  # if_5
      %b10 = block {  # true
        %71:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_122:i32 = load %71
        %73:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_125:i32 = load %73
        %75:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_128:i32 = load %75
        %77:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_131:i32 = load %77
        %79:f32 = convert %x_122
        %80:f32 = convert %x_125
        %81:f32 = convert %x_128
        %82:f32 = convert %x_131
        %83:vec4<f32> = construct %79, %80, %81, %82
        store %x_GLF_color, %83
        exit_if  # if_5
      }
      %b11 = block {  # false
        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_135:i32 = load %84
        %x_136:f32 = convert %x_135
        %87:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
        store %x_GLF_color, %87
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
  %b12 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %90:void = call %main_1
    %91:vec4<f32> = load %x_GLF_color
    %92:main_out = construct %91
    ret %92
  }
}

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