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, 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, 4> @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_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: {
    %a:ptr<function, u32, read_write> = var
    %v1: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_97:ptr<function, bool, read_write> = var
    %x_98:ptr<function, bool, read_write> = var
    %x_109:ptr<function, bool, read_write> = var
    %x_110:ptr<function, bool, read_write> = var
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %15:f32 = load %14
    %16:vec4<f32> = construct %15
    %17:u32 = pack4x8unorm %16
    store %a, %17
    %18:u32 = load %a
    %19:vec4<f32> = unpack4x8snorm %18
    store %v1, %19
    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %21:f32 = load %20
    %22:f32 = negation %21
    %23:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %24:f32 = load %23
    %25:f32 = div %22, %24
    %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %27:f32 = load %26
    %28:f32 = negation %27
    %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %30:f32 = load %29
    %31:f32 = div %28, %30
    %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %33:f32 = load %32
    %34:f32 = negation %33
    %35:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %36:f32 = load %35
    %37:f32 = div %34, %36
    %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %39:f32 = load %38
    %40:f32 = negation %39
    %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %42:f32 = load %41
    %43:f32 = div %40, %42
    %44:vec4<f32> = construct %25, %31, %37, %43
    store %r, %44
    %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %46:i32 = load %45
    %47:f32 = load_vector_element %v1, %46
    %48:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %49:i32 = load %48
    %50:f32 = load_vector_element %r, %49
    %51:bool = eq %47, %50
    %x_74:bool = let %51
    store %x_86, %x_74
    if %x_74 [t: $B3] {  # if_1
      $B3: {  # true
        %53:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %54:i32 = load %53
        %55:f32 = load_vector_element %v1, %54
        %56:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %57:i32 = load %56
        %58:f32 = load_vector_element %r, %57
        %59:bool = eq %55, %58
        store %x_85, %59
        %60:bool = load %x_85
        store %x_86, %60
        exit_if  # if_1
      }
    }
    %61:bool = load %x_86
    store %x_98, %61
    %62:bool = load %x_86
    if %62 [t: $B4] {  # if_2
      $B4: {  # true
        %63:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %64:i32 = load %63
        %65:f32 = load_vector_element %v1, %64
        %66:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %67:i32 = load %66
        %68:f32 = load_vector_element %r, %67
        %69:bool = eq %65, %68
        store %x_97, %69
        %70:bool = load %x_97
        store %x_98, %70
        exit_if  # if_2
      }
    }
    %71:bool = load %x_98
    store %x_110, %71
    %72:bool = load %x_98
    if %72 [t: $B5] {  # if_3
      $B5: {  # true
        %73:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %74:i32 = load %73
        %75:f32 = load_vector_element %v1, %74
        %76:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %77:i32 = load %76
        %78:f32 = load_vector_element %r, %77
        %79:bool = eq %75, %78
        store %x_109, %79
        %80:bool = load %x_109
        store %x_110, %80
        exit_if  # if_3
      }
    }
    %81:bool = load %x_110
    if %81 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %82:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %83:i32 = load %82
        %84:f32 = convert %83
        %85:f32 = let %84
        %86:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %87:i32 = load %86
        %88:f32 = convert %87
        %89:f32 = let %88
        %90:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %91:i32 = load %90
        %92:f32 = convert %91
        %93:f32 = let %92
        %94:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %95:i32 = load %94
        %96:f32 = convert %95
        %97:vec4<f32> = construct %85, %89, %93, %96
        store %x_GLF_color, %97
        exit_if  # if_4
      }
      $B7: {  # false
        %98:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %99:i32 = load %98
        %100:f32 = load_vector_element %v1, %99
        %101:vec4<f32> = construct %100
        store %x_GLF_color, %101
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %103:void = call %main_1
    %104:vec4<f32> = load %x_GLF_color
    %105:main_out = construct %104
    ret %105
  }
}

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