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_62:vec2<f32> = div %13, %15
    %17:f32 = access %x_62, 0u
    %18:f32 = mul %17, 8.0f
    %x_65:i32 = convert %18
    %20:f32 = access %x_62, 1u
    %21:f32 = mul %20, 8.0f
    %x_69:i32 = convert %21
    %23:i32 = and %x_65, 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_65, 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
        %66:vec2<i32> = load %x_80
        store %x_113, %66
        %67:i32 = negation %x_108
        store_vector_element %x_113, 0u, %67
        %68:vec2<i32> = load %x_113
        store %x_114, %68
        exit_if  # if_4
      }
    }
    %69:vec2<i32> = load %x_114
    store %x_116, %69
    loop [b: %b10, c: %b11] {  # loop_2
      %b10 = block {  # body
        %x_117:ptr<function, vec2<i32>, read_write> = var
        %71:i32 = load_vector_element %x_116, 0u
        store %x_119, %71
        %72:i32 = load %x_119
        %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_116
        store %x_117, %74
        %75:i32 = load %x_119
        %76:i32 = sub %75, 16i
        store_vector_element %x_117, 0u, %76
        %77:vec2<i32> = load %x_117
        store %x_116, %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))
    %x_124:array<vec4<f32>, 16> = load %indexable
    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
    store %indexable, %x_124
    %79:i32 = load %x_119
    %80:ptr<function, vec4<f32>, read_write> = access %indexable, %79
    %81:vec4<f32> = load %80
    store %x_GLF_color, %81
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
  %b14 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %84:void = call %main_1
    %85:vec4<f32> = load %x_GLF_color
    %86:main_out = construct %85
    ret %86
  }
}

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