SKIP: FAILED

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

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

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

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %sums:ptr<function, array<f32, 3>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %indexable:ptr<function, mat2x4<f32>, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_40:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_42:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_44:f32 = load %12
    %14:array<f32, 3> = construct %x_40, %x_42, %x_44
    store %sums, %14
    store %i, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_50:i32 = load %i
        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_52:i32 = load %16
        %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_54:i32 = load %18
        %20:i32 = clamp %x_52, %x_54, 2i
        %21:bool = lt %x_50, %20
        if %21 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %22:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %x_59:i32 = load %22
        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_61:f32 = load %24
        %x_65:i32 = load %i
        %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_67:i32 = load %27
        %29:vec4<f32> = construct %x_61, 0.0f, 0.0f, 0.0f
        %30:vec4<f32> = construct 0.0f, %x_61, 0.0f, 0.0f
        %31:mat2x4<f32> = construct %29, %30
        store %indexable, %31
        %32:ptr<function, vec4<f32>, read_write> = access %indexable, %x_65
        %x_69:f32 = load_vector_element %32, %x_67
        %34:ptr<function, f32, read_write> = access %sums, %x_59
        %x_71:f32 = load %34
        %36:ptr<function, f32, read_write> = access %sums, %x_59
        %37:f32 = add %x_71, %x_69
        store %36, %37
        continue %b4
      }
      %b4 = block {  # continuing
        %x_74:i32 = load %i
        %39:i32 = add %x_74, 1i
        store %i, %39
        next_iteration %b3
      }
    }
    %40:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
    %x_77:i32 = load %40
    %42:ptr<function, f32, read_write> = access %sums, %x_77
    %x_79:f32 = load %42
    %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_81:f32 = load %44
    %46:bool = eq %x_79, %x_81
    if %46 [t: %b7, f: %b8] {  # if_2
      %b7 = block {  # true
        %47:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_87:i32 = load %47
        %49:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_90:i32 = load %49
        %51:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_93:i32 = load %51
        %53:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_96:i32 = load %53
        %55:f32 = convert %x_87
        %56:f32 = convert %x_90
        %57:f32 = convert %x_93
        %58:f32 = convert %x_96
        %59:vec4<f32> = construct %55, %56, %57, %58
        store %x_GLF_color, %59
        exit_if  # if_2
      }
      %b8 = block {  # false
        %60:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_100:i32 = load %60
        %x_101:f32 = convert %x_100
        %63:vec4<f32> = construct %x_101, %x_101, %x_101, %x_101
        store %x_GLF_color, %63
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b9 {
  %b9 = block {
    %65:void = call %main_1
    %66:vec4<f32> = load %x_GLF_color
    %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.  *
********************************************************************
