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: {
    %m43:ptr<function, mat4x3<f32>, read_write> = var
    %ll1:ptr<function, i32, read_write> = var
    %rows:ptr<function, i32, read_write> = var
    %ll4:ptr<function, i32, read_write> = var
    %ll2:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %tempm43:ptr<function, mat4x3<f32>, read_write> = var
    %ll3:ptr<function, i32, read_write> = var
    %d:ptr<function, i32, read_write> = var
    %r:ptr<function, i32, read_write> = var
    %sums:ptr<function, array<f32, 9>, read_write> = var
    %idx:ptr<function, i32, read_write> = var
    store %m43, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
    store %ll1, 0i
    store %rows, 2i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        if true [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        %15:i32 = load %ll1
        %x_16:i32 = let %15
        %17:bool = gte %x_16, 5i
        if %17 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %18:i32 = load %ll1
        %x_17:i32 = let %18
        %20:i32 = add %x_17, 1i
        store %ll1, %20
        store %ll4, 10i
        store %ll2, 0i
        store %c, 0i
        loop [b: $B8, c: $B9] {  # loop_2
          $B8: {  # body
            %21:i32 = load %c
            %x_19:i32 = let %21
            %23:bool = lt %x_19, 1i
            if %23 [t: $B10, f: $B11] {  # if_3
              $B10: {  # true
                exit_if  # if_3
              }
              $B11: {  # false
                exit_loop  # loop_2
              }
            }
            %24:i32 = load %ll2
            %x_20:i32 = let %24
            %26:bool = gte %x_20, 0i
            if %26 [t: $B12] {  # if_4
              $B12: {  # true
                exit_loop  # loop_2
              }
            }
            %27:i32 = load %ll2
            %x_21:i32 = let %27
            %29:i32 = add %x_21, 1i
            store %ll2, %29
            %30:mat4x3<f32> = load %m43
            %x_92:mat4x3<f32> = let %30
            store %tempm43, %x_92
            store %ll3, 0i
            store %d, 0i
            loop [b: $B13, c: $B14] {  # loop_3
              $B13: {  # body
                %32:i32 = load %ll4
                %x_23:i32 = let %32
                %34:bool = lt 1i, %x_23
                if %34 [t: $B15, f: $B16] {  # if_5
                  $B15: {  # true
                    exit_if  # if_5
                  }
                  $B16: {  # false
                    exit_loop  # loop_3
                  }
                }
                %35:i32 = load %d
                %x_24:i32 = let %35
                %37:i32 = load %d
                %x_25:i32 = let %37
                %39:i32 = load %d
                %x_26:i32 = let %39
                %41:i32 = load %r
                %x_27:i32 = let %41
                %43:i32 = load %r
                %x_28:i32 = let %43
                %45:i32 = load %r
                %x_29:i32 = let %45
                %47:bool = gte %x_24, 0i
                %48:bool = lt %x_25, 4i
                %49:bool = and %47, %48
                %50:i32 = select 0i, %x_26, %49
                %51:ptr<function, vec3<f32>, read_write> = access %tempm43, %50
                %52:ptr<function, vec3<f32>, read_write> = let %51
                %53:bool = gte %x_27, 0i
                %54:bool = lt %x_28, 3i
                %55:bool = and %53, %54
                %56:i32 = select 0i, %x_29, %55
                store_vector_element %52, %56, 1.0f
                continue  # -> $B14
              }
              $B14: {  # continuing
                %57:i32 = load %d
                %x_30:i32 = let %57
                %59:i32 = add %x_30, 1i
                store %d, %59
                next_iteration  # -> $B13
              }
            }
            %60:i32 = load %idx
            %x_32:i32 = let %60
            %62:i32 = load %idx
            %x_33:i32 = let %62
            %64:i32 = load %idx
            %x_34:i32 = let %64
            %66:bool = gte %x_32, 0i
            %67:bool = lt %x_33, 9i
            %68:bool = and %66, %67
            %69:i32 = select 0i, %x_34, %68
            %x_111:i32 = let %69
            %71:i32 = load %c
            %x_35:i32 = let %71
            %73:ptr<function, vec3<f32>, read_write> = access %m43, %x_35
            %74:f32 = load_vector_element %73, 1u
            %x_113:f32 = let %74
            %76:ptr<function, f32, read_write> = access %sums, %x_111
            %77:f32 = load %76
            %x_115:f32 = let %77
            %79:ptr<function, f32, read_write> = access %sums, %x_111
            %80:f32 = add %x_115, %x_113
            store %79, %80
            continue  # -> $B9
          }
          $B9: {  # continuing
            %81:i32 = load %c
            %x_36:i32 = let %81
            %83:i32 = add %x_36, 1i
            store %c, %83
            next_iteration  # -> $B8
          }
        }
        %84:i32 = load %idx
        %x_38:i32 = let %84
        %86:i32 = add %x_38, 1i
        store %idx, %86
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B17: {
    %88:void = call %main_1
    %89:vec4<f32> = load %x_GLF_color
    %90:main_out = construct %89
    ret %90
  }
}

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