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_65:ptr<function, i32, read_write> = var
    %x_65_phi:ptr<function, i32, read_write> = var
    %x_68_phi:ptr<function, i32, read_write> = var
    %x_51:vec4<f32> = load %gl_FragCoord
    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_54:vec2<f32> = load %10
    %12:f32 = access %x_51, 0u
    %13:f32 = access %x_51, 1u
    %14:vec2<f32> = construct %12, %13
    %15:vec2<f32> = div %14, %x_54
    %16:vec2<f32> = mul %15, 8.0f
    %x_57:vec2<f32> = floor %16
    %18:f32 = access %x_57, 0u
    %19:i32 = convert %18
    %20:i32 = mul %19, 8i
    %21:f32 = access %x_57, 1u
    %22:i32 = convert %21
    %x_63:i32 = add %20, %22
    store %x_65_phi, 0i
    store %x_68_phi, %x_63
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_79:ptr<function, i32, read_write> = var
        %x_80:ptr<function, i32, read_write> = var
        %x_69_phi:ptr<function, i32, read_write> = var
        %27:i32 = load %x_65_phi
        store %x_65, %27
        %x_68:i32 = load %x_68_phi
        %29:bool = gt %x_68, 1i
        if %29 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %30:i32 = and %x_68, 1i
        %31:bool = eq %30, 1i
        if %31 [t: %b7, f: %b8] {  # if_2
          %b7 = block {  # true
            %32:i32 = mul 3i, %x_68
            %33:i32 = add %32, 1i
            store %x_79, %33
            %34:i32 = load %x_79
            store %x_69_phi, %34
            exit_if  # if_2
          }
          %b8 = block {  # false
            %35:i32 = div %x_68, 2i
            store %x_80, %35
            %36:i32 = load %x_80
            store %x_69_phi, %36
            exit_if  # if_2
          }
        }
        %x_69:i32 = load %x_69_phi
        continue %b4
      }
      %b4 = block {  # continuing
        %38:i32 = load %x_65
        %39:i32 = add %38, 1i
        %40:i32 = bitcast %39
        store %x_65_phi, %40
        store %x_68_phi, %x_69
        next_iteration %b3
      }
    }
    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))
    %41:i32 = load %x_65
    %42:i32 = mod %41, 16i
    %43:i32 = bitcast %42
    %44:ptr<function, vec4<f32>, read_write> = access %indexable, %43
    %x_83:vec4<f32> = load %44
    store %x_GLF_color, %x_83
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
  %b9 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %48:void = call %main_1
    %49:vec4<f32> = load %x_GLF_color
    %50:main_out = construct %49
    ret %50
  }
}

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