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
    %x_104:f32 = load %19
    store %a, %x_104
    %21:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %x_106:f32 = load %21
    store %b, %x_106
    %23:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
    %x_24:i32 = load %23
    store %i, %x_24
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_25:i32 = load %i
        %26:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %x_26:i32 = load %26
        %28:bool = lt %x_25, %x_26
        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
        %x_27:i32 = load %29
        store %i_1, %x_27
        loop [b: %b7, c: %b8] {  # loop_2
          %b7 = block {  # body
            %x_28:i32 = load %i_1
            %32:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
            %x_29:i32 = load %32
            %34:bool = lt %x_28, %x_29
            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
            %x_30:i32 = load %35
            store %i_2, %x_30
            loop [b: %b11, c: %b12] {  # loop_3
              %b11 = block {  # body
                %x_31:i32 = load %i_2
                %38:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                %x_32:i32 = load %38
                %40:bool = lt %x_31, %x_32
                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
                %x_33:i32 = load %41
                store %i_3, %x_33
                loop [b: %b15, c: %b16] {  # loop_4
                  %b15 = block {  # body
                    %x_34:i32 = load %i_3
                    %44:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                    %x_35:i32 = load %44
                    %46:bool = lt %x_34, %x_35
                    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
                    %x_36:i32 = load %47
                    store %i_4, %x_36
                    loop [b: %b19, c: %b20] {  # loop_5
                      %b19 = block {  # body
                        %x_37:i32 = load %i_4
                        %50:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                        %x_38:i32 = load %50
                        %52:bool = lt %x_37, %x_38
                        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
                        %x_39:i32 = load %53
                        store %i_5, %x_39
                        loop [b: %b23, c: %b24] {  # loop_6
                          %b23 = block {  # body
                            %x_40:i32 = load %i_5
                            %56:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                            %x_41:i32 = load %56
                            %58:bool = lt %x_40, %x_41
                            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
                            %x_42:i32 = load %59
                            store %i_6, %x_42
                            loop [b: %b27, c: %b28] {  # loop_7
                              %b27 = block {  # body
                                %x_43:i32 = load %i_6
                                %62:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                %x_44:i32 = load %62
                                %64:bool = lt %x_43, %x_44
                                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
                                %x_45:i32 = load %65
                                store %i_7, %x_45
                                loop [b: %b31, c: %b32] {  # loop_8
                                  %b31 = block {  # body
                                    %x_46:i32 = load %i_7
                                    %68:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                    %x_47:i32 = load %68
                                    %70:bool = lt %x_46, %x_47
                                    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
                                    %x_48:i32 = load %71
                                    store %i_8, %x_48
                                    loop [b: %b35, c: %b36] {  # loop_9
                                      %b35 = block {  # body
                                        %x_49:i32 = load %i_8
                                        %74:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                        %x_50:i32 = load %74
                                        %76:bool = lt %x_49, %x_50
                                        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
                                        %x_51:i32 = load %77
                                        store %i_9, %x_51
                                        loop [b: %b39, c: %b40] {  # loop_10
                                          %b39 = block {  # body
                                            %x_52:i32 = load %i_9
                                            %80:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                            %x_53:i32 = load %80
                                            %82:bool = lt %x_52, %x_53
                                            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
                                            %x_54:i32 = load %83
                                            store %i_10, %x_54
                                            loop [b: %b43, c: %b44] {  # loop_11
                                              %b43 = block {  # body
                                                %x_55:i32 = load %i_10
                                                %86:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                                %x_56:i32 = load %86
                                                %88:bool = lt %x_55, %x_56
                                                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
                                                %x_196:f32 = load %89
                                                store %a, %x_196
                                                %x_198:f32 = load_vector_element %gl_FragCoord, 1u
                                                %92:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
                                                %x_200:f32 = load %92
                                                %94:bool = gt %x_198, %x_200
                                                if %94 [t: %b47] {  # if_12
                                                  %b47 = block {  # true
                                                    exit_loop  # loop_11
                                                  }
                                                }
                                                continue %b44
                                              }
                                              %b44 = block {  # continuing
                                                %x_57:i32 = load %i_10
                                                %96:i32 = add %x_57, 1i
                                                store %i_10, %96
                                                next_iteration %b43
                                              }
                                            }
                                            continue %b40
                                          }
                                          %b40 = block {  # continuing
                                            %x_59:i32 = load %i_9
                                            %98:i32 = add %x_59, 1i
                                            store %i_9, %98
                                            next_iteration %b39
                                          }
                                        }
                                        continue %b36
                                      }
                                      %b36 = block {  # continuing
                                        %x_61:i32 = load %i_8
                                        %100:i32 = add %x_61, 1i
                                        store %i_8, %100
                                        next_iteration %b35
                                      }
                                    }
                                    continue %b32
                                  }
                                  %b32 = block {  # continuing
                                    %x_63:i32 = load %i_7
                                    %102:i32 = add %x_63, 1i
                                    store %i_7, %102
                                    next_iteration %b31
                                  }
                                }
                                continue %b28
                              }
                              %b28 = block {  # continuing
                                %x_65:i32 = load %i_6
                                %104:i32 = add %x_65, 1i
                                store %i_6, %104
                                next_iteration %b27
                              }
                            }
                            continue %b24
                          }
                          %b24 = block {  # continuing
                            %x_67:i32 = load %i_5
                            %106:i32 = add %x_67, 1i
                            store %i_5, %106
                            next_iteration %b23
                          }
                        }
                        continue %b20
                      }
                      %b20 = block {  # continuing
                        %x_69:i32 = load %i_4
                        %108:i32 = add %x_69, 1i
                        store %i_4, %108
                        next_iteration %b19
                      }
                    }
                    continue %b16
                  }
                  %b16 = block {  # continuing
                    %x_71:i32 = load %i_3
                    %110:i32 = add %x_71, 1i
                    store %i_3, %110
                    next_iteration %b15
                  }
                }
                continue %b12
              }
              %b12 = block {  # continuing
                %x_73:i32 = load %i_2
                %112:i32 = add %x_73, 1i
                store %i_2, %112
                next_iteration %b11
              }
            }
            continue %b8
          }
          %b8 = block {  # continuing
            %x_75:i32 = load %i_1
            %114:i32 = add %x_75, 1i
            store %i_1, %114
            next_iteration %b7
          }
        }
        %x_204:f32 = load %b
        %116:f32 = add %x_204, 1.0f
        store %b, %116
        continue %b4
      }
      %b4 = block {  # continuing
        %x_77:i32 = load %i
        %118:i32 = add %x_77, 1i
        store %i, %118
        next_iteration %b3
      }
    }
    %x_206:f32 = load %b
    %x_207:f32 = load %a
    %x_208:f32 = load %a
    %x_209:f32 = load %b
    %123:vec4<f32> = construct %x_206, %x_207, %x_208, %x_209
    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.  *
********************************************************************
