SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
  two:i32 @offset(0)
}

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %r:ptr<function, i32, read_write> = var
    store %i, 0i
    store %r, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_35:i32 = load %r
        %7:ptr<uniform, i32, read> = access %x_7, 0u
        %x_37:i32 = load %7
        %9:i32 = mul %x_37, 4i
        %10:bool = lt %x_35, %9
        if %10 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_41:i32 = load %r
        %12:ptr<uniform, i32, read> = access %x_7, 0u
        %x_43:i32 = load %12
        %x_46:i32 = load %i
        %15:i32 = div %x_41, %x_43
        %16:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %15
        %17:i32 = add %x_46, %16
        store %i, %17
        continue %b4
      }
      %b4 = block {  # continuing
        %x_48:i32 = load %r
        %19:i32 = add %x_48, 2i
        store %r, %19
        next_iteration %b3
      }
    }
    %x_50:i32 = load %i
    %21:bool = eq %x_50, 10i
    if %21 [t: %b7, f: %b8] {  # if_2
      %b7 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      %b8 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b9 {
  %b9 = block {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    ret %25
  }
}

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