SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %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_phi:ptr<function, bool, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %10:f32 = load %9
    %x_30:f32 = let %10
    %12:vec2<f32> = construct %x_30, %x_30
    store %v1, %12
    %13:vec2<f32> = load %v1
    %x_32:vec2<f32> = let %13
    %15:vec2<f32> = fract %x_32
    store %b, %15
    %16:vec2<f32> = load %b
    %x_34:vec2<f32> = let %16
    %18:vec2<f32> = smoothstep vec2<f32>(1.0f), vec2<f32>(1.0f), %x_34
    %19:f32 = access %18, 0u
    store %a, %19
    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %21:f32 = load %20
    %x_38:f32 = let %21
    %23:f32 = load %a
    %x_39:f32 = let %23
    %25:f32 = load %a
    %x_40:f32 = let %25
    %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %28:f32 = load %27
    %x_42:f32 = let %28
    %30:vec4<f32> = construct %x_38, %x_39, %x_40, %x_42
    store %x_GLF_color, %30
    %31:f32 = load_vector_element %b, 0u
    %x_45:f32 = let %31
    %33:bool = lt %x_45, 1.0f
    %x_46:bool = let %33
    store %x_52_phi, %x_46
    if %x_46 [t: $B3] {  # if_1
      $B3: {  # true
        %35:f32 = load_vector_element %b, 1u
        %x_50:f32 = let %35
        %37:bool = lt %x_50, 1.0f
        store %x_51, %37
        %38:bool = load %x_51
        store %x_52_phi, %38
        exit_if  # if_1
      }
    }
    %39:bool = load %x_52_phi
    %x_52:bool = let %39
    if %x_52 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %42:f32 = load %41
        %x_57:f32 = let %42
        %44:f32 = load_vector_element %b, 0u
        %x_59:f32 = let %44
        %46:f32 = load_vector_element %b, 1u
        %x_61:f32 = let %46
        %48:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %49:f32 = load %48
        %x_63:f32 = let %49
        %51:vec4<f32> = construct %x_57, %x_59, %x_61, %x_63
        store %x_GLF_color, %51
        exit_if  # if_2
      }
      $B5: {  # false
        %52:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %53:f32 = load %52
        %x_66:f32 = let %53
        %55:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
        store %x_GLF_color, %55
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}

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