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():f32 {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    store %i, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %4:i32 = load %i
        %5:bool = lt %4, 10i
        if %5 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %6:i32 = load %i
        %7:f32 = convert %6
        %8:bool = gte %7, 1.0f
        if %8 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            ret 1.0f
          }
          $B8: {  # false
            continue  # -> $B4
          }
        }
        unreachable
      }
      $B4: {  # continuing
        %9:i32 = load %i
        %10:i32 = add %9, 1i
        store %i, %10
        next_iteration  # -> $B3
      }
    }
    ret 1.0f
  }
}
%main_1 = func():void {
  $B9: {
    %c:ptr<function, vec4<f32>, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    store %c, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %i_1, 0i
    loop [b: $B10, c: $B11] {  # loop_2
      $B10: {  # body
        %14:i32 = load %i_1
        %15:bool = lt %14, 1i
        if %15 [t: $B12, f: $B13] {  # if_3
          $B12: {  # true
            exit_if  # if_3
          }
          $B13: {  # false
            exit_loop  # loop_2
          }
        }
        continue  # -> $B11
      }
      $B11: {  # continuing
        %16:f32 = call %f_
        %x_39:f32 = let %16
        store_vector_element %c, 0u, %x_39
        %18:i32 = load %i_1
        %19:i32 = add %18, 1i
        store %i_1, %19
        next_iteration  # -> $B10
      }
    }
    %20:vec4<f32> = load %c
    store %x_GLF_color, %20
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B14: {
    %22:void = call %main_1
    %23:vec4<f32> = load %x_GLF_color
    %24:main_out = construct %23
    ret %24
  }
}

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