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_81:ptr<function, array<vec4<f32>, 8>, read_write> = var, array<vec4<f32>, 8>(vec4<f32>(0.0f))
    %x_82:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_83:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_84:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_85:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_95:ptr<function, vec4<f32>, read_write> = var
    %x_95_phi:ptr<function, vec4<f32>, read_write> = var
    %x_98_phi:ptr<function, i32, read_write> = var
    store %x_81, 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))
    %x_86:array<vec4<f32>, 8> = load %x_81
    %x_87:vec4<f32> = load %gl_FragCoord
    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_90:vec2<f32> = load %15
    %17:f32 = access %x_87, 0u
    %18:f32 = access %x_87, 1u
    %19:vec2<f32> = construct %17, %18
    %20:vec2<f32> = div %19, %x_90
    %21:vec2<f32> = mul %20, 32.0f
    %x_93:vec2<f32> = floor %21
    store %x_95_phi, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
    store %x_98_phi, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_143:ptr<function, vec4<f32>, read_write> = var
        %x_99:ptr<function, i32, read_write> = var
        %x_127_phi:ptr<function, bool, read_write> = var
        %x_96_phi:ptr<function, vec4<f32>, read_write> = var
        %27:vec4<f32> = load %x_95_phi
        store %x_95, %27
        %x_98:i32 = load %x_98_phi
        %29:bool = lt %x_98, 8i
        if %29 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_104:ptr<function, vec4<f32>, read_write> = var
        store %x_82, %x_86
        %31:ptr<function, vec4<f32>, read_write> = access %x_82, %x_98
        %32:vec4<f32> = load %31
        store %x_104, %32
        switch 0u [c: (default, %b7)] {  # switch_1
          %b7 = block {  # case
            %x_107:f32 = access %x_93, 0u
            %x_108:f32 = load_vector_element %x_104, 0u
            %35:bool = lt %x_107, %x_108
            if %35 [t: %b8] {  # if_2
              %b8 = block {  # true
                store %x_127_phi, false
                exit_switch  # switch_1
              }
            }
            %x_112:f32 = access %x_93, 1u
            %x_113:f32 = load_vector_element %x_104, 1u
            %38:bool = lt %x_112, %x_113
            if %38 [t: %b9] {  # if_3
              %b9 = block {  # true
                store %x_127_phi, false
                exit_switch  # switch_1
              }
            }
            %39:f32 = load_vector_element %x_104, 2u
            %40:f32 = add %x_108, %39
            %41:bool = gt %x_107, %40
            if %41 [t: %b10] {  # if_4
              %b10 = block {  # true
                store %x_127_phi, false
                exit_switch  # switch_1
              }
            }
            %42:f32 = load_vector_element %x_104, 3u
            %43:f32 = add %x_113, %42
            %44:bool = gt %x_112, %43
            if %44 [t: %b11] {  # if_5
              %b11 = block {  # true
                store %x_127_phi, false
                exit_switch  # switch_1
              }
            }
            store %x_127_phi, true
            exit_switch  # switch_1
          }
        }
        %x_127:bool = load %x_127_phi
        %46:vec4<f32> = load %x_95
        store %x_96_phi, %46
        if %x_127 [t: %b12] {  # if_6
          %b12 = block {  # true
            store %x_83, 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))
            %47:ptr<function, vec4<f32>, read_write> = access %x_83, %x_98
            %x_131:f32 = load_vector_element %47, 0u
            store %x_84, 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))
            %49:ptr<function, vec4<f32>, read_write> = access %x_84, %x_98
            %x_134:f32 = load_vector_element %49, 1u
            %x_135:array<vec4<f32>, 8> = load %x_81
            store %x_81, array<vec4<f32>, 8>(vec4<f32>(0.0f))
            store %x_81, %x_135
            store %x_85, 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))
            %52:i32 = convert %x_131
            %53:i32 = convert %x_134
            %54:i32 = mul %52, %53
            %55:i32 = mul %x_98, 9i
            %56:i32 = add %54, %55
            %57:i32 = add %56, 11i
            %58:i32 = mod %57, 16i
            %59:ptr<function, vec4<f32>, read_write> = access %x_85, %58
            %60:vec4<f32> = load %59
            store %x_143, %60
            %61:vec4<f32> = load %x_143
            store %x_96_phi, %61
            exit_if  # if_6
          }
        }
        %x_96:vec4<f32> = load %x_96_phi
        continue %b4
      }
      %b4 = block {  # continuing
        %63:i32 = add %x_98, 1i
        store %x_99, %63
        store %x_95_phi, %x_96
        %64:i32 = load %x_99
        store %x_98_phi, %64
        next_iteration %b3
      }
    }
    %65:vec4<f32> = load %x_95
    store %x_GLF_color, %65
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
  %b13 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %68:void = call %main_1
    %69:vec4<f32> = load %x_GLF_color
    %70:main_out = construct %69
    ret %70
  }
}

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