SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<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_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %k:ptr<function, i32, read_write> = var
    %GLF_dead0j:ptr<function, i32, read_write> = var
    %donor_replacementGLF_dead0stack:ptr<function, array<i32, 10>, read_write> = var
    %donor_replacementGLF_dead0top:ptr<function, i32, read_write> = var
    %x_54:ptr<function, i32, read_write> = var
    %matrix_b:ptr<function, vec4<f32>, read_write> = var
    %b:ptr<function, i32, read_write> = var
    store %k, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %11:i32 = load %k
        %12:bool = lt %11, 4i
        if %12 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %14:f32 = load_vector_element %13, 1u
        %15:bool = gt 0.0f, %14
        if %15 [t: $B7] {  # if_2
          $B7: {  # true
            store %GLF_dead0j, 1i
            loop [b: $B8, c: $B9] {  # loop_2
              $B8: {  # body
                %16:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, 0i
                %17:i32 = load %16
                %18:bool = lte 1i, %17
                if %18 [t: $B10, f: $B11] {  # if_3
                  $B10: {  # true
                    exit_if  # if_3
                  }
                  $B11: {  # false
                    exit_loop  # loop_2
                  }
                }
                continue  # -> $B9
              }
              $B9: {  # continuing
                next_iteration  # -> $B8
              }
            }
            %19:i32 = load %donor_replacementGLF_dead0top
            %20:bool = gte %19, 0i
            %21:i32 = load %donor_replacementGLF_dead0top
            %22:bool = lt %21, 9i
            %23:bool = and %20, %22
            if %23 [t: $B12, f: $B13] {  # if_4
              $B12: {  # true
                %24:i32 = load %donor_replacementGLF_dead0top
                %25:i32 = add %24, 1i
                %x_17:i32 = let %25
                store %donor_replacementGLF_dead0top, %x_17
                store %x_54, %x_17
                exit_if  # if_4
              }
              $B13: {  # false
                store %x_54, 0i
                exit_if  # if_4
              }
            }
            %27:i32 = load %x_54
            %x_18:i32 = let %27
            %29:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, %x_18
            store %29, 1i
            exit_if  # if_2
          }
        }
        store %matrix_b, vec4<f32>(0.0f)
        store %b, 3i
        loop [b: $B14, c: $B15] {  # loop_3
          $B14: {  # body
            %30:i32 = load %b
            %31:bool = gte %30, 0i
            if %31 [t: $B16, f: $B17] {  # if_5
              $B16: {  # true
                exit_if  # if_5
              }
              $B17: {  # false
                exit_loop  # loop_3
              }
            }
            %32:i32 = load %b
            %x_20:i32 = let %32
            %34:i32 = load %b
            %35:f32 = load_vector_element %matrix_b, %34
            %36:f32 = sub %35, 1.0f
            store_vector_element %matrix_b, %x_20, %36
            continue  # -> $B15
          }
          $B15: {  # continuing
            %37:i32 = load %b
            %38:i32 = sub %37, 1i
            store %b, %38
            next_iteration  # -> $B14
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %39:i32 = load %k
        %40:i32 = add %39, 1i
        store %k, %40
        next_iteration  # -> $B3
      }
    }
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B18: {
    %42:void = call %main_1
    %43:vec4<f32> = load %x_GLF_color
    %44:main_out = construct %43
    ret %44
  }
}

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