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 {
    %x_77:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_78:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_79:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_80:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_89:ptr<function, vec4<f32>, read_write> = var
    %x_92:ptr<function, i32, read_write> = var
    %11:vec4<f32> = load %gl_FragCoord
    %12:vec2<f32> = swizzle %11, xy
    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %14:vec2<f32> = load %13
    %15:vec2<f32> = div %12, %14
    %16:vec2<f32> = mul %15, 32.0f
    %x_87:vec2<f32> = floor %16
    store %x_89, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
    store %x_92, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_121:ptr<function, bool, read_write> = var
        %x_136:ptr<function, vec4<f32>, read_write> = var
        %x_90:ptr<function, vec4<f32>, read_write> = var
        %x_93:ptr<function, i32, read_write> = var
        %22:i32 = load %x_92
        %23:bool = lt %22, 8i
        if %23 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_98:ptr<function, vec4<f32>, read_write> = var
        store %x_77, 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))
        %25:i32 = load %x_92
        %26:ptr<function, vec4<f32>, read_write> = access %x_77, %25
        %27:vec4<f32> = load %26
        store %x_98, %27
        switch 0u [c: (default, %b7)] {  # switch_1
          %b7 = block {  # case
            %x_101:f32 = access %x_87, 0u
            %x_102:f32 = load_vector_element %x_98, 0u
            %30:bool = lt %x_101, %x_102
            if %30 [t: %b8] {  # if_2
              %b8 = block {  # true
                store %x_121, false
                exit_switch  # switch_1
              }
            }
            %x_106:f32 = access %x_87, 1u
            %x_107:f32 = load_vector_element %x_98, 1u
            %33:bool = lt %x_106, %x_107
            if %33 [t: %b9] {  # if_3
              %b9 = block {  # true
                store %x_121, false
                exit_switch  # switch_1
              }
            }
            %34:f32 = load_vector_element %x_98, 2u
            %35:f32 = add %x_102, %34
            %36:bool = gt %x_101, %35
            if %36 [t: %b10] {  # if_4
              %b10 = block {  # true
                store %x_121, false
                exit_switch  # switch_1
              }
            }
            %37:f32 = load_vector_element %x_98, 3u
            %38:f32 = add %x_107, %37
            %39:bool = gt %x_106, %38
            if %39 [t: %b11] {  # if_5
              %b11 = block {  # true
                store %x_121, false
                exit_switch  # switch_1
              }
            }
            store %x_121, true
            exit_switch  # switch_1
          }
        }
        %40:vec4<f32> = load %x_89
        store %x_90, %40
        %41:bool = load %x_121
        if %41 [t: %b12] {  # if_6
          %b12 = block {  # true
            store %x_78, 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))
            %42:i32 = load %x_92
            %43:ptr<function, vec4<f32>, read_write> = access %x_78, %42
            %x_125:f32 = load_vector_element %43, 0u
            store %x_79, 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))
            %45:i32 = load %x_92
            %46:ptr<function, vec4<f32>, read_write> = access %x_79, %45
            %x_128:f32 = load_vector_element %46, 1u
            store %x_80, 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))
            %48:i32 = convert %x_125
            %49:i32 = convert %x_128
            %50:i32 = mul %48, %49
            %51:i32 = load %x_92
            %52:i32 = mul %51, 9i
            %53:i32 = add %50, %52
            %54:i32 = add %53, 11i
            %55:i32 = mod %54, 16i
            %56:ptr<function, vec4<f32>, read_write> = access %x_80, %55
            %57:vec4<f32> = load %56
            store %x_136, %57
            %58:vec4<f32> = load %x_136
            store %x_90, %58
            exit_if  # if_6
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %59:i32 = load %x_92
        %60:i32 = add %59, 1i
        store %x_93, %60
        %61:vec4<f32> = load %x_90
        store %x_89, %61
        %62:i32 = load %x_93
        store %x_92, %62
        next_iteration %b3
      }
    }
    %63:vec4<f32> = load %x_89
    store %x_GLF_color, %63
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
  %b13 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %66:void = call %main_1
    %67:vec4<f32> = load %x_GLF_color
    %68:main_out = construct %67
    ret %68
  }
}

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