SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%f_ = func():vec3<f32> {
  $B2: {
    %iteration:ptr<function, i32, read_write> = var
    %k:ptr<function, i32, read_write> = var
    store %iteration, 0i
    store %k, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %5:i32 = load %k
        %x_7:i32 = let %5
        %7:bool = lt %x_7, 100i
        if %7 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %8:i32 = load %iteration
        %x_8:i32 = let %8
        %10:i32 = add %x_8, 1i
        store %iteration, %10
        continue  # -> $B4
      }
      $B4: {  # continuing
        %11:i32 = load %k
        %x_10:i32 = let %11
        %13:i32 = add %x_10, 1i
        store %k, %13
        next_iteration  # -> $B3
      }
    }
    %14:i32 = load %iteration
    %x_12:i32 = let %14
    %16:bool = lt %x_12, 100i
    if %16 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %17:i32 = load %iteration
        %x_13:i32 = let %17
        %19:i32 = load %iteration
        %x_15:i32 = let %19
        %21:i32 = sub %x_13, 1i
        %22:f32 = convert %21
        %23:f32 = let %22
        %24:i32 = sub %x_15, 1i
        %25:f32 = convert %24
        %26:vec3<f32> = construct 1.0f, %23, %25
        ret %26
      }
      $B8: {  # false
        loop [b: $B9] {  # loop_2
          $B9: {  # body
            loop [b: $B10] {  # loop_3
              $B10: {  # body
                ret vec3<f32>(1.0f, 0.0f, 0.0f)
              }
            }
            unreachable
          }
        }
        exit_if  # if_2
      }
    }
    unreachable
  }
}
%main_1 = func():void {
  $B11: {
    %28:vec3<f32> = call %f_
    %x_35:vec3<f32> = let %28
    %30:f32 = access %x_35, 0u
    %31:f32 = access %x_35, 1u
    %32:f32 = access %x_35, 2u
    %33:vec4<f32> = construct %30, %31, %32, 1.0f
    store %x_GLF_color, %33
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %35:void = call %main_1
    %36:vec4<f32> = load %x_GLF_color
    %37:main_out = construct %36
    ret %37
  }
}

invalid entry point IO struct uses
********************************************************************
*  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.  *
********************************************************************
