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

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

%b1 = block {  # root
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_10: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 {
    %a:ptr<function, u32, read_write> = var
    %values:ptr<function, vec4<f32>, read_write> = var
    %r:ptr<function, vec4<f32>, read_write> = var
    %x_85:ptr<function, bool, read_write> = var
    %x_86:ptr<function, bool, read_write> = var
    %x_101:ptr<function, bool, read_write> = var
    %x_102:ptr<function, bool, read_write> = var
    %x_117:ptr<function, bool, read_write> = var
    %x_118:ptr<function, bool, read_write> = var
    store %a, 1006648320u
    %14:u32 = load %a
    %15:vec4<f32> = unpack4x8unorm %14
    store %values, %15
    %16:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
    %17:f32 = load %16
    %18:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %19:f32 = load %18
    %20:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %21:f32 = load %20
    %22:f32 = div %19, %21
    %23:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
    %24:f32 = load %23
    %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %26:f32 = load %25
    %27:f32 = div %24, %26
    %28:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %29:f32 = load %28
    %30:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %31:f32 = load %30
    %32:f32 = div %29, %31
    %33:vec4<f32> = construct %17, %22, %27, %32
    store %r, %33
    %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %35:i32 = load %34
    %36:f32 = load_vector_element %values, %35
    %37:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %38:i32 = load %37
    %39:f32 = load_vector_element %r, %38
    %40:f32 = sub %36, %39
    %41:f32 = abs %40
    %42:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
    %43:f32 = load %42
    %x_70:bool = lt %41, %43
    store %x_86, %x_70
    if %x_70 [t: %b3] {  # if_1
      %b3 = block {  # true
        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %46:i32 = load %45
        %47:f32 = load_vector_element %values, %46
        %48:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %49:i32 = load %48
        %50:f32 = load_vector_element %r, %49
        %51:f32 = sub %47, %50
        %52:f32 = abs %51
        %53:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %54:f32 = load %53
        %55:bool = lt %52, %54
        store %x_85, %55
        %56:bool = load %x_85
        store %x_86, %56
        exit_if  # if_1
      }
    }
    %57:bool = load %x_86
    store %x_102, %57
    %58:bool = load %x_86
    if %58 [t: %b4] {  # if_2
      %b4 = block {  # true
        %59:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %60:i32 = load %59
        %61:f32 = load_vector_element %values, %60
        %62:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %63:i32 = load %62
        %64:f32 = load_vector_element %r, %63
        %65:f32 = sub %61, %64
        %66:f32 = abs %65
        %67:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %68:f32 = load %67
        %69:bool = lt %66, %68
        store %x_101, %69
        %70:bool = load %x_101
        store %x_102, %70
        exit_if  # if_2
      }
    }
    %71:bool = load %x_102
    store %x_118, %71
    %72:bool = load %x_102
    if %72 [t: %b5] {  # if_3
      %b5 = block {  # true
        %73:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %74:i32 = load %73
        %75:f32 = load_vector_element %values, %74
        %76:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %77:i32 = load %76
        %78:f32 = load_vector_element %r, %77
        %79:f32 = sub %75, %78
        %80:f32 = abs %79
        %81:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %82:f32 = load %81
        %83:bool = lt %80, %82
        store %x_117, %83
        %84:bool = load %x_117
        store %x_118, %84
        exit_if  # if_3
      }
    }
    %85:bool = load %x_118
    if %85 [t: %b6, f: %b7] {  # if_4
      %b6 = block {  # true
        %86:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %87:i32 = load %86
        %88:f32 = convert %87
        %89:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %90:i32 = load %89
        %91:f32 = convert %90
        %92:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %93:i32 = load %92
        %94:f32 = convert %93
        %95:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %96:i32 = load %95
        %97:f32 = convert %96
        %98:vec4<f32> = construct %88, %91, %94, %97
        store %x_GLF_color, %98
        exit_if  # if_4
      }
      %b7 = block {  # false
        %99:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %100:i32 = load %99
        %101:f32 = convert %100
        %102:vec4<f32> = construct %101
        store %x_GLF_color, %102
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %104:void = call %main_1
    %105:vec4<f32> = load %x_GLF_color
    %106:main_out = construct %105
    ret %106
  }
}

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