SKIP: FAILED

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

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

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

buf0 = 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, 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
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %15:f32 = load %14
    %x_35:f32 = let %15
    %17:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
    %18:u32 = pack4x8snorm %17
    store %a, %18
    %19:u32 = load %a
    %x_38:u32 = let %19
    %21:vec4<f32> = unpack4x8unorm %x_38
    store %v1, %21
    %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %23:f32 = load %22
    %x_41:f32 = let %23
    store %E, %x_41
    %25:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %26:i32 = load %25
    %x_43:i32 = let %26
    %28:f32 = load_vector_element %v1, %x_43
    %x_45:f32 = let %28
    %30:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %31:f32 = load %30
    %x_47:f32 = let %31
    %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %34:f32 = load %33
    %x_49:f32 = let %34
    %36:f32 = load %E
    %x_53:f32 = let %36
    %38:f32 = div %x_47, %x_49
    %39:f32 = sub %x_45, %38
    %40:f32 = abs %39
    %41:bool = lt %40, %x_53
    %x_54:bool = let %41
    store %x_70_phi, %x_54
    if %x_54 [t: $B3] {  # if_1
      $B3: {  # true
        %43:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %44:i32 = load %43
        %x_58:i32 = let %44
        %46:f32 = load_vector_element %v1, %x_58
        %x_60:f32 = let %46
        %48:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %49:f32 = load %48
        %x_62:f32 = let %49
        %51:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %52:f32 = load %51
        %x_64:f32 = let %52
        %54:f32 = load %E
        %x_68:f32 = let %54
        %56:f32 = div %x_62, %x_64
        %57:f32 = sub %x_60, %56
        %58:f32 = abs %57
        %59:bool = lt %58, %x_68
        store %x_69, %59
        %60:bool = load %x_69
        store %x_70_phi, %60
        exit_if  # if_1
      }
    }
    %61:bool = load %x_70_phi
    %x_70:bool = let %61
    store %x_86_phi, %x_70
    if %x_70 [t: $B4] {  # if_2
      $B4: {  # true
        %63:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %64:i32 = load %63
        %x_74:i32 = let %64
        %66:f32 = load_vector_element %v1, %x_74
        %x_76:f32 = let %66
        %68:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %69:f32 = load %68
        %x_78:f32 = let %69
        %71:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %72:f32 = load %71
        %x_80:f32 = let %72
        %74:f32 = load %E
        %x_84:f32 = let %74
        %76:f32 = div %x_78, %x_80
        %77:f32 = sub %x_76, %76
        %78:f32 = abs %77
        %79:bool = lt %78, %x_84
        store %x_85, %79
        %80:bool = load %x_85
        store %x_86_phi, %80
        exit_if  # if_2
      }
    }
    %81:bool = load %x_86_phi
    %x_86:bool = let %81
    store %x_102_phi, %x_86
    if %x_86 [t: $B5] {  # if_3
      $B5: {  # true
        %83:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %84:i32 = load %83
        %x_90:i32 = let %84
        %86:f32 = load_vector_element %v1, %x_90
        %x_92:f32 = let %86
        %88:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %89:f32 = load %88
        %x_94:f32 = let %89
        %91:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %92:f32 = load %91
        %x_96:f32 = let %92
        %94:f32 = load %E
        %x_100:f32 = let %94
        %96:f32 = div %x_94, %x_96
        %97:f32 = sub %x_92, %96
        %98:f32 = abs %97
        %99:bool = lt %98, %x_100
        store %x_101, %99
        %100:bool = load %x_101
        store %x_102_phi, %100
        exit_if  # if_3
      }
    }
    %101:bool = load %x_102_phi
    %x_102:bool = let %101
    if %x_102 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %103:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %104:i32 = load %103
        %x_107:i32 = let %104
        %106:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %107:i32 = load %106
        %x_110:i32 = let %107
        %109:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %110:i32 = load %109
        %x_113:i32 = let %110
        %112:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %113:i32 = load %112
        %x_116:i32 = let %113
        %115:f32 = convert %x_107
        %116:f32 = let %115
        %117:f32 = convert %x_110
        %118:f32 = let %117
        %119:f32 = convert %x_113
        %120:f32 = let %119
        %121:f32 = convert %x_116
        %122:vec4<f32> = construct %116, %118, %120, %121
        store %x_GLF_color, %122
        exit_if  # if_4
      }
      $B7: {  # false
        %123:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %124:i32 = load %123
        %x_120:i32 = let %124
        %126:f32 = convert %x_120
        %x_121:f32 = let %126
        %128:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
        store %x_GLF_color, %128
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %130:void = call %main_1
    %131:vec4<f32> = load %x_GLF_color
    %132:main_out = construct %131
    ret %132
  }
}

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