SKIP: FAILED

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

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 4> @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, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_ = func():void -> %b2 {
  %b2 = block {
    %x_66:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %x_62:i32 = load %6
    %8:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %9:i32 = load %8
    store %x_66, %9
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_67:ptr<function, i32, read_write> = var
        %11:i32 = load %x_66
        %12:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
        %13:i32 = load %12
        %14:bool = lt %11, %13
        if %14 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %15:i32 = load %x_GLF_global_loop_count
        %16:i32 = add %15, 1i
        store %x_GLF_global_loop_count, %16
        %17:i32 = load %x_66
        %18:i32 = add %17, 1i
        store %x_67, %18
        %19:i32 = load %x_67
        store %x_66, %19
        next_iteration %b3
      }
    }
    %20:bool = lt %x_62, %x_62
    if %20 [t: %b7] {  # if_2
      %b7 = block {  # true
        ret
      }
    }
    ret
  }
}
%main_1 = func():void -> %b8 {
  %b8 = block {
    store %x_GLF_global_loop_count, 0i
    loop [b: %b9, c: %b10] {  # loop_2
      %b9 = block {  # body
        %22:i32 = load %x_GLF_global_loop_count
        %23:bool = lt %22, 10i
        if %23 [t: %b11, f: %b12] {  # if_3
          %b11 = block {  # true
            exit_if  # if_3
          }
          %b12 = block {  # false
            exit_loop  # loop_2
          }
        }
        continue %b10
      }
      %b10 = block {  # continuing
        %24:i32 = load %x_GLF_global_loop_count
        %25:i32 = add %24, 1i
        store %x_GLF_global_loop_count, %25
        %26:void = call %func_
        next_iteration %b9
      }
    }
    loop [b: %b13, c: %b14] {  # loop_3
      %b13 = block {  # body
        %27:i32 = load %x_GLF_global_loop_count
        %28:bool = lt %27, 10i
        if %28 [t: %b15, f: %b16] {  # if_4
          %b15 = block {  # true
            exit_if  # if_4
          }
          %b16 = block {  # false
            exit_loop  # loop_3
          }
        }
        continue %b14
      }
      %b14 = block {  # continuing
        %29:i32 = load %x_GLF_global_loop_count
        %30:i32 = add %29, 1i
        store %x_GLF_global_loop_count, %30
        next_iteration %b13
      }
    }
    %31:i32 = load %x_GLF_global_loop_count
    %32:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %33:i32 = load %32
    %34:bool = eq %31, %33
    if %34 [t: %b17, f: %b18] {  # if_5
      %b17 = block {  # true
        %35:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %36:i32 = load %35
        %x_51:f32 = convert %36
        %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %39:i32 = load %38
        %x_54:f32 = convert %39
        %41:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
        store %x_GLF_color, %41
        exit_if  # if_5
      }
      %b18 = block {  # false
        %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:vec4<f32> = construct %44
        store %x_GLF_color, %45
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b19 {
  %b19 = block {
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}

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