SKIP: FAILED

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %x_30:ptr<function, bool, read_write> = var
    %x_31:ptr<function, bool, read_write> = var
    store %x_GLF_color, vec4<f32>(0.0f)
    %6:ptr<uniform, f32, read> = access %x_5, 0u
    %7:f32 = load %6
    %x_24:bool = lt %7, 0.0f
    store %x_31, %x_24
    %9:bool = eq %x_24, false
    if %9 [t: %b3] {  # if_1
      %b3 = block {  # true
        %10:ptr<uniform, f32, read> = access %x_5, 0u
        %11:f32 = load %10
        %12:bool = lt %11, 1.0f
        store %x_30, %12
        %13:bool = load %x_30
        store %x_31, %13
        exit_if  # if_1
      }
    }
    %14:bool = load %x_31
    if %14 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret
      }
    }
    %15:ptr<uniform, f32, read> = access %x_5, 0u
    %16:f32 = load %15
    %17:bool = lt %16, 0.0f
    if %17 [t: %b5, f: %b6] {  # if_3
      %b5 = block {  # true
        loop [b: %b7, c: %b8] {  # loop_1
          %b7 = block {  # body
            %18:ptr<uniform, f32, read> = access %x_5, 0u
            %19:f32 = load %18
            %20:bool = lt %19, 0.0f
            if %20 [t: %b9, f: %b10] {  # if_4
              %b9 = block {  # true
                exit_if  # if_4
              }
              %b10 = block {  # false
                exit_loop  # loop_1
              }
            }
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_loop  # loop_1
          }
          %b8 = block {  # continuing
            next_iteration %b7
          }
        }
        exit_if  # if_3
      }
      %b6 = block {  # false
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %22:void = call %main_1
    %23:vec4<f32> = load %x_GLF_color
    %24:main_out = construct %23
    ret %24
  }
}

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