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, 7> @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, vec4<f32>, read_write> = var
    %v2:ptr<function, vec4<f32>, read_write> = var
    %v3:ptr<function, vec4<f32>, read_write> = var
    %v4:ptr<function, vec4<f32>, read_write> = var
    %x_69:ptr<function, bool, read_write> = var
    %x_70:ptr<function, bool, read_write> = var
    %x_77:ptr<function, bool, read_write> = var
    %x_78:ptr<function, bool, read_write> = var
    %x_85:ptr<function, bool, read_write> = var
    %x_86:ptr<function, bool, read_write> = var
    %x_93:ptr<function, bool, read_write> = var
    %x_94:ptr<function, bool, read_write> = var
    %16:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %17:f32 = load %16
    %18:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %19:f32 = load %18
    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %21:f32 = load %20
    %22:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %23:f32 = load %22
    %24:vec4<f32> = construct %17, %19, %21, %23
    store %v1, %24
    store %v2, vec4<f32>(1.57079637050628662109f, 1.11976957321166992188f, 1.0f, 0.92729520797729492188f)
    %25:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %26:f32 = load %25
    %27:vec4<f32> = construct %26
    store %v3, %27
    %28:vec4<f32> = load %v1
    %29:vec4<f32> = load %v2
    %30:vec4<f32> = load %v3
    %31:vec4<f32> = smoothstep %28, %29, %30
    store %v4, %31
    %32:vec4<f32> = load %v4
    %33:vec4<f32> = swizzle %32, xywx
    store %x_GLF_color, %33
    %34:f32 = load_vector_element %v4, 0u
    %35:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
    %36:f32 = load %35
    %37:bool = gt %34, %36
    %x_62:bool = let %37
    store %x_70, %x_62
    if %x_62 [t: $B3] {  # if_1
      $B3: {  # true
        %39:f32 = load_vector_element %v4, 0u
        %40:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %41:f32 = load %40
        %42:bool = lt %39, %41
        store %x_69, %42
        %43:bool = load %x_69
        store %x_70, %43
        exit_if  # if_1
      }
    }
    %44:bool = load %x_70
    store %x_78, %44
    %45:bool = load %x_70
    if %45 [t: $B4] {  # if_2
      $B4: {  # true
        %46:f32 = load_vector_element %v4, 1u
        %47:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %48:f32 = load %47
        %49:bool = gt %46, %48
        store %x_77, %49
        %50:bool = load %x_77
        store %x_78, %50
        exit_if  # if_2
      }
    }
    %51:bool = load %x_78
    store %x_86, %51
    %52:bool = load %x_78
    if %52 [t: $B5] {  # if_3
      $B5: {  # true
        %53:f32 = load_vector_element %v4, 1u
        %54:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
        %55:f32 = load %54
        %56:bool = lt %53, %55
        store %x_85, %56
        %57:bool = load %x_85
        store %x_86, %57
        exit_if  # if_3
      }
    }
    %58:bool = load %x_86
    store %x_94, %58
    %59:bool = load %x_86
    if %59 [t: $B6] {  # if_4
      $B6: {  # true
        %60:f32 = load_vector_element %v4, 3u
        %61:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %62:f32 = load %61
        %63:bool = eq %60, %62
        store %x_93, %63
        %64:bool = load %x_93
        store %x_94, %64
        exit_if  # if_4
      }
    }
    %65:bool = load %x_94
    if %65 [t: $B7, f: $B8] {  # if_5
      $B7: {  # true
        %66:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %67:f32 = load %66
        %68:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %69:f32 = load %68
        %70:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %71:f32 = load %70
        %72:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %73:f32 = load %72
        %74:vec4<f32> = construct %67, %69, %71, %73
        store %x_GLF_color, %74
        exit_if  # if_5
      }
      $B8: {  # false
        %75:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %76:f32 = load %75
        %77:vec4<f32> = construct %76
        store %x_GLF_color, %77
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %79:void = call %main_1
    %80:vec4<f32> = load %x_GLF_color
    %81:main_out = construct %80
    ret %81
  }
}

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