SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 4> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_1, 3> @offset(0)
}

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

$B1: {  # root
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %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
    %E:ptr<function, f32, read_write> = var
    %x_69:ptr<function, bool, read_write> = var
    %x_85:ptr<function, bool, read_write> = var
    %x_101:ptr<function, bool, read_write> = var
    %x_70_phi:ptr<function, bool, read_write> = var
    %x_86_phi:ptr<function, bool, read_write> = var
    %x_102_phi:ptr<function, bool, read_write> = var
    store %a, 1006648320u
    %14:u32 = load %a
    %x_40:u32 = let %14
    %16:vec4<f32> = unpack4x8snorm %x_40
    store %v1, %16
    store %E, 0.00999999977648258209f
    %17:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %18:i32 = load %17
    %x_43:i32 = let %18
    %20:f32 = load_vector_element %v1, %x_43
    %x_45:f32 = let %20
    %22:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %23:f32 = load %22
    %x_47:f32 = let %23
    %25:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %26:f32 = load %25
    %x_49:f32 = let %26
    %28:f32 = load %E
    %x_53:f32 = let %28
    %30:f32 = div %x_47, %x_49
    %31:f32 = sub %x_45, %30
    %32:f32 = abs %31
    %33:bool = lt %32, %x_53
    %x_54:bool = let %33
    store %x_70_phi, %x_54
    if %x_54 [t: $B3] {  # if_1
      $B3: {  # true
        %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %36:i32 = load %35
        %x_58:i32 = let %36
        %38:f32 = load_vector_element %v1, %x_58
        %x_60:f32 = let %38
        %40:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
        %41:f32 = load %40
        %x_62:f32 = let %41
        %43:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
        %44:f32 = load %43
        %x_64:f32 = let %44
        %46:f32 = load %E
        %x_68:f32 = let %46
        %48:f32 = div %x_62, %x_64
        %49:f32 = sub %x_60, %48
        %50:f32 = abs %49
        %51:bool = lt %50, %x_68
        store %x_69, %51
        %52:bool = load %x_69
        store %x_70_phi, %52
        exit_if  # if_1
      }
    }
    %53:bool = load %x_70_phi
    %x_70:bool = let %53
    store %x_86_phi, %x_70
    if %x_70 [t: $B4] {  # if_2
      $B4: {  # true
        %55:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %56:i32 = load %55
        %x_74:i32 = let %56
        %58:f32 = load_vector_element %v1, %x_74
        %x_76:f32 = let %58
        %60:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
        %61:f32 = load %60
        %x_78:f32 = let %61
        %63:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
        %64:f32 = load %63
        %x_80:f32 = let %64
        %66:f32 = load %E
        %x_84:f32 = let %66
        %68:f32 = div %x_78, %x_80
        %69:f32 = sub %x_76, %68
        %70:f32 = abs %69
        %71:bool = lt %70, %x_84
        store %x_85, %71
        %72:bool = load %x_85
        store %x_86_phi, %72
        exit_if  # if_2
      }
    }
    %73:bool = load %x_86_phi
    %x_86:bool = let %73
    store %x_102_phi, %x_86
    if %x_86 [t: $B5] {  # if_3
      $B5: {  # true
        %75:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %76:i32 = load %75
        %x_90:i32 = let %76
        %78:f32 = load_vector_element %v1, %x_90
        %x_92:f32 = let %78
        %80:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
        %81:f32 = load %80
        %x_94:f32 = let %81
        %83:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
        %84:f32 = load %83
        %x_96:f32 = let %84
        %86:f32 = load %E
        %x_100:f32 = let %86
        %88:f32 = div %x_94, %x_96
        %89:f32 = sub %x_92, %88
        %90:f32 = abs %89
        %91:bool = lt %90, %x_100
        store %x_101, %91
        %92:bool = load %x_101
        store %x_102_phi, %92
        exit_if  # if_3
      }
    }
    %93:bool = load %x_102_phi
    %x_102:bool = let %93
    if %x_102 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %95:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %96:i32 = load %95
        %x_107:i32 = let %96
        %98:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %99:i32 = load %98
        %x_110:i32 = let %99
        %101:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %102:i32 = load %101
        %x_113:i32 = let %102
        %104:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %105:i32 = load %104
        %x_116:i32 = let %105
        %107:f32 = convert %x_107
        %108:f32 = let %107
        %109:f32 = convert %x_110
        %110:f32 = let %109
        %111:f32 = convert %x_113
        %112:f32 = let %111
        %113:f32 = convert %x_116
        %114:vec4<f32> = construct %108, %110, %112, %113
        store %x_GLF_color, %114
        exit_if  # if_4
      }
      $B7: {  # false
        %115:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %116:i32 = load %115
        %x_120:i32 = let %116
        %118:f32 = load_vector_element %v1, %x_120
        %x_122:f32 = let %118
        %120:vec4<f32> = construct %x_122, %x_122, %x_122, %x_122
        store %x_GLF_color, %120
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %122:void = call %main_1
    %123:vec4<f32> = load %x_GLF_color
    %124:main_out = construct %123
    ret %124
  }
}

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