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_109:ptr<function, vec2<i32>, read_write> = var
    %x_115:ptr<function, i32, read_write> = var
    %x_76_phi:ptr<function, vec2<i32>, read_write> = var
    %x_79_phi:ptr<function, i32, read_write> = var
    %x_110_phi:ptr<function, vec2<i32>, read_write> = var
    %x_112_phi:ptr<function, vec2<i32>, read_write> = var
    %x_55:vec4<f32> = load %gl_FragCoord
    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_58:vec2<f32> = load %14
    %16:f32 = access %x_55, 0u
    %17:f32 = access %x_55, 1u
    %18:vec2<f32> = construct %16, %17
    %x_59:vec2<f32> = div %18, %x_58
    %20:f32 = access %x_59, 0u
    %21:f32 = mul %20, 8.0f
    %x_62:i32 = convert %21
    %23:f32 = access %x_59, 1u
    %24:f32 = mul %23, 8.0f
    %x_65:i32 = convert %24
    %26:i32 = and %x_62, 5i
    %27:i32 = and %x_65, 10i
    %28:i32 = or %26, %27
    %29:i32 = mul %28, 8i
    %30:i32 = and %x_65, 5i
    %31:i32 = and %x_62, 10i
    %32:i32 = or %30, %31
    %33:i32 = add %29, %32
    %x_74:vec2<i32> = construct %33, 0i
    store %x_76_phi, %x_74
    store %x_79_phi, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_90:ptr<function, vec2<i32>, read_write> = var
        %x_98:ptr<function, vec2<i32>, read_write> = var
        %x_80:ptr<function, i32, read_write> = var
        %x_91_phi:ptr<function, vec2<i32>, read_write> = var
        %x_99_phi:ptr<function, vec2<i32>, read_write> = var
        %40:vec2<i32> = load %x_76_phi
        store %x_76, %40
        %x_79:i32 = load %x_79_phi
        %42:bool = lt %x_79, 100i
        if %42 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %43:vec2<i32> = load %x_76
        store %x_91_phi, %43
        %44:i32 = load_vector_element %x_76, 0u
        %45:bool = gt %44, 0i
        if %45 [t: %b7] {  # if_2
          %b7 = block {  # true
            %46:vec2<i32> = load %x_76
            store %x_90, %46
            %47:i32 = load_vector_element %x_76, 1u
            %48:i32 = sub %47, 1i
            store_vector_element %x_90, 1u, %48
            %49:vec2<i32> = load %x_90
            store %x_91_phi, %49
            exit_if  # if_2
          }
        }
        %x_91:vec2<i32> = load %x_91_phi
        store %x_99_phi, %x_91
        %51:i32 = access %x_91, 0u
        %52:bool = lt %51, 0i
        if %52 [t: %b8] {  # if_3
          %b8 = block {  # true
            store %x_98, %x_91
            %53:i32 = access %x_91, 1u
            %54:i32 = add %53, 1i
            store_vector_element %x_98, 1u, %54
            %55:vec2<i32> = load %x_98
            store %x_99_phi, %55
            exit_if  # if_3
          }
        }
        %x_99:vec2<i32> = load %x_99_phi
        %x_77_1:ptr<function, vec2<i32>, read_write> = var, %x_99
        %58:i32 = access %x_99, 0u
        %59:i32 = access %x_99, 1u
        %60:i32 = div %59, 2i
        %61:i32 = add %58, %60
        store_vector_element %x_77_1, 0u, %61
        %x_77:vec2<i32> = load %x_77_1
        continue %b4
      }
      %b4 = block {  # continuing
        %63:i32 = add %x_79, 1i
        store %x_80, %63
        store %x_76_phi, %x_77
        %64:i32 = load %x_80
        store %x_79_phi, %64
        next_iteration %b3
      }
    }
    %x_104:i32 = load_vector_element %x_76, 0u
    %66:vec2<i32> = load %x_76
    store %x_110_phi, %66
    %67:bool = lt %x_104, 0i
    if %67 [t: %b9] {  # if_4
      %b9 = block {  # true
        %68:vec2<i32> = load %x_76
        store %x_109, %68
        %69:i32 = negation %x_104
        store_vector_element %x_109, 0u, %69
        %70:vec2<i32> = load %x_109
        store %x_110_phi, %70
        exit_if  # if_4
      }
    }
    %x_110:vec2<i32> = load %x_110_phi
    store %x_112_phi, %x_110
    loop [b: %b10, c: %b11] {  # loop_2
      %b10 = block {  # body
        %x_113:ptr<function, vec2<i32>, read_write> = var
        %x_112:vec2<i32> = load %x_112_phi
        %74:i32 = access %x_112, 0u
        store %x_115, %74
        %75:i32 = load %x_115
        %76:bool = gt %75, 15i
        if %76 [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_113, %x_112
        %77:i32 = load %x_115
        %78:i32 = sub %77, 16i
        %79:i32 = bitcast %78
        store_vector_element %x_113, 0u, %79
        %80:vec2<i32> = load %x_113
        store %x_112_phi, %80
        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))
    %81:i32 = load %x_115
    %82:ptr<function, vec4<f32>, read_write> = access %indexable, %81
    %x_120:vec4<f32> = load %82
    store %x_GLF_color, %x_120
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
  %b14 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %86:void = call %main_1
    %87:vec4<f32> = load %x_GLF_color
    %88:main_out = construct %87
    ret %88
  }
}

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