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: {
    %GLF_live15c:ptr<function, vec4<f32>, read_write> = var
    %GLF_live15i:ptr<function, i32, read_write> = var
    %GLF_live15d:ptr<function, vec4<f32>, read_write> = var
    %GLF_live15i_1:ptr<function, i32, read_write> = var
    store %GLF_live15c, vec4<f32>(0.0f)
    store %GLF_live15i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %7:i32 = load %GLF_live15i
        %x_8:i32 = let %7
        %9:bool = lt %x_8, 4i
        if %9 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %10:i32 = load %GLF_live15i
        %x_9:i32 = let %10
        %12:bool = gte %x_9, 3i
        if %12 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %13:f32 = load_vector_element %GLF_live15c, 1u
        %x_49:f32 = let %13
        %15:bool = gte %x_49, 1.0f
        if %15 [t: $B8] {  # if_3
          $B8: {  # true
            %16:i32 = load %GLF_live15i
            %x_10:i32 = let %16
            store_vector_element %GLF_live15c, %x_10, 1.0f
            exit_if  # if_3
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %18:i32 = load %GLF_live15i
        %x_11:i32 = let %18
        %20:i32 = add %x_11, 1i
        store %GLF_live15i, %20
        next_iteration  # -> $B3
      }
    }
    store %GLF_live15d, vec4<f32>(0.0f)
    store %GLF_live15i_1, 0i
    loop [b: $B9, c: $B10] {  # loop_2
      $B9: {  # body
        %21:i32 = load %GLF_live15i_1
        %x_13:i32 = let %21
        %23:bool = lt %x_13, 4i
        if %23 [t: $B11, f: $B12] {  # if_4
          $B11: {  # true
            exit_if  # if_4
          }
          $B12: {  # false
            exit_loop  # loop_2
          }
        }
        %24:i32 = load %GLF_live15i_1
        %x_14:i32 = let %24
        %26:bool = gte %x_14, 3i
        if %26 [t: $B13] {  # if_5
          $B13: {  # true
            exit_loop  # loop_2
          }
        }
        %27:f32 = load_vector_element %GLF_live15d, 1u
        %x_64:f32 = let %27
        %29:bool = gte %x_64, 1.0f
        if %29 [t: $B14] {  # if_6
          $B14: {  # true
            %30:i32 = load %GLF_live15i_1
            %x_15:i32 = let %30
            store_vector_element %GLF_live15d, %x_15, 1.0f
            exit_if  # if_6
          }
        }
        continue  # -> $B10
      }
      $B10: {  # continuing
        %32:i32 = load %GLF_live15i_1
        %x_16:i32 = let %32
        %34:i32 = add %x_16, 1i
        store %GLF_live15i_1, %34
        next_iteration  # -> $B9
      }
    }
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B15: {
    %36:void = call %main_1
    %37:vec4<f32> = load %x_GLF_color
    %38:main_out = construct %37
    ret %38
  }
}

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