SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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)
}

buf1 = struct @align(4) {
  zero:f32 @offset(0)
}

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

$B1: {  # 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
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %v0:ptr<function, vec2<f32>, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %x_57:ptr<function, vec4<f32>, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %10:f32 = load %9
    %11:vec2<f32> = construct %10
    store %v0, %11
    %12:f32 = load_vector_element %v0, 0u
    %13:vec4<f32> = construct %12
    %x_36:vec4<f32> = let %13
    store %v1, %x_36
    %15:ptr<uniform, f32, read> = access %x_9, 0u
    %16:f32 = load %15
    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %18:f32 = load %17
    %19:bool = eq %16, %18
    %20:bool = eq %19, false
    if %20 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %21:ptr<uniform, f32, read> = access %x_9, 0u
        %22:f32 = load %21
        %23:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %24:f32 = load %23
        %25:bool = eq %22, %24
        if %25 [t: $B5] {  # if_2
          $B5: {  # true
            ret
          }
        }
        %26:f32 = access %x_36, 0u
        %27:vec2<f32> = swizzle %x_36, yz
        %28:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %29:f32 = load %28
        %30:vec2<f32> = construct %29
        %31:vec2<f32> = sub %27, %30
        %32:vec2<f32> = swizzle %31, xy
        %33:f32 = access %x_36, 3u
        %34:vec4<f32> = construct %26, %32, %33
        store %x_57, %34
        %35:vec4<f32> = load %x_57
        store %v1, %35
        exit_if  # if_1
      }
      $B4: {  # false
        store %continue_execution, false
        exit_if  # if_1
      }
    }
    %36:vec4<f32> = load %x_57
    store %x_GLF_color, %36
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %38:void = call %main_1
    %39:vec4<f32> = load %x_GLF_color
    %40:main_out = construct %39
    %41:bool = load %continue_execution
    %42:bool = eq %41, false
    if %42 [t: $B7] {  # if_3
      $B7: {  # true
        terminate_invocation
      }
    }
    ret %40
  }
}

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