SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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 = block {  # 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 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # 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 = block {  # 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 = block {  # true
                exit_if  # if_2
              }
              %b10 = block {  # 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 = block {  # 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 = block {  # true
                    exit_if  # if_3
                  }
                  %b14 = block {  # 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 = block {  # 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 = block {  # true
                        exit_if  # if_4
                      }
                      %b18 = block {  # 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 = block {  # 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 = block {  # true
                            exit_if  # if_5
                          }
                          %b22 = block {  # 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 = block {  # 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 = block {  # true
                                exit_if  # if_6
                              }
                              %b26 = block {  # 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 = block {  # 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 = block {  # true
                                    exit_if  # if_7
                                  }
                                  %b30 = block {  # 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 = block {  # 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 = block {  # true
                                        exit_if  # if_8
                                      }
                                      %b34 = block {  # 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 = block {  # 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 = block {  # true
                                            exit_if  # if_9
                                          }
                                          %b38 = block {  # 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 = block {  # 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 = block {  # true
                                                exit_if  # if_10
                                              }
                                              %b42 = block {  # 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 = block {  # 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 = block {  # true
                                                    exit_if  # if_11
                                                  }
                                                  %b46 = block {  # 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 = block {  # true
                                                    exit_loop  # loop_11
                                                  }
                                                }
                                                continue %b44
                                              }
                                              %b44 = block {  # continuing
                                                %95:i32 = load %i_10
                                                %96:i32 = add %95, 1i
                                                store %i_10, %96
                                                next_iteration %b43
                                              }
                                            }
                                            continue %b40
                                          }
                                          %b40 = block {  # continuing
                                            %97:i32 = load %i_9
                                            %98:i32 = add %97, 1i
                                            store %i_9, %98
                                            next_iteration %b39
                                          }
                                        }
                                        continue %b36
                                      }
                                      %b36 = block {  # continuing
                                        %99:i32 = load %i_8
                                        %100:i32 = add %99, 1i
                                        store %i_8, %100
                                        next_iteration %b35
                                      }
                                    }
                                    continue %b32
                                  }
                                  %b32 = block {  # continuing
                                    %101:i32 = load %i_7
                                    %102:i32 = add %101, 1i
                                    store %i_7, %102
                                    next_iteration %b31
                                  }
                                }
                                continue %b28
                              }
                              %b28 = block {  # continuing
                                %103:i32 = load %i_6
                                %104:i32 = add %103, 1i
                                store %i_6, %104
                                next_iteration %b27
                              }
                            }
                            continue %b24
                          }
                          %b24 = block {  # continuing
                            %105:i32 = load %i_5
                            %106:i32 = add %105, 1i
                            store %i_5, %106
                            next_iteration %b23
                          }
                        }
                        continue %b20
                      }
                      %b20 = block {  # continuing
                        %107:i32 = load %i_4
                        %108:i32 = add %107, 1i
                        store %i_4, %108
                        next_iteration %b19
                      }
                    }
                    continue %b16
                  }
                  %b16 = block {  # continuing
                    %109:i32 = load %i_3
                    %110:i32 = add %109, 1i
                    store %i_3, %110
                    next_iteration %b15
                  }
                }
                continue %b12
              }
              %b12 = block {  # continuing
                %111:i32 = load %i_2
                %112:i32 = add %111, 1i
                store %i_2, %112
                next_iteration %b11
              }
            }
            continue %b8
          }
          %b8 = block {  # 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 = block {  # 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 {
  %b48 = block {
    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.  *
********************************************************************
