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, 18> @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)
}

buf2 = struct @align(4) {
  one:i32 @offset(0)
}

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

$B1: {  # root
  %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_15:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %m:ptr<function, mat4x4<f32>, read_write> = var
    %v:ptr<function, vec4<f32>, read_write> = var
    %f:ptr<function, f32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %zero:ptr<function, f32, read_write> = var
    store %x_GLF_global_loop_count, 0i
    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %15:f32 = load %14
    %16:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %17:f32 = load %16
    %18:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
    %19:f32 = load %18
    %20:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
    %21:f32 = load %20
    %22:vec4<f32> = construct %15, %17, %19, %21
    %23:vec4<f32> = let %22
    %24:ptr<uniform, f32, read> = access %x_7, 0u, 5i, 0u
    %25:f32 = load %24
    %26:ptr<uniform, f32, read> = access %x_7, 0u, 6i, 0u
    %27:f32 = load %26
    %28:ptr<uniform, f32, read> = access %x_7, 0u, 7i, 0u
    %29:f32 = load %28
    %30:ptr<uniform, f32, read> = access %x_7, 0u, 8i, 0u
    %31:f32 = load %30
    %32:vec4<f32> = construct %25, %27, %29, %31
    %33:vec4<f32> = let %32
    %34:ptr<uniform, f32, read> = access %x_7, 0u, 9i, 0u
    %35:f32 = load %34
    %36:ptr<uniform, f32, read> = access %x_7, 0u, 10i, 0u
    %37:f32 = load %36
    %38:ptr<uniform, f32, read> = access %x_7, 0u, 11i, 0u
    %39:f32 = load %38
    %40:ptr<uniform, f32, read> = access %x_7, 0u, 12i, 0u
    %41:f32 = load %40
    %42:vec4<f32> = construct %35, %37, %39, %41
    %43:vec4<f32> = let %42
    %44:ptr<uniform, f32, read> = access %x_7, 0u, 13i, 0u
    %45:f32 = load %44
    %46:ptr<uniform, f32, read> = access %x_7, 0u, 14i, 0u
    %47:f32 = load %46
    %48:ptr<uniform, f32, read> = access %x_7, 0u, 15i, 0u
    %49:f32 = load %48
    %50:ptr<uniform, f32, read> = access %x_7, 0u, 16i, 0u
    %51:f32 = load %50
    %52:vec4<f32> = construct %45, %47, %49, %51
    %53:mat4x4<f32> = construct %23, %33, %43, %52
    store %m, %53
    %54:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %55:f32 = load %54
    %56:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %57:f32 = load %56
    %58:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
    %59:f32 = load %58
    %60:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
    %61:f32 = load %60
    %62:vec4<f32> = construct %55, %57, %59, %61
    store %v, %62
    %63:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %64:f32 = load %63
    store %f, %64
    %65:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
    %66:i32 = load %65
    store %a, %66
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %67:i32 = load %x_GLF_global_loop_count
        %68:bool = lt %67, 10i
        if %68 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %69:i32 = load %x_GLF_global_loop_count
        %70:i32 = add %69, 1i
        store %x_GLF_global_loop_count, %70
        %71:i32 = load %a
        %72:i32 = max %71, 0i
        %73:i32 = min %72, 3i
        %x_121:i32 = let %73
        %75:f32 = load_vector_element %v, %x_121
        %76:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %77:f32 = load %76
        %78:f32 = add %75, %77
        store_vector_element %v, %x_121, %78
        %79:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
        %80:i32 = load %79
        store %b, %80
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %81:i32 = load %x_GLF_global_loop_count
            %82:bool = lt %81, 10i
            if %82 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %83:i32 = load %x_GLF_global_loop_count
            %84:i32 = add %83, 1i
            store %x_GLF_global_loop_count, %84
            %85:f32 = load %f
            %86:f32 = let %85
            %87:i32 = load %b
            %88:i32 = max %87, 0i
            %89:i32 = min %88, 3i
            %90:f32 = load_vector_element %v, %89
            %91:f32 = let %90
            %92:i32 = load %b
            %93:i32 = max %92, 0i
            %94:i32 = min %93, 3i
            %95:ptr<function, vec4<f32>, read_write> = access %m, %94
            %96:i32 = load %a
            %97:f32 = load_vector_element %95, %96
            %98:f32 = mul %91, %97
            %99:f32 = add %86, %98
            store %f, %99
            continue  # -> $B8
          }
          $B8: {  # continuing
            %100:i32 = load %b
            %101:i32 = sub %100, 1i
            store %b, %101
            next_iteration  # -> $B7
          }
        }
        %102:i32 = load %a
        %x_153:i32 = let %102
        %104:ptr<function, vec4<f32>, read_write> = access %m, 1i
        %105:i32 = max %x_153, 0i
        %106:i32 = min %105, 3i
        %107:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %108:f32 = load %107
        store_vector_element %104, %106, %108
        %109:ptr<uniform, i32, read> = access %x_15, 0u
        %110:i32 = load %109
        %111:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %112:i32 = load %111
        %113:bool = eq %110, %112
        if %113 [t: $B11] {  # if_3
          $B11: {  # true
            store %continue_execution, false
            exit_if  # if_3
          }
        }
        %114:ptr<uniform, i32, read> = access %x_15, 0u
        %115:i32 = load %114
        %116:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %117:i32 = load %116
        %118:bool = eq %115, %117
        if %118 [t: $B12] {  # if_4
          $B12: {  # true
            store %continue_execution, false
            exit_if  # if_4
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %119:i32 = load %a
        %120:i32 = add %119, 1i
        store %a, %120
        next_iteration  # -> $B3
      }
    }
    %121:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %122:f32 = load %121
    store %zero, %122
    %123:f32 = load %f
    %124:ptr<uniform, f32, read> = access %x_7, 0u, 17i, 0u
    %125:f32 = load %124
    %126:bool = eq %123, %125
    %127:bool = eq %126, false
    if %127 [t: $B13] {  # if_5
      $B13: {  # true
        %128:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %129:f32 = load %128
        store %zero, %129
        exit_if  # if_5
      }
    }
    %130:f32 = load %f
    %131:f32 = let %130
    %132:f32 = load %zero
    %133:f32 = let %132
    %134:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
    %135:i32 = load %134
    %136:f32 = convert %135
    %137:f32 = load %f
    %138:vec4<f32> = construct %131, %133, %136, %137
    store %x_GLF_color, %138
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B14: {
    %140:void = call %main_1
    %141:vec4<f32> = load %x_GLF_color
    %142:main_out = construct %141
    %143:bool = load %continue_execution
    %144:bool = eq %143, false
    if %144 [t: $B15] {  # if_6
      $B15: {  # true
        terminate_invocation
      }
    }
    ret %142
  }
}

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