SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
  resolution:vec2<f32> @offset(0)
}

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

%b1 = block {  # root
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_20:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %index:ptr<private, i32, read_write> = var
  %state:ptr<private, array<i32, 16>, read_write> = var
}

%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool -> %b2 {
  %b2 = block {
    %x_116:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(false)
    %x_118:f32 = load_vector_element %pos, 0u
    %x_120:f32 = load_vector_element %quad, 0u
    %12:bool = lt %x_118, %x_120
    if %12 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret false
      }
    }
    %x_125:f32 = load_vector_element %pos, 1u
    %x_127:f32 = load_vector_element %quad, 1u
    %15:bool = lt %x_125, %x_127
    if %15 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret false
      }
    }
    %x_132:f32 = load_vector_element %pos, 0u
    %x_134:f32 = load_vector_element %quad, 0u
    %x_136:f32 = load_vector_element %quad, 2u
    %19:f32 = add %x_134, %x_136
    %20:bool = gt %x_132, %19
    if %20 [t: %b5] {  # if_3
      %b5 = block {  # true
        ret false
      }
    }
    %x_142:f32 = load_vector_element %pos, 1u
    %x_144:f32 = load_vector_element %quad, 1u
    %x_146:f32 = load_vector_element %quad, 3u
    %24:f32 = add %x_144, %x_146
    %25:bool = gt %x_142, %24
    if %25 [t: %b6] {  # if_4
      %b6 = block {  # true
        ret false
      }
    }
    ret true
  }
}
%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> -> %b7 {
  %b7 = block {
    %res:ptr<function, vec4<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %param:ptr<function, vec2<f32>, read_write> = var
    %param_1:ptr<function, vec4<f32>, read_write> = var
    %indexable:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %indexable_1:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %indexable_2:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
    store %res, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
    store %i, 0i
    loop [b: %b8, c: %b9] {  # loop_1
      %b8 = block {  # body
        %x_156:i32 = load %i
        %37:bool = lt %x_156, 8i
        if %37 [t: %b10, f: %b11] {  # if_5
          %b10 = block {  # true
            exit_if  # if_5
          }
          %b11 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_159:i32 = load %i
        %x_160:vec2<f32> = load %pos_1
        store %param, %x_160
        store %indexable, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
        %40:ptr<function, vec4<f32>, read_write> = access %indexable, %x_159
        %x_162:vec4<f32> = load %40
        store %param_1, %x_162
        %x_163:bool = call %collision_vf2_vf4_, %param, %param_1
        if %x_163 [t: %b12] {  # if_6
          %b12 = block {  # true
            %x_166:i32 = load %i
            store %indexable_1, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
            %44:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_166
            %x_168:f32 = load_vector_element %44, 0u
            %x_170:i32 = load %i
            store %indexable_2, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
            %47:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_170
            %x_172:f32 = load_vector_element %47, 1u
            %x_175:i32 = load %i
            store %indexable_3, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
            %50:i32 = convert %x_168
            %51:i32 = convert %x_172
            %52:i32 = mul %50, %51
            %53:i32 = mul %x_175, 9i
            %54:i32 = add %52, %53
            %55:i32 = add %54, 11i
            %56:i32 = mod %55, 16i
            %57:ptr<function, vec4<f32>, read_write> = access %indexable_3, %56
            %x_181:vec4<f32> = load %57
            store %res, %x_181
            exit_if  # if_6
          }
        }
        continue %b9
      }
      %b9 = block {  # continuing
        %x_182:i32 = load %i
        %60:i32 = add %x_182, 1i
        store %i, %60
        next_iteration %b8
      }
    }
    %x_184:vec4<f32> = load %res
    ret %x_184
  }
}
%main_1 = func():void -> %b13 {
  %b13 = block {
    %lin:ptr<function, vec2<f32>, read_write> = var
    %param_2:ptr<function, vec2<f32>, read_write> = var
    %x_105:vec4<f32> = load %gl_FragCoord
    %66:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
    %x_108:vec2<f32> = load %66
    %68:f32 = access %x_105, 0u
    %69:f32 = access %x_105, 1u
    %70:vec2<f32> = construct %68, %69
    %71:vec2<f32> = div %70, %x_108
    store %lin, %71
    %x_110:vec2<f32> = load %lin
    %73:vec2<f32> = mul %x_110, 32.0f
    %74:vec2<f32> = floor %73
    store %lin, %74
    %x_113:vec2<f32> = load %lin
    store %param_2, %x_113
    %x_114:vec4<f32> = call %match_vf2_, %param_2
    store %x_GLF_color, %x_114
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
  %b14 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %79:void = call %main_1
    %80:vec4<f32> = load %x_GLF_color
    %81:main_out = construct %80
    ret %81
  }
}

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