SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
  three: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 {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %a, 0i
    store %i, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_31:i32 = load %i
        %7:ptr<uniform, i32, read> = access %x_7, 0u
        %x_33:i32 = load %7
        %9:i32 = add 7i, %x_33
        %10:bool = lt %x_31, %9
        if %10 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_37:i32 = load %i
        switch %x_37 [c: (7i 8i, %b7), c: (default, %b8)] {  # switch_1
          %b7 = block {  # case
            %x_40:i32 = load %a
            %13:i32 = add %x_40, 1i
            store %a, %13
            exit_switch  # switch_1
          }
          %b8 = block {  # case
            exit_switch  # switch_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_42:i32 = load %i
        %15:i32 = add %x_42, 1i
        store %i, %15
        next_iteration %b3
      }
    }
    %x_44:i32 = load %a
    %17:bool = eq %x_44, 2i
    if %17 [t: %b9, f: %b10] {  # if_2
      %b9 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      %b10 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %19:void = call %main_1
    %20:vec4<f32> = load %x_GLF_color
    %21:main_out = construct %20
    ret %21
  }
}

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