SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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, 2> @offset(0)
}

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %arr:ptr<function, array<f32, 5>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_38:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_40:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_42:f32 = load %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_44:f32 = load %14
    %16:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_46:f32 = load %16
    %18:array<f32, 5> = construct %x_38, %x_40, %x_42, %x_44, %x_46
    store %arr, %18
    %19:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_49:i32 = load %19
    store %i, %x_49
    store %j, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_54:i32 = load %i
        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_56:i32 = load %22
        %24:bool = lt %x_54, %x_56
        if %24 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_59:i32 = load %j
        %26:bool = lt %x_59, -1i
        if %26 [t: %b7] {  # if_2
          %b7 = block {  # true
            exit_loop  # loop_1
          }
        }
        %x_63:i32 = load %j
        %28:ptr<function, f32, read_write> = access %arr, %x_63
        %x_65:f32 = load %28
        %30:ptr<function, f32, read_write> = access %arr, %x_63
        %31:f32 = add %x_65, 1.0f
        store %30, %31
        continue %b4
      }
      %b4 = block {  # continuing
        %x_68:i32 = load %i
        %33:i32 = add %x_68, 1i
        store %i, %33
        %x_70:i32 = load %j
        %35:i32 = add %x_70, 1i
        store %j, %35
        next_iteration %b3
      }
    }
    %36:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_73:f32 = load %36
    %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_75:f32 = load %38
    %40:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_77:f32 = load %40
    %42:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_79:f32 = load %42
    %44:vec4<f32> = construct %x_73, %x_75, %x_77, %x_79
    store %x_GLF_color, %44
    %45:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_82:i32 = load %45
    store %i, %x_82
    loop [b: %b8, c: %b9] {  # loop_2
      %b8 = block {  # body
        %x_87:i32 = load %i
        %48:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_89:i32 = load %48
        %50:bool = lt %x_87, %x_89
        if %50 [t: %b10, f: %b11] {  # if_3
          %b10 = block {  # true
            exit_if  # if_3
          }
          %b11 = block {  # false
            exit_loop  # loop_2
          }
        }
        %x_92:i32 = load %i
        %52:ptr<function, f32, read_write> = access %arr, %x_92
        %x_94:f32 = load %52
        %54:bool = eq %x_94, 2.0f
        %55:bool = eq %54, false
        if %55 [t: %b12] {  # if_4
          %b12 = block {  # true
            %56:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
            %x_99:f32 = load %56
            %58:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
            store %x_GLF_color, %58
            exit_if  # if_4
          }
        }
        continue %b9
      }
      %b9 = block {  # continuing
        %x_101:i32 = load %i
        %60:i32 = add %x_101, 1i
        store %i, %60
        next_iteration %b8
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b13 {
  %b13 = block {
    %62:void = call %main_1
    %63:vec4<f32> = load %x_GLF_color
    %64:main_out = construct %63
    ret %64
  }
}

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