SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

StructType = struct @align(16) {
  col:vec3<f32> @offset(0)
  bbbb:vec4<bool> @offset(16)
}

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

$B1: {  # root
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %x_33:ptr<function, StructType, read_write> = var
    %x_9:ptr<function, i32, read_write> = var
    %x_38:ptr<function, i32, read_write> = var
    %x_42:ptr<function, StructType, read_write> = var
    %x_10:ptr<function, i32, read_write> = var
    store %x_33, StructType(vec3<f32>(0.0f), vec4<bool>(false))
    store %x_9, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_34:ptr<function, StructType, read_write> = var
        %x_7:ptr<function, i32, read_write> = var
        %11:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
        %12:f32 = load_vector_element %11, 1u
        %13:i32 = call %tint_f32_to_i32, %12
        store %x_38, %13
        %15:i32 = load %x_9
        %16:i32 = load %x_38
        %17:bool = lt %15, %16
        if %17 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %18:StructType = load %x_33
        store %x_34, %18
        %19:ptr<function, vec3<f32>, read_write> = access %x_34, 0u
        store %19, vec3<f32>(1.0f, 0.0f, 0.0f)
        %20:i32 = load %x_9
        %21:i32 = add %20, 1i
        store %x_7, %21
        %22:StructType = load %x_34
        store %x_33, %22
        %23:i32 = load %x_7
        store %x_9, %23
        next_iteration  # -> $B3
      }
    }
    %24:StructType = load %x_33
    store %x_42, %24
    store %x_10, 0i
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %x_43:ptr<function, StructType, read_write> = var
        %x_8:ptr<function, i32, read_write> = var
        %27:i32 = load %x_10
        %28:i32 = load %x_38
        %29:bool = lt %27, %28
        if %29 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        continue  # -> $B8
      }
      $B8: {  # continuing
        %30:StructType = load %x_42
        store %x_43, %30
        %31:ptr<function, vec3<f32>, read_write> = access %x_43, 0u
        store %31, vec3<f32>(1.0f, 0.0f, 0.0f)
        %32:i32 = load %x_10
        %33:i32 = add %32, 1i
        store %x_8, %33
        %34:StructType = load %x_43
        store %x_42, %34
        %35:i32 = load %x_8
        store %x_10, %35
        next_iteration  # -> $B7
      }
    }
    %36:ptr<function, vec3<f32>, read_write> = access %x_42, 0u
    %37:vec3<f32> = load %36
    %x_47:vec3<f32> = let %37
    %39:f32 = access %x_47, 0u
    %40:f32 = access %x_47, 1u
    %41:f32 = access %x_47, 2u
    %42:vec4<f32> = construct %39, %40, %41, 1.0f
    store %x_GLF_color, %42
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %44:void = call %main_1
    %45:vec4<f32> = load %x_GLF_color
    %46:main_out = construct %45
    ret %46
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B12: {
    %48:i32 = convert %value
    %49:bool = gte %value, -2147483648.0f
    %50:i32 = select -2147483648i, %48, %49
    %51:bool = lte %value, 2147483520.0f
    %52:i32 = select 2147483647i, %50, %51
    ret %52
  }
}

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