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, 1> @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_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %v1:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, vec2<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %x_51:ptr<function, bool, read_write> = var
    %x_52:ptr<function, bool, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %10:f32 = load %9
    %11:vec2<f32> = construct %10
    store %v1, %11
    %12:vec2<f32> = load %v1
    %13:vec2<f32> = fract %12
    store %b, %13
    %14:vec2<f32> = load %b
    %15:vec2<f32> = smoothstep vec2<f32>(1.0f), vec2<f32>(1.0f), %14
    %16:f32 = access %15, 0u
    store %a, %16
    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %18:f32 = load %17
    %19:f32 = load %a
    %20:f32 = load %a
    %21:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %22:f32 = load %21
    %23:vec4<f32> = construct %18, %19, %20, %22
    store %x_GLF_color, %23
    %24:f32 = load_vector_element %b, 0u
    %x_46:bool = lt %24, 1.0f
    store %x_52, %x_46
    if %x_46 [t: %b3] {  # if_1
      %b3 = block {  # true
        %26:f32 = load_vector_element %b, 1u
        %27:bool = lt %26, 1.0f
        store %x_51, %27
        %28:bool = load %x_51
        store %x_52, %28
        exit_if  # if_1
      }
    }
    %29:bool = load %x_52
    if %29 [t: %b4, f: %b5] {  # if_2
      %b4 = block {  # true
        %30:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %31:f32 = load %30
        %32:f32 = load_vector_element %b, 0u
        %33:f32 = load_vector_element %b, 1u
        %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %35:f32 = load %34
        %36:vec4<f32> = construct %31, %32, %33, %35
        store %x_GLF_color, %36
        exit_if  # if_2
      }
      %b5 = block {  # false
        %37:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %38:f32 = load %37
        %39:vec4<f32> = construct %38
        store %x_GLF_color, %39
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b6 {
  %b6 = block {
    %41:void = call %main_1
    %42:vec4<f32> = load %x_GLF_color
    %43:main_out = construct %42
    ret %43
  }
}

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