SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  one:u32 @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: {
    %a:ptr<function, u32, read_write> = var
    %b:ptr<function, u32, read_write> = var
    %c:ptr<function, u32, read_write> = var
    %d:ptr<function, u32, read_write> = var
    %e:ptr<function, u32, read_write> = var
    %f:ptr<function, u32, read_write> = var
    %10:ptr<uniform, u32, read> = access %x_6, 0u
    %11:u32 = load %10
    %x_41:u32 = let %11
    %13:u32 = add 77u, %x_41
    %14:u32 = and 32u, 31u
    %15:u32 = shr %13, %14
    store %a, %15
    %16:ptr<uniform, u32, read> = access %x_6, 0u
    %17:u32 = load %16
    %x_45:u32 = let %17
    %19:u32 = add 3243u, %x_45
    %20:u32 = and 33u, 31u
    %21:u32 = shr %19, %20
    store %b, %21
    %22:ptr<uniform, u32, read> = access %x_6, 0u
    %23:u32 = load %22
    %x_49:u32 = let %23
    %25:u32 = add 23u, %x_49
    %26:u32 = and 345u, 31u
    %27:u32 = shr %25, %26
    store %c, %27
    %28:ptr<uniform, u32, read> = access %x_6, 0u
    %29:u32 = load %28
    %x_53:u32 = let %29
    %31:u32 = add 2395u, %x_53
    %32:u32 = and 32u, 31u
    %33:u32 = shl %31, %32
    store %d, %33
    %34:ptr<uniform, u32, read> = access %x_6, 0u
    %35:u32 = load %34
    %x_57:u32 = let %35
    %37:u32 = add 290485u, %x_57
    %38:u32 = and 33u, 31u
    %39:u32 = shl %37, %38
    store %e, %39
    %40:ptr<uniform, u32, read> = access %x_6, 0u
    %41:u32 = load %40
    %x_61:u32 = let %41
    %43:u32 = add 44321u, %x_61
    %44:u32 = and 345u, 31u
    %45:u32 = shl %43, %44
    store %f, %45
    %46:u32 = load %a
    %x_64:u32 = let %46
    %48:bool = neq %x_64, 1u
    if %48 [t: $B3] {  # if_1
      $B3: {  # true
        store %a, 1u
        exit_if  # if_1
      }
    }
    %49:u32 = load %b
    %x_68:u32 = let %49
    %51:bool = neq %x_68, 0u
    if %51 [t: $B4] {  # if_2
      $B4: {  # true
        store %b, 0u
        exit_if  # if_2
      }
    }
    %52:u32 = load %c
    %x_72:u32 = let %52
    %54:bool = neq %x_72, 1u
    if %54 [t: $B5] {  # if_3
      $B5: {  # true
        store %c, 1u
        exit_if  # if_3
      }
    }
    %55:u32 = load %d
    %x_76:u32 = let %55
    %57:bool = neq %x_76, 0u
    if %57 [t: $B6] {  # if_4
      $B6: {  # true
        store %d, 0u
        exit_if  # if_4
      }
    }
    %58:u32 = load %e
    %x_80:u32 = let %58
    %60:bool = neq %x_80, 1u
    if %60 [t: $B7] {  # if_5
      $B7: {  # true
        store %e, 1u
        exit_if  # if_5
      }
    }
    %61:u32 = load %f
    %x_84:u32 = let %61
    %63:bool = neq %x_84, 0u
    if %63 [t: $B8] {  # if_6
      $B8: {  # true
        store %f, 0u
        exit_if  # if_6
      }
    }
    %64:u32 = load %a
    %x_88:u32 = let %64
    %66:u32 = load %b
    %x_90:u32 = let %66
    %68:u32 = load %c
    %x_93:u32 = let %68
    %70:u32 = load %d
    %x_96:u32 = let %70
    %72:u32 = load %e
    %x_99:u32 = let %72
    %74:u32 = load %f
    %x_102:u32 = let %74
    %76:bool = eq %x_88, 1u
    %77:bool = eq %x_90, 0u
    %78:bool = and %76, %77
    %79:bool = eq %x_93, 1u
    %80:bool = and %78, %79
    %81:bool = eq %x_96, 0u
    %82:bool = and %80, %81
    %83:bool = eq %x_99, 1u
    %84:bool = and %82, %83
    %85:bool = eq %x_102, 0u
    %86:bool = and %84, %85
    if %86 [t: $B9, f: $B10] {  # if_7
      $B9: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_7
      }
      $B10: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_7
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %88:void = call %main_1
    %89:vec4<f32> = load %x_GLF_color
    %90:main_out = construct %89
    ret %90
  }
}

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