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_72:ptr<function, i32, read_write> = var
    %x_72_phi:ptr<function, i32, read_write> = var
    %x_75_phi:ptr<function, i32, read_write> = var
    %x_54:vec4<f32> = load %gl_FragCoord
    %10:f32 = access %x_54, 0u
    %11:f32 = access %x_54, 1u
    %x_55:vec2<f32> = construct %10, %11
    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_58:vec2<f32> = load %13
    %x_59:vec2<f32> = div %x_55, %x_58
    %16:f32 = access %x_59, 0u
    %17:vec4<f32> = construct 0.0f, %x_55, 0.5f
    %18:f32 = access %17, 3u
    %19:vec4<f32> = construct %18, 10.0f, vec2<f32>(0.0f)
    %20:f32 = access %19, 1u
    %21:f32 = mul %16, %20
    %22:i32 = convert %21
    %23:f32 = access %x_59, 1u
    %24:f32 = mul %23, 10.0f
    %25:i32 = convert %24
    %26:i32 = mul %25, 10i
    %x_70:i32 = add %22, %26
    store %x_72_phi, 100i
    store %x_75_phi, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_73:ptr<function, i32, read_write> = var
        %x_76:ptr<function, i32, read_write> = var
        %30:i32 = load %x_72_phi
        store %x_72, %30
        %x_75:i32 = load %x_75_phi
        %32:bool = lt %x_75, %x_70
        if %32 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %33:i32 = load %x_72
        %34:i32 = bitcast %33
        %35:i32 = mul 4i, %34
        %36:i32 = load %x_72
        %37:i32 = bitcast %36
        %38:i32 = sub 1000i, %37
        %39:i32 = mul %35, %38
        %40:i32 = div %39, 1000i
        store %x_73, %40
        %41:i32 = add %x_75, 1i
        store %x_76, %41
        %42:i32 = load %x_73
        store %x_72_phi, %42
        %43:i32 = load %x_76
        store %x_75_phi, %43
        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))
    %44:i32 = load %x_72
    %45:i32 = mod %44, 16i
    %46:i32 = bitcast %45
    %47:ptr<function, vec4<f32>, read_write> = access %indexable, %46
    %x_84:vec4<f32> = load %47
    store %x_GLF_color, %x_84
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b7 {
  %b7 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}

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