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
}

%main_1 = func():void {
  $B2: {
    %x_36:ptr<function, bool, read_write> = var, false
    %x_37:ptr<function, vec3<f32>, read_write> = var
    %x_6:ptr<function, i32, read_write> = var
    %x_38:ptr<function, vec3<f32>, read_write> = var
    %x_51:ptr<function, vec3<f32>, read_write> = var
    %x_54:ptr<function, vec3<f32>, read_write> = var
    %x_40_phi:ptr<function, bool, read_write> = var
    %x_55_phi:ptr<function, vec3<f32>, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %x_36, false
    store %x_40_phi, false
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %x_45:ptr<function, bool, read_write> = var
        %x_45_phi:ptr<function, bool, read_write> = var
        %x_7_phi:ptr<function, i32, read_write> = var
        %x_51_phi:ptr<function, vec3<f32>, read_write> = var
        %x_52_phi:ptr<function, bool, read_write> = var
        %16:bool = load %x_40_phi
        %x_40:bool = let %16
        store %x_6, 0i
        store %x_45_phi, %x_40
        store %x_7_phi, 0i
        loop [b: $B4] {  # loop_2
          $B4: {  # body
            %18:bool = load %x_45_phi
            store %x_45, %18
            %19:i32 = load %x_7_phi
            %x_7:i32 = let %19
            store %x_51_phi, vec3<f32>(0.0f)
            %21:bool = load %x_45
            store %x_52_phi, %21
            %22:bool = lt %x_7, 0i
            if %22 [t: $B5, f: $B6] {  # if_1
              $B5: {  # true
                exit_if  # if_1
              }
              $B6: {  # false
                exit_loop  # loop_2
              }
            }
            store %x_36, true
            store %x_37, vec3<f32>(1.0f)
            store %x_51_phi, vec3<f32>(1.0f)
            store %x_52_phi, true
            exit_loop  # loop_2
          }
        }
        %23:vec3<f32> = load %x_51_phi
        store %x_51, %23
        %24:bool = load %x_52_phi
        %x_52:bool = let %24
        %26:vec3<f32> = load %x_51
        store %x_55_phi, %26
        if %x_52 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        store %x_54, vec3<f32>(0.0f)
        store %x_36, true
        %27:vec3<f32> = load %x_54
        store %x_55_phi, %27
        exit_loop  # loop_1
      }
    }
    %28:vec3<f32> = load %x_55_phi
    %x_55:vec3<f32> = let %28
    store %x_38, %x_55
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %31:void = call %main_1
    %32:vec4<f32> = load %x_GLF_color
    %33:main_out = construct %32
    ret %33
  }
}
%GLF_live4drawShape_ = func():vec3<f32> {
  $B9: {
    %x_57:ptr<function, bool, read_write> = var, false
    %x_58:ptr<function, vec3<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_71:ptr<function, vec3<f32>, read_write> = var
    %x_74:ptr<function, vec3<f32>, read_write> = var
    %x_60_phi:ptr<function, bool, read_write> = var
    %x_75_phi:ptr<function, vec3<f32>, read_write> = var
    store %x_60_phi, false
    loop [b: $B10] {  # loop_3
      $B10: {  # body
        %x_65:ptr<function, bool, read_write> = var
        %x_65_phi:ptr<function, bool, read_write> = var
        %x_8_phi:ptr<function, i32, read_write> = var
        %x_71_phi:ptr<function, vec3<f32>, read_write> = var
        %x_72_phi:ptr<function, bool, read_write> = var
        %47:bool = load %x_60_phi
        %x_60:bool = let %47
        store %i, 0i
        store %x_65_phi, %x_60
        store %x_8_phi, 0i
        loop [b: $B11] {  # loop_4
          $B11: {  # body
            %49:bool = load %x_65_phi
            store %x_65, %49
            %50:i32 = load %x_8_phi
            %x_8:i32 = let %50
            store %x_71_phi, vec3<f32>(0.0f)
            %52:bool = load %x_65
            store %x_72_phi, %52
            %53:bool = lt %x_8, 0i
            if %53 [t: $B12, f: $B13] {  # if_3
              $B12: {  # true
                exit_if  # if_3
              }
              $B13: {  # false
                exit_loop  # loop_4
              }
            }
            store %x_57, true
            store %x_58, vec3<f32>(1.0f)
            store %x_71_phi, vec3<f32>(1.0f)
            store %x_72_phi, true
            exit_loop  # loop_4
          }
        }
        %54:vec3<f32> = load %x_71_phi
        store %x_71, %54
        %55:bool = load %x_72_phi
        %x_72:bool = let %55
        %57:vec3<f32> = load %x_71
        store %x_75_phi, %57
        if %x_72 [t: $B14] {  # if_4
          $B14: {  # true
            exit_loop  # loop_3
          }
        }
        store %x_74, vec3<f32>(0.0f)
        store %x_57, true
        %58:vec3<f32> = load %x_74
        store %x_75_phi, %58
        exit_loop  # loop_3
      }
    }
    %59:vec3<f32> = load %x_75_phi
    %x_75:vec3<f32> = let %59
    ret %x_75
  }
}

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