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_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_80:ptr<function, vec2<i32>, read_write> = var
    %x_83:ptr<function, i32, read_write> = var
    %x_113:ptr<function, vec2<i32>, read_write> = var
    %x_114:ptr<function, vec2<i32>, read_write> = var
    %x_116:ptr<function, vec2<i32>, read_write> = var
    %x_119:ptr<function, i32, read_write> = var
    %12:vec4<f32> = load %gl_FragCoord
    %13:vec2<f32> = swizzle %12, xy
    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %15:vec2<f32> = load %14
    %x_63:vec2<f32> = div %13, %15
    %17:f32 = access %x_63, 0u
    %18:f32 = mul %17, 8.0f
    %x_66:i32 = convert %18
    %20:f32 = access %x_63, 1u
    %21:f32 = mul %20, 8.0f
    %x_69:i32 = convert %21
    %23:i32 = and %x_66, 5i
    %24:i32 = and %x_69, 10i
    %25:i32 = or %23, %24
    %26:i32 = mul %25, 8i
    %27:i32 = and %x_69, 5i
    %28:i32 = and %x_66, 10i
    %29:i32 = or %27, %28
    %30:i32 = add %26, %29
    %31:vec2<i32> = construct %30, 0i
    store %x_80, %31
    store %x_83, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_94:ptr<function, vec2<i32>, read_write> = var
        %x_95:ptr<function, vec2<i32>, read_write> = var
        %x_102:ptr<function, vec2<i32>, read_write> = var
        %x_103:ptr<function, vec2<i32>, read_write> = var
        %x_84:ptr<function, i32, read_write> = var
        %37:i32 = load %x_83
        %38:bool = lt %37, 100i
        if %38 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %39:vec2<i32> = load %x_80
        store %x_95, %39
        %40:i32 = load_vector_element %x_80, 0u
        %41:bool = gt %40, 0i
        if %41 [t: %b7] {  # if_2
          %b7 = block {  # true
            %42:vec2<i32> = load %x_80
            store %x_94, %42
            %43:i32 = load_vector_element %x_80, 1u
            %44:i32 = sub %43, 1i
            store_vector_element %x_94, 1u, %44
            %45:vec2<i32> = load %x_94
            store %x_95, %45
            exit_if  # if_2
          }
        }
        %46:vec2<i32> = load %x_95
        store %x_103, %46
        %47:i32 = load_vector_element %x_95, 0u
        %48:bool = lt %47, 0i
        if %48 [t: %b8] {  # if_3
          %b8 = block {  # true
            %49:vec2<i32> = load %x_95
            store %x_102, %49
            %50:i32 = load_vector_element %x_95, 1u
            %51:i32 = add %50, 1i
            store_vector_element %x_102, 1u, %51
            %52:vec2<i32> = load %x_102
            store %x_103, %52
            exit_if  # if_3
          }
        }
        %53:vec2<i32> = load %x_103
        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %53
        %55:i32 = load_vector_element %x_103, 0u
        %56:i32 = load_vector_element %x_103, 1u
        %57:i32 = div %56, 2i
        %58:i32 = add %55, %57
        store_vector_element %x_81_1, 0u, %58
        %x_81:vec2<i32> = load %x_81_1
        continue %b4
      }
      %b4 = block {  # continuing
        %60:i32 = load %x_83
        %61:i32 = add %60, 1i
        store %x_84, %61
        store %x_80, %x_81
        %62:i32 = load %x_84
        store %x_83, %62
        next_iteration %b3
      }
    }
    %x_108:i32 = load_vector_element %x_80, 0u
    %64:vec2<i32> = load %x_80
    store %x_114, %64
    %65:bool = lt %x_108, 0i
    if %65 [t: %b9] {  # if_4
      %b9 = block {  # true
        store %x_113, vec2<i32>(0i)
        %66:i32 = negation %x_108
        store_vector_element %x_113, 0u, %66
        %67:vec2<i32> = load %x_113
        store %x_114, %67
        exit_if  # if_4
      }
    }
    %68:vec2<i32> = load %x_114
    store %x_116, %68
    loop [b: %b10, c: %b11] {  # loop_2
      %b10 = block {  # body
        %x_117:ptr<function, vec2<i32>, read_write> = var
        %70:i32 = load_vector_element %x_116, 0u
        store %x_119, %70
        %71:i32 = load %x_119
        %72:bool = gt %71, 15i
        if %72 [t: %b12, f: %b13] {  # if_5
          %b12 = block {  # true
            exit_if  # if_5
          }
          %b13 = block {  # false
            exit_loop  # loop_2
          }
        }
        continue %b11
      }
      %b11 = block {  # continuing
        store %x_117, vec2<i32>(0i)
        %73:i32 = load %x_119
        %74:i32 = sub %73, 16i
        store_vector_element %x_117, 0u, %74
        %75:vec2<i32> = load %x_117
        store %x_116, %75
        next_iteration %b10
      }
    }
    store %indexable, 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))
    %x_123:array<vec4<f32>, 16> = load %indexable
    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
    store %indexable, %x_123
    %77:i32 = load %x_119
    %78:ptr<function, vec4<f32>, read_write> = access %indexable, %77
    %79:vec4<f32> = load %78
    store %x_GLF_color, %79
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
  %b14 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %82:void = call %main_1
    %83:vec4<f32> = load %x_GLF_color
    %84:main_out = construct %83
    ret %84
  }
}

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