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)
    %10:f32 = load_vector_element %pos, 0u
    %11:f32 = load_vector_element %quad, 0u
    %12:bool = lt %10, %11
    if %12 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret false
      }
    }
    %13:f32 = load_vector_element %pos, 1u
    %14:f32 = load_vector_element %quad, 1u
    %15:bool = lt %13, %14
    if %15 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret false
      }
    }
    %16:f32 = load_vector_element %pos, 0u
    %17:f32 = load_vector_element %quad, 0u
    %18:f32 = load_vector_element %quad, 2u
    %19:f32 = add %17, %18
    %20:bool = gt %16, %19
    if %20 [t: %b5] {  # if_3
      %b5 = block {  # true
        ret false
      }
    }
    %21:f32 = load_vector_element %pos, 1u
    %22:f32 = load_vector_element %quad, 1u
    %23:f32 = load_vector_element %quad, 3u
    %24:f32 = add %22, %23
    %25:bool = gt %21, %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
        %36:i32 = load %i
        %37:bool = lt %36, 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
        %39:vec2<f32> = load %pos_1
        store %param, %39
        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
        %41:vec4<f32> = load %40
        store %param_1, %41
        %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
            %58:vec4<f32> = load %57
            store %res, %58
            exit_if  # if_6
          }
        }
        continue %b9
      }
      %b9 = block {  # continuing
        %59:i32 = load %i
        %60:i32 = add %59, 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
    %65:vec4<f32> = load %gl_FragCoord
    %66:vec2<f32> = swizzle %65, xy
    %67:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
    %68:vec2<f32> = load %67
    %69:vec2<f32> = div %66, %68
    store %lin, %69
    %70:vec2<f32> = load %lin
    %71:vec2<f32> = mul %70, 32.0f
    %72:vec2<f32> = floor %71
    store %lin, %72
    %73:vec2<f32> = load %lin
    store %param_2, %73
    %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
    %77:void = call %main_1
    %78:vec4<f32> = load %x_GLF_color
    %79:main_out = construct %78
    ret %79
  }
}

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