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
}

%func_ = func():f32 {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %4:i32 = load %i
        %x_35:i32 = let %4
        %6:bool = lt %x_35, 10i
        if %6 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %7:i32 = load %i
        %x_38:i32 = let %7
        %9:bool = gt %x_38, 5i
        if %9 [t: $B7] {  # if_2
          $B7: {  # true
            %10:i32 = load %i
            %x_42:i32 = let %10
            %12:i32 = add %x_42, 1i
            store %i, %12
            exit_if  # if_2
          }
        }
        %13:i32 = load %i
        %x_44:i32 = let %13
        %15:bool = gt %x_44, 8i
        if %15 [t: $B8] {  # if_3
          $B8: {  # true
            ret 0.0f
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %16:i32 = load %i
        %x_48:i32 = let %16
        %18:i32 = add %x_48, 1i
        store %i, %18
        next_iteration  # -> $B3
      }
    }
    ret 1.0f
  }
}
%main_1 = func():void {
  $B9: {
    if false [t: $B10, f: $B11] {  # if_4
      $B10: {  # true
        %20:f32 = call %func_
        %x_28:f32 = let %20
        %22:vec4<f32> = construct %x_28, %x_28, %x_28, %x_28
        store %x_GLF_color, %22
        exit_if  # if_4
      }
      $B11: {  # false
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    ret %26
  }
}

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