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_38:ptr<function, i32, read_write> = var
    %x_42:ptr<function, StructType, read_write> = var
    %x_33_phi:ptr<function, StructType, read_write> = var
    %x_9_phi:ptr<function, i32, read_write> = var
    %x_42_phi:ptr<function, StructType, read_write> = var
    %x_10_phi:ptr<function, i32, read_write> = var
    store %x_33_phi, StructType(vec3<f32>(0.0f), vec4<bool>(false))
    store %x_9_phi, 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
        %13:StructType = load %x_33_phi
        store %x_33, %13
        %14:i32 = load %x_9_phi
        %x_9:i32 = let %14
        %16:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
        %17:f32 = load_vector_element %16, 1u
        %x_37:f32 = let %17
        %19:i32 = call %tint_f32_to_i32, %x_37
        store %x_38, %19
        %21:i32 = load %x_38
        %22:bool = lt %x_9, %21
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %23:StructType = load %x_33
        store %x_34, %23
        %24:ptr<function, vec3<f32>, read_write> = access %x_34, 0u
        store %24, vec3<f32>(1.0f, 0.0f, 0.0f)
        %25:i32 = add %x_9, 1i
        store %x_7, %25
        %26:StructType = load %x_34
        store %x_33_phi, %26
        %27:i32 = load %x_7
        store %x_9_phi, %27
        next_iteration  # -> $B3
      }
    }
    %28:StructType = load %x_33
    store %x_42_phi, %28
    store %x_10_phi, 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
        %31:StructType = load %x_42_phi
        store %x_42, %31
        %32:i32 = load %x_10_phi
        %x_10:i32 = let %32
        %34:i32 = load %x_38
        %35:bool = lt %x_10, %34
        if %35 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        continue  # -> $B8
      }
      $B8: {  # continuing
        %36:StructType = load %x_42
        store %x_43, %36
        %37:ptr<function, vec3<f32>, read_write> = access %x_43, 0u
        store %37, vec3<f32>(1.0f, 0.0f, 0.0f)
        %38:i32 = add %x_10, 1i
        store %x_8, %38
        %39:StructType = load %x_43
        store %x_42_phi, %39
        %40:i32 = load %x_8
        store %x_10_phi, %40
        next_iteration  # -> $B7
      }
    }
    %41:ptr<function, vec3<f32>, read_write> = access %x_42, 0u
    %42:vec3<f32> = load %41
    %x_47:vec3<f32> = let %42
    %44:f32 = access %x_47, 0u
    %45:f32 = access %x_47, 1u
    %46:f32 = access %x_47, 2u
    %47:vec4<f32> = construct %44, %45, %46, 1.0f
    store %x_GLF_color, %47
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %49:void = call %main_1
    %50:vec4<f32> = load %x_GLF_color
    %51:main_out = construct %50
    ret %51
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B12: {
    %53:i32 = convert %value
    %54:bool = gte %value, -2147483648.0f
    %55:i32 = select -2147483648i, %53, %54
    %56:bool = lte %value, 2147483520.0f
    %57:i32 = select 2147483647i, %55, %56
    ret %57
  }
}

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