SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 3> @offset(0)
}

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

$B1: {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, f32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    %i_3:ptr<function, i32, read_write> = var
    %i_4:ptr<function, i32, read_write> = var
    %i_5:ptr<function, i32, read_write> = var
    %i_6:ptr<function, i32, read_write> = var
    %i_7:ptr<function, i32, read_write> = var
    %i_8:ptr<function, i32, read_write> = var
    %i_9:ptr<function, i32, read_write> = var
    %i_10:ptr<function, i32, read_write> = var
    %19:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %20:f32 = load %19
    store %a, %20
    %21:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %22:f32 = load %21
    store %b, %22
    %23:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
    %24:i32 = load %23
    store %i, %24
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %25:i32 = load %i
        %26:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %27:i32 = load %26
        %28:bool = lt %25, %27
        if %28 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %29:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %30:i32 = load %29
        store %i_1, %30
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %31:i32 = load %i_1
            %32:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
            %33:i32 = load %32
            %34:bool = lt %31, %33
            if %34 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %35:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
            %36:i32 = load %35
            store %i_2, %36
            loop [b: $B11, c: $B12] {  # loop_3
              $B11: {  # body
                %37:i32 = load %i_2
                %38:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                %39:i32 = load %38
                %40:bool = lt %37, %39
                if %40 [t: $B13, f: $B14] {  # if_3
                  $B13: {  # true
                    exit_if  # if_3
                  }
                  $B14: {  # false
                    exit_loop  # loop_3
                  }
                }
                %41:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
                %42:i32 = load %41
                store %i_3, %42
                loop [b: $B15, c: $B16] {  # loop_4
                  $B15: {  # body
                    %43:i32 = load %i_3
                    %44:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                    %45:i32 = load %44
                    %46:bool = lt %43, %45
                    if %46 [t: $B17, f: $B18] {  # if_4
                      $B17: {  # true
                        exit_if  # if_4
                      }
                      $B18: {  # false
                        exit_loop  # loop_4
                      }
                    }
                    %47:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
                    %48:i32 = load %47
                    store %i_4, %48
                    loop [b: $B19, c: $B20] {  # loop_5
                      $B19: {  # body
                        %49:i32 = load %i_4
                        %50:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                        %51:i32 = load %50
                        %52:bool = lt %49, %51
                        if %52 [t: $B21, f: $B22] {  # if_5
                          $B21: {  # true
                            exit_if  # if_5
                          }
                          $B22: {  # false
                            exit_loop  # loop_5
                          }
                        }
                        %53:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                        %54:i32 = load %53
                        store %i_5, %54
                        loop [b: $B23, c: $B24] {  # loop_6
                          $B23: {  # body
                            %55:i32 = load %i_5
                            %56:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                            %57:i32 = load %56
                            %58:bool = lt %55, %57
                            if %58 [t: $B25, f: $B26] {  # if_6
                              $B25: {  # true
                                exit_if  # if_6
                              }
                              $B26: {  # false
                                exit_loop  # loop_6
                              }
                            }
                            %59:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                            %60:i32 = load %59
                            store %i_6, %60
                            loop [b: $B27, c: $B28] {  # loop_7
                              $B27: {  # body
                                %61:i32 = load %i_6
                                %62:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                %63:i32 = load %62
                                %64:bool = lt %61, %63
                                if %64 [t: $B29, f: $B30] {  # if_7
                                  $B29: {  # true
                                    exit_if  # if_7
                                  }
                                  $B30: {  # false
                                    exit_loop  # loop_7
                                  }
                                }
                                %65:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                %66:i32 = load %65
                                store %i_7, %66
                                loop [b: $B31, c: $B32] {  # loop_8
                                  $B31: {  # body
                                    %67:i32 = load %i_7
                                    %68:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                    %69:i32 = load %68
                                    %70:bool = lt %67, %69
                                    if %70 [t: $B33, f: $B34] {  # if_8
                                      $B33: {  # true
                                        exit_if  # if_8
                                      }
                                      $B34: {  # false
                                        exit_loop  # loop_8
                                      }
                                    }
                                    %71:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                    %72:i32 = load %71
                                    store %i_8, %72
                                    loop [b: $B35, c: $B36] {  # loop_9
                                      $B35: {  # body
                                        %73:i32 = load %i_8
                                        %74:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                        %75:i32 = load %74
                                        %76:bool = lt %73, %75
                                        if %76 [t: $B37, f: $B38] {  # if_9
                                          $B37: {  # true
                                            exit_if  # if_9
                                          }
                                          $B38: {  # false
                                            exit_loop  # loop_9
                                          }
                                        }
                                        %77:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                        %78:i32 = load %77
                                        store %i_9, %78
                                        loop [b: $B39, c: $B40] {  # loop_10
                                          $B39: {  # body
                                            %79:i32 = load %i_9
                                            %80:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                            %81:i32 = load %80
                                            %82:bool = lt %79, %81
                                            if %82 [t: $B41, f: $B42] {  # if_10
                                              $B41: {  # true
                                                exit_if  # if_10
                                              }
                                              $B42: {  # false
                                                exit_loop  # loop_10
                                              }
                                            }
                                            %83:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                            %84:i32 = load %83
                                            store %i_10, %84
                                            loop [b: $B43, c: $B44] {  # loop_11
                                              $B43: {  # body
                                                %85:i32 = load %i_10
                                                %86:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                                %87:i32 = load %86
                                                %88:bool = lt %85, %87
                                                if %88 [t: $B45, f: $B46] {  # if_11
                                                  $B45: {  # true
                                                    exit_if  # if_11
                                                  }
                                                  $B46: {  # false
                                                    exit_loop  # loop_11
                                                  }
                                                }
                                                %89:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
                                                %90:f32 = load %89
                                                store %a, %90
                                                %91:f32 = load_vector_element %gl_FragCoord, 1u
                                                %92:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
                                                %93:f32 = load %92
                                                %94:bool = gt %91, %93
                                                if %94 [t: $B47] {  # if_12
                                                  $B47: {  # true
                                                    exit_loop  # loop_11
                                                  }
                                                }
                                                continue  # -> $B44
                                              }
                                              $B44: {  # continuing
                                                %95:i32 = load %i_10
                                                %96:i32 = add %95, 1i
                                                store %i_10, %96
                                                next_iteration  # -> $B43
                                              }
                                            }
                                            continue  # -> $B40
                                          }
                                          $B40: {  # continuing
                                            %97:i32 = load %i_9
                                            %98:i32 = add %97, 1i
                                            store %i_9, %98
                                            next_iteration  # -> $B39
                                          }
                                        }
                                        continue  # -> $B36
                                      }
                                      $B36: {  # continuing
                                        %99:i32 = load %i_8
                                        %100:i32 = add %99, 1i
                                        store %i_8, %100
                                        next_iteration  # -> $B35
                                      }
                                    }
                                    continue  # -> $B32
                                  }
                                  $B32: {  # continuing
                                    %101:i32 = load %i_7
                                    %102:i32 = add %101, 1i
                                    store %i_7, %102
                                    next_iteration  # -> $B31
                                  }
                                }
                                continue  # -> $B28
                              }
                              $B28: {  # continuing
                                %103:i32 = load %i_6
                                %104:i32 = add %103, 1i
                                store %i_6, %104
                                next_iteration  # -> $B27
                              }
                            }
                            continue  # -> $B24
                          }
                          $B24: {  # continuing
                            %105:i32 = load %i_5
                            %106:i32 = add %105, 1i
                            store %i_5, %106
                            next_iteration  # -> $B23
                          }
                        }
                        continue  # -> $B20
                      }
                      $B20: {  # continuing
                        %107:i32 = load %i_4
                        %108:i32 = add %107, 1i
                        store %i_4, %108
                        next_iteration  # -> $B19
                      }
                    }
                    continue  # -> $B16
                  }
                  $B16: {  # continuing
                    %109:i32 = load %i_3
                    %110:i32 = add %109, 1i
                    store %i_3, %110
                    next_iteration  # -> $B15
                  }
                }
                continue  # -> $B12
              }
              $B12: {  # continuing
                %111:i32 = load %i_2
                %112:i32 = add %111, 1i
                store %i_2, %112
                next_iteration  # -> $B11
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %113:i32 = load %i_1
            %114:i32 = add %113, 1i
            store %i_1, %114
            next_iteration  # -> $B7
          }
        }
        %115:f32 = load %b
        %116:f32 = add %115, 1.0f
        store %b, %116
        continue  # -> $B4
      }
      $B4: {  # continuing
        %117:i32 = load %i
        %118:i32 = add %117, 1i
        store %i, %118
        next_iteration  # -> $B3
      }
    }
    %119:f32 = load %b
    %120:f32 = load %a
    %121:f32 = load %a
    %122:f32 = load %b
    %123:vec4<f32> = construct %119, %120, %121, %122
    store %x_GLF_color, %123
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B48: {
    store %gl_FragCoord, %gl_FragCoord_param
    %126:void = call %main_1
    %127:vec4<f32> = load %x_GLF_color
    %128:main_out = construct %127
    ret %128
  }
}

unhandled variable address space
********************************************************************
*  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.  *
********************************************************************
