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 {
    %9:f32 = load_vector_element %pos, 0u
    %10:f32 = load_vector_element %quad, 0u
    %11:bool = lt %9, %10
    if %11 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret false
      }
    }
    %12:f32 = load_vector_element %pos, 1u
    %13:f32 = load_vector_element %quad, 1u
    %14:bool = lt %12, %13
    if %14 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret false
      }
    }
    %15:f32 = load_vector_element %pos, 0u
    %16:f32 = load_vector_element %quad, 0u
    %17:f32 = load_vector_element %quad, 2u
    %18:f32 = add %16, %17
    %19:bool = gt %15, %18
    if %19 [t: %b5] {  # if_3
      %b5 = block {  # true
        ret false
      }
    }
    %20:f32 = load_vector_element %pos, 1u
    %21:f32 = load_vector_element %quad, 1u
    %22:f32 = load_vector_element %quad, 3u
    %23:f32 = add %21, %22
    %24:bool = gt %20, %23
    if %24 [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
        %35:i32 = load %i
        %36:bool = lt %35, 8i
        if %36 [t: %b10, f: %b11] {  # if_5
          %b10 = block {  # true
            exit_if  # if_5
          }
          %b11 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_155:i32 = load %i
        %38:vec2<f32> = load %pos_1
        store %param, %38
        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))
        %39:ptr<function, vec4<f32>, read_write> = access %indexable, %x_155
        %40:vec4<f32> = load %39
        store %param_1, %40
        %x_159:bool = call %collision_vf2_vf4_, %param, %param_1
        if %x_159 [t: %b12] {  # if_6
          %b12 = block {  # true
            %x_162: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))
            %43:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_162
            %x_164:f32 = load_vector_element %43, 0u
            %x_166: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))
            %46:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_166
            %x_168:f32 = load_vector_element %46, 1u
            %x_171: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))
            %49:i32 = convert %x_164
            %50:i32 = convert %x_168
            %51:i32 = mul %49, %50
            %52:i32 = mul %x_171, 9i
            %53:i32 = add %51, %52
            %54:i32 = add %53, 11i
            %55:i32 = mod %54, 16i
            %56:ptr<function, vec4<f32>, read_write> = access %indexable_3, %55
            %57:vec4<f32> = load %56
            store %res, %57
            exit_if  # if_6
          }
        }
        continue %b9
      }
      %b9 = block {  # continuing
        %58:i32 = load %i
        %59:i32 = add %58, 1i
        store %i, %59
        next_iteration %b8
      }
    }
    %x_180:vec4<f32> = load %res
    ret %x_180
  }
}
%main_1 = func():void -> %b13 {
  %b13 = block {
    %lin:ptr<function, vec2<f32>, read_write> = var
    %param_2:ptr<function, vec2<f32>, read_write> = var
    %64:vec4<f32> = load %gl_FragCoord
    %65:vec2<f32> = swizzle %64, xy
    %66:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
    %67:vec2<f32> = load %66
    %68:vec2<f32> = div %65, %67
    store %lin, %68
    %69:vec2<f32> = load %lin
    %70:vec2<f32> = mul %69, 32.0f
    %71:vec2<f32> = floor %70
    store %lin, %71
    %72:vec2<f32> = load %lin
    store %param_2, %72
    %x_111:vec4<f32> = call %match_vf2_, %param_2
    store %x_GLF_color, %x_111
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
  %b14 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %76:void = call %main_1
    %77:vec4<f32> = load %x_GLF_color
    %78:main_out = construct %77
    ret %78
  }
}

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