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_76:ptr<function, vec2<i32>, read_write> = var
    %x_79:ptr<function, i32, read_write> = var
    %x_109:ptr<function, vec2<i32>, read_write> = var
    %x_110:ptr<function, vec2<i32>, read_write> = var
    %x_112:ptr<function, vec2<i32>, read_write> = var
    %x_115: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_59:vec2<f32> = div %13, %15
    %17:f32 = access %x_59, 0u
    %18:f32 = mul %17, 8.0f
    %x_62:i32 = convert %18
    %20:f32 = access %x_59, 1u
    %21:f32 = mul %20, 8.0f
    %x_65:i32 = convert %21
    %23:i32 = and %x_62, 5i
    %24:i32 = and %x_65, 10i
    %25:i32 = or %23, %24
    %26:i32 = mul %25, 8i
    %27:i32 = and %x_65, 5i
    %28:i32 = and %x_62, 10i
    %29:i32 = or %27, %28
    %30:i32 = add %26, %29
    %31:vec2<i32> = construct %30, 0i
    store %x_76, %31
    store %x_79, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_90:ptr<function, vec2<i32>, read_write> = var
        %x_91:ptr<function, vec2<i32>, read_write> = var
        %x_98:ptr<function, vec2<i32>, read_write> = var
        %x_99:ptr<function, vec2<i32>, read_write> = var
        %x_80:ptr<function, i32, read_write> = var
        %37:i32 = load %x_79
        %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_76
        store %x_91, %39
        %40:i32 = load_vector_element %x_76, 0u
        %41:bool = gt %40, 0i
        if %41 [t: %b7] {  # if_2
          %b7 = block {  # true
            %42:vec2<i32> = load %x_76
            store %x_90, %42
            %43:i32 = load_vector_element %x_76, 1u
            %44:i32 = sub %43, 1i
            store_vector_element %x_90, 1u, %44
            %45:vec2<i32> = load %x_90
            store %x_91, %45
            exit_if  # if_2
          }
        }
        %46:vec2<i32> = load %x_91
        store %x_99, %46
        %47:i32 = load_vector_element %x_91, 0u
        %48:bool = lt %47, 0i
        if %48 [t: %b8] {  # if_3
          %b8 = block {  # true
            %49:vec2<i32> = load %x_91
            store %x_98, %49
            %50:i32 = load_vector_element %x_91, 1u
            %51:i32 = add %50, 1i
            store_vector_element %x_98, 1u, %51
            %52:vec2<i32> = load %x_98
            store %x_99, %52
            exit_if  # if_3
          }
        }
        %53:vec2<i32> = load %x_99
        %x_77_1:ptr<function, vec2<i32>, read_write> = var, %53
        %55:i32 = load_vector_element %x_99, 0u
        %56:i32 = load_vector_element %x_99, 1u
        %57:i32 = div %56, 2i
        %58:i32 = add %55, %57
        store_vector_element %x_77_1, 0u, %58
        %x_77:vec2<i32> = load %x_77_1
        continue %b4
      }
      %b4 = block {  # continuing
        %60:i32 = load %x_79
        %61:i32 = add %60, 1i
        store %x_80, %61
        store %x_76, %x_77
        %62:i32 = load %x_80
        store %x_79, %62
        next_iteration %b3
      }
    }
    %x_104:i32 = load_vector_element %x_76, 0u
    %64:vec2<i32> = load %x_76
    store %x_110, %64
    %65:bool = lt %x_104, 0i
    if %65 [t: %b9] {  # if_4
      %b9 = block {  # true
        %66:vec2<i32> = load %x_76
        store %x_109, %66
        %67:i32 = negation %x_104
        store_vector_element %x_109, 0u, %67
        %68:vec2<i32> = load %x_109
        store %x_110, %68
        exit_if  # if_4
      }
    }
    %69:vec2<i32> = load %x_110
    store %x_112, %69
    loop [b: %b10, c: %b11] {  # loop_2
      %b10 = block {  # body
        %x_113:ptr<function, vec2<i32>, read_write> = var
        %71:i32 = load_vector_element %x_112, 0u
        store %x_115, %71
        %72:i32 = load %x_115
        %73:bool = gt %72, 15i
        if %73 [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
        %74:vec2<i32> = load %x_112
        store %x_113, %74
        %75:i32 = load %x_115
        %76:i32 = sub %75, 16i
        store_vector_element %x_113, 0u, %76
        %77:vec2<i32> = load %x_113
        store %x_112, %77
        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))
    %78:i32 = load %x_115
    %79:ptr<function, vec4<f32>, read_write> = access %indexable, %78
    %80:vec4<f32> = load %79
    store %x_GLF_color, %80
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
  %b14 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %83:void = call %main_1
    %84:vec4<f32> = load %x_GLF_color
    %85:main_out = construct %84
    ret %85
  }
}

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