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

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

$B1: {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void {
  $B2: {
    %data:ptr<function, array<i32, 5>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %12:i32 = load %11
    %13:f32 = convert %12
    %14:f32 = let %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %16:i32 = load %15
    %17:f32 = convert %16
    %18:f32 = let %17
    %19:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %20:i32 = load %19
    %21:f32 = convert %20
    %22:f32 = let %21
    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %24:i32 = load %23
    %25:f32 = convert %24
    %26:vec4<f32> = construct %14, %18, %22, %25
    store %x_GLF_color, %26
    %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %28:i32 = load %27
    %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %30:i32 = load %29
    %31:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %32:i32 = load %31
    %33:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %34:i32 = load %33
    %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %36:i32 = load %35
    %37:array<i32, 5> = construct %28, %30, %32, %34, %36
    store %data, %37
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %39:i32 = load %38
    store %a, %39
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %40:i32 = load %a
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %42:i32 = load %41
        %43:bool = lt %40, %42
        if %43 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %44:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
        %45:i32 = load %44
        store %i, %45
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %46:i32 = load %i
            %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %48:i32 = load %47
            %49:bool = lt %46, %48
            if %49 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %50:i32 = load %i
            store %j, %50
            loop [b: $B11, c: $B12] {  # loop_3
              $B11: {  # body
                %51:i32 = load %j
                %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %53:i32 = load %52
                %54:bool = lt %51, %53
                if %54 [t: $B13, f: $B14] {  # if_3
                  $B13: {  # true
                    exit_if  # if_3
                  }
                  $B14: {  # false
                    exit_loop  # loop_3
                  }
                }
                %55:i32 = load %i
                %56:ptr<function, i32, read_write> = access %data, %55
                %57:i32 = load %56
                %58:i32 = load %j
                %59:ptr<function, i32, read_write> = access %data, %58
                %60:i32 = load %59
                %61:bool = lt %57, %60
                if %61 [t: $B15] {  # if_4
                  $B15: {  # true
                    %62:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
                    %63:i32 = load %62
                    %64:f32 = convert %63
                    %65:vec4<f32> = construct %64
                    store %x_GLF_color, %65
                    exit_if  # if_4
                  }
                }
                continue  # -> $B12
              }
              $B12: {  # continuing
                %66:i32 = load %j
                %67:i32 = add %66, 1i
                store %j, %67
                next_iteration  # -> $B11
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %68:i32 = load %i
            %69:i32 = add %68, 1i
            store %i, %69
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %70:i32 = load %a
        %71:i32 = add %70, 1i
        store %a, %71
        next_iteration  # -> $B3
      }
    }
    loop [b: $B16, c: $B17] {  # loop_4
      $B16: {  # body
        %72:f32 = load_vector_element %gl_FragCoord, 0u
        %73:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
        %74:f32 = load %73
        %75:bool = lt %72, %74
        if %75 [t: $B18, f: $B19] {  # if_5
          $B18: {  # true
            exit_if  # if_5
          }
          $B19: {  # false
            exit_loop  # loop_4
          }
        }
        %76:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
        %77:i32 = load %76
        store %i_1, %77
        loop [b: $B20, c: $B21] {  # loop_5
          $B20: {  # body
            %78:i32 = load %i_1
            %79:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %80:i32 = load %79
            %81:bool = lt %78, %80
            if %81 [t: $B22, f: $B23] {  # if_6
              $B22: {  # true
                exit_if  # if_6
              }
              $B23: {  # false
                exit_loop  # loop_5
              }
            }
            %82:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
            %83:i32 = load %82
            %84:f32 = convert %83
            %85:vec4<f32> = construct %84
            store %x_GLF_color, %85
            continue  # -> $B21
          }
          $B21: {  # continuing
            %86:i32 = load %i_1
            %87:i32 = add %86, 1i
            store %i_1, %87
            next_iteration  # -> $B20
          }
        }
        continue  # -> $B17
      }
      $B17: {  # continuing
        next_iteration  # -> $B16
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B24: {
    store %gl_FragCoord, %gl_FragCoord_param
    %90:void = call %main_1
    %91:vec4<f32> = load %x_GLF_color
    %92:main_out = construct %91
    ret %92
  }
}

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