SKIP: FAILED

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @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, 3> @offset(0)
}

buf2 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

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

%b1 = block {  # root
  %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_12:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %f:ptr<function, f32, read_write> = var
    %r:ptr<function, i32, read_write> = var
    store %x_GLF_global_loop_count, 0i
    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %10:f32 = load %9
    store %f, %10
    %11:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %12:i32 = load %11
    store %r, %12
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %13:i32 = load %r
        %14:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %15:i32 = load %14
        %16:bool = lt %13, %15
        if %16 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %17:i32 = load %x_GLF_global_loop_count
        %18:i32 = add %17, 1i
        store %x_GLF_global_loop_count, %18
        %19:f32 = load %f
        %20:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
        %21:vec2<f32> = load %20
        %22:vec2<f32> = dpdx %21
        %23:f32 = access %22, 1u
        %24:f32 = add %19, %23
        store %f, %24
        continue %b4
      }
      %b4 = block {  # continuing
        %25:i32 = load %r
        %26:i32 = add %25, 1i
        store %r, %26
        next_iteration %b3
      }
    }
    loop [b: %b7, c: %b8] {  # loop_2
      %b7 = block {  # body
        %27:i32 = load %x_GLF_global_loop_count
        %28:bool = lt %27, 100i
        if %28 [t: %b9, f: %b10] {  # if_2
          %b9 = block {  # true
            exit_if  # if_2
          }
          %b10 = block {  # false
            exit_loop  # loop_2
          }
        }
        %29:i32 = load %x_GLF_global_loop_count
        %30:i32 = add %29, 1i
        store %x_GLF_global_loop_count, %30
        %31:f32 = load %f
        %32:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %33:f32 = load %32
        %34:f32 = add %31, %33
        store %f, %34
        continue %b8
      }
      %b8 = block {  # continuing
        next_iteration %b7
      }
    }
    %35:f32 = load %f
    %36:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %37:f32 = load %36
    %38:bool = eq %35, %37
    if %38 [t: %b11, f: %b12] {  # if_3
      %b11 = block {  # true
        %39:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %40:i32 = load %39
        %41:f32 = convert %40
        %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %49:i32 = load %48
        %50:f32 = convert %49
        %51:vec4<f32> = construct %41, %44, %47, %50
        store %x_GLF_color, %51
        exit_if  # if_3
      }
      %b12 = block {  # false
        %52:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:vec4<f32> = construct %54
        store %x_GLF_color, %55
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b13 {
  %b13 = block {
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}

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