SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
  data:i32 @offset(0)
  leftIndex:i32 @offset(4)
  rightIndex:i32 @offset(8)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %tree_1:ptr<private, array<BST, 10>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
  $B2: {
    %6:ptr<function, i32, read_write> = access %tree, 0u
    %7:i32 = load %data
    store %6, %7
    %8:ptr<function, i32, read_write> = access %tree, 1u
    store %8, -1i
    %9:ptr<function, i32, read_write> = access %tree, 2u
    store %9, -1i
    ret
  }
}
%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void {
  $B3: {
    %baseIndex:ptr<function, i32, read_write> = var
    %param:ptr<function, BST, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, BST, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    store %baseIndex, 0i
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %18:i32 = load %baseIndex
        %19:i32 = load %treeIndex
        %20:bool = lte %18, %19
        if %20 [t: $B6, f: $B7] {  # if_1
          $B6: {  # true
            exit_if  # if_1
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %21:i32 = load %data_1
        %22:i32 = load %baseIndex
        %23:ptr<private, i32, read_write> = access %tree_1, %22, 0u
        %24:i32 = load %23
        %25:bool = lte %21, %24
        if %25 [t: $B8, f: $B9] {  # if_2
          $B8: {  # true
            %26:i32 = load %baseIndex
            %27:ptr<private, i32, read_write> = access %tree_1, %26, 1u
            %28:i32 = load %27
            %29:bool = eq %28, -1i
            if %29 [t: $B10, f: $B11] {  # if_3
              $B10: {  # true
                %30:i32 = load %baseIndex
                %x_186:i32 = let %30
                %32:ptr<private, i32, read_write> = access %tree_1, %x_186, 1u
                %33:i32 = load %treeIndex
                store %32, %33
                %34:i32 = load %treeIndex
                %x_189:i32 = let %34
                %36:ptr<private, BST, read_write> = access %tree_1, %x_189
                %37:BST = load %36
                store %param, %37
                %38:i32 = load %data_1
                store %param_1, %38
                %39:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
                %40:ptr<private, BST, read_write> = access %tree_1, %x_189
                %41:BST = load %param
                store %40, %41
                ret
              }
              $B11: {  # false
                %42:i32 = load %baseIndex
                %43:ptr<private, i32, read_write> = access %tree_1, %42, 1u
                %44:i32 = load %43
                store %baseIndex, %44
                continue  # -> $B5
              }
            }
            exit_if  # if_2
          }
          $B9: {  # false
            %45:i32 = load %baseIndex
            %46:ptr<private, i32, read_write> = access %tree_1, %45, 2u
            %47:i32 = load %46
            %48:bool = eq %47, -1i
            if %48 [t: $B12, f: $B13] {  # if_4
              $B12: {  # true
                %49:i32 = load %baseIndex
                %x_206:i32 = let %49
                %51:ptr<private, i32, read_write> = access %tree_1, %x_206, 2u
                %52:i32 = load %treeIndex
                store %51, %52
                %53:i32 = load %treeIndex
                %x_209:i32 = let %53
                %55:ptr<private, BST, read_write> = access %tree_1, %x_209
                %56:BST = load %55
                store %param_2, %56
                %57:i32 = load %data_1
                store %param_3, %57
                %58:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
                %59:ptr<private, BST, read_write> = access %tree_1, %x_209
                %60:BST = load %param_2
                store %59, %60
                ret
              }
              $B13: {  # false
                %61:i32 = load %baseIndex
                %62:ptr<private, i32, read_write> = access %tree_1, %61, 2u
                %63:i32 = load %62
                store %baseIndex, %63
                continue  # -> $B5
              }
            }
            exit_if  # if_2
          }
        }
        unreachable
      }
      $B5: {  # continuing
        next_iteration  # -> $B4
      }
    }
    ret
  }
}
%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
  $B14: {
    %index:ptr<function, i32, read_write> = var
    %currentNode:ptr<function, BST, read_write> = var
    %x_220:ptr<function, i32, read_write> = var
    store %index, 0i
    loop [b: $B15, c: $B16] {  # loop_2
      $B15: {  # body
        %69:i32 = load %index
        %70:bool = neq %69, -1i
        if %70 [t: $B17, f: $B18] {  # if_5
          $B17: {  # true
            exit_if  # if_5
          }
          $B18: {  # false
            exit_loop  # loop_2
          }
        }
        %71:i32 = load %index
        %72:ptr<private, BST, read_write> = access %tree_1, %71
        %73:BST = load %72
        store %currentNode, %73
        %74:ptr<function, i32, read_write> = access %currentNode, 0u
        %75:i32 = load %74
        %76:i32 = load %t
        %77:bool = eq %75, %76
        if %77 [t: $B19] {  # if_6
          $B19: {  # true
            %78:i32 = load %t
            %x_237:i32 = let %78
            ret %x_237
          }
        }
        %80:i32 = load %t
        %81:ptr<function, i32, read_write> = access %currentNode, 0u
        %82:i32 = load %81
        %83:bool = gt %80, %82
        if %83 [t: $B20, f: $B21] {  # if_7
          $B20: {  # true
            %84:ptr<function, i32, read_write> = access %currentNode, 2u
            %85:i32 = load %84
            store %x_220, %85
            exit_if  # if_7
          }
          $B21: {  # false
            %86:ptr<function, i32, read_write> = access %currentNode, 1u
            %87:i32 = load %86
            store %x_220, %87
            exit_if  # if_7
          }
        }
        %88:i32 = load %x_220
        store %index, %88
        continue  # -> $B16
      }
      $B16: {  # continuing
        next_iteration  # -> $B15
      }
    }
    ret -1i
  }
}
%main_1 = func():void {
  $B22: {
    %treeIndex_1:ptr<function, i32, read_write> = var
    %param_4:ptr<function, BST, read_write> = var
    %param_5:ptr<function, i32, read_write> = var
    %param_6:ptr<function, i32, read_write> = var
    %param_7:ptr<function, i32, read_write> = var
    %param_8:ptr<function, i32, read_write> = var
    %param_9:ptr<function, i32, read_write> = var
    %param_10:ptr<function, i32, read_write> = var
    %param_11:ptr<function, i32, read_write> = var
    %param_12:ptr<function, i32, read_write> = var
    %param_13:ptr<function, i32, read_write> = var
    %param_14:ptr<function, i32, read_write> = var
    %param_15:ptr<function, i32, read_write> = var
    %param_16:ptr<function, i32, read_write> = var
    %param_17:ptr<function, i32, read_write> = var
    %param_18:ptr<function, i32, read_write> = var
    %param_19:ptr<function, i32, read_write> = var
    %param_20:ptr<function, i32, read_write> = var
    %param_21:ptr<function, i32, read_write> = var
    %param_22:ptr<function, i32, read_write> = var
    %param_23:ptr<function, i32, read_write> = var
    %count:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %result:ptr<function, i32, read_write> = var
    %param_24:ptr<function, i32, read_write> = var
    store %treeIndex_1, 0i
    %115:ptr<private, BST, read_write> = access %tree_1, 0i
    %116:BST = load %115
    store %param_4, %116
    store %param_5, 9i
    %117:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
    %118:ptr<private, BST, read_write> = access %tree_1, 0i
    %119:BST = load %param_4
    store %118, %119
    %120:i32 = load %treeIndex_1
    %121:i32 = add %120, 1i
    store %treeIndex_1, %121
    %122:i32 = load %treeIndex_1
    store %param_6, %122
    store %param_7, 5i
    %123:void = call %insert_i1_i1_, %param_6, %param_7
    %124:i32 = load %treeIndex_1
    %125:i32 = add %124, 1i
    store %treeIndex_1, %125
    %126:i32 = load %treeIndex_1
    store %param_8, %126
    store %param_9, 12i
    %127:void = call %insert_i1_i1_, %param_8, %param_9
    %128:i32 = load %treeIndex_1
    %129:i32 = add %128, 1i
    store %treeIndex_1, %129
    %130:i32 = load %treeIndex_1
    store %param_10, %130
    store %param_11, 15i
    %131:void = call %insert_i1_i1_, %param_10, %param_11
    %132:i32 = load %treeIndex_1
    %133:i32 = add %132, 1i
    store %treeIndex_1, %133
    %134:i32 = load %treeIndex_1
    store %param_12, %134
    store %param_13, 7i
    %135:void = call %insert_i1_i1_, %param_12, %param_13
    %136:i32 = load %treeIndex_1
    %137:i32 = add %136, 1i
    store %treeIndex_1, %137
    %138:i32 = load %treeIndex_1
    store %param_14, %138
    store %param_15, 8i
    %139:void = call %insert_i1_i1_, %param_14, %param_15
    %140:i32 = load %treeIndex_1
    %141:i32 = add %140, 1i
    store %treeIndex_1, %141
    %142:i32 = load %treeIndex_1
    store %param_16, %142
    store %param_17, 2i
    %143:void = call %insert_i1_i1_, %param_16, %param_17
    %144:i32 = load %treeIndex_1
    %145:i32 = add %144, 1i
    store %treeIndex_1, %145
    %146:i32 = load %treeIndex_1
    store %param_18, %146
    store %param_19, 6i
    %147:void = call %insert_i1_i1_, %param_18, %param_19
    %148:i32 = load %treeIndex_1
    %149:i32 = add %148, 1i
    store %treeIndex_1, %149
    %150:i32 = load %treeIndex_1
    store %param_20, %150
    store %param_21, 17i
    %151:void = call %insert_i1_i1_, %param_20, %param_21
    %152:i32 = load %treeIndex_1
    %153:i32 = add %152, 1i
    store %treeIndex_1, %153
    %154:i32 = load %treeIndex_1
    store %param_22, %154
    store %param_23, 13i
    %155:void = call %insert_i1_i1_, %param_22, %param_23
    store %count, 0i
    store %i, 0i
    loop [b: $B23, c: $B24] {  # loop_3
      $B23: {  # body
        %156:i32 = load %i
        %157:bool = lt %156, 20i
        if %157 [t: $B25, f: $B26] {  # if_8
          $B25: {  # true
            exit_if  # if_8
          }
          $B26: {  # false
            exit_loop  # loop_3
          }
        }
        %158:i32 = load %i
        store %param_24, %158
        %159:i32 = call %search_i1_, %param_24
        %x_132:i32 = let %159
        store %result, %x_132
        %161:i32 = load %i
        %x_133:i32 = let %161
        switch %x_133 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
          $B27: {  # case
            %163:i32 = load %result
            %164:i32 = load %i
            %165:bool = eq %163, %164
            if %165 [t: $B29] {  # if_9
              $B29: {  # true
                %166:i32 = load %count
                %167:i32 = add %166, 1i
                store %count, %167
                exit_if  # if_9
              }
            }
            exit_switch  # switch_1
          }
          $B28: {  # case
            %168:i32 = load %result
            %169:bool = eq %168, -1i
            if %169 [t: $B30] {  # if_10
              $B30: {  # true
                %170:i32 = load %count
                %171:i32 = add %170, 1i
                store %count, %171
                exit_if  # if_10
              }
            }
            exit_switch  # switch_1
          }
        }
        continue  # -> $B24
      }
      $B24: {  # continuing
        %172:i32 = load %i
        %173:i32 = add %172, 1i
        store %i, %173
        next_iteration  # -> $B23
      }
    }
    %174:i32 = load %count
    %175:bool = eq %174, 20i
    if %175 [t: $B31, f: $B32] {  # if_11
      $B31: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_11
      }
      $B32: {  # false
        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
        exit_if  # if_11
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B33: {
    %177:void = call %main_1
    %178:vec4<f32> = load %x_GLF_color
    %179:main_out = construct %178
    ret %179
  }
}

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