SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
  resolution:vec2<f32> @offset(0)
}

buf0 = struct @align(8) {
  injectionSwitch: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, buf1, read> = var @binding_point(0, 1)
  %x_9: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 {
    %data:ptr<function, array<f32, 10>, read_write> = var
    %x_41_phi:ptr<function, i32, read_write> = var
    %x_53_phi:ptr<function, i32, read_write> = var
    store %x_41_phi, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_42:ptr<function, i32, read_write> = var
        %x_41:i32 = load %x_41_phi
        %11:bool = lt %x_41, 10i
        if %11 [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
        %12:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %x_49:f32 = load_vector_element %12, 1u
        %14:ptr<function, f32, read_write> = access %data, %x_41
        %15:i32 = sub 10i, %x_41
        %16:f32 = convert %15
        %17:f32 = mul %16, %x_49
        store %14, %17
        %18:i32 = add %x_41, 1i
        store %x_42, %18
        %19:i32 = load %x_42
        store %x_41_phi, %19
        next_iteration %b3
      }
    }
    store %x_53_phi, 0i
    loop [b: %b7, c: %b8] {  # loop_2
      %b7 = block {  # body
        %x_54:ptr<function, i32, read_write> = var
        %x_60_phi:ptr<function, i32, read_write> = var
        %x_53:i32 = load %x_53_phi
        %23:bool = lt %x_53, 9i
        if %23 [t: %b9, f: %b10] {  # if_2
          %b9 = block {  # true
            exit_if  # if_2
          }
          %b10 = block {  # false
            exit_loop  # loop_2
          }
        }
        store %x_60_phi, 0i
        loop [b: %b11, c: %b12] {  # loop_3
          %b11 = block {  # body
            %x_83:ptr<function, bool, read_write> = var
            %x_84:ptr<function, bool, read_write> = var
            %x_61:ptr<function, i32, read_write> = var
            %x_85_phi:ptr<function, bool, read_write> = var
            %x_60:i32 = load %x_60_phi
            %29:bool = lt %x_60, 10i
            if %29 [t: %b13, f: %b14] {  # if_3
              %b13 = block {  # true
                exit_if  # if_3
              }
              %b14 = block {  # false
                exit_loop  # loop_3
              }
            }
            %30:i32 = add %x_53, 1i
            %31:bool = lt %x_60, %30
            if %31 [t: %b15] {  # if_4
              %b15 = block {  # true
                continue %b12
              }
            }
            %x_70_save:i32 = let %x_53
            %33:ptr<function, f32, read_write> = access %data, %x_70_save
            %x_71:f32 = load %33
            %x_72_save:i32 = let %x_60
            %36:ptr<function, f32, read_write> = access %data, %x_72_save
            %x_73:f32 = load %36
            %x_75:f32 = load_vector_element %gl_FragCoord, 1u
            %39:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
            %x_77:f32 = load_vector_element %39, 1u
            %41:f32 = mul %x_77, 0.5f
            %42:bool = lt %x_75, %41
            if %42 [t: %b16, f: %b17] {  # if_5
              %b16 = block {  # true
                %43:bool = gt %x_71, %x_73
                store %x_83, %43
                %44:bool = load %x_83
                store %x_85_phi, %44
                exit_if  # if_5
              }
              %b17 = block {  # false
                %45:bool = lt %x_71, %x_73
                store %x_84, %45
                %46:bool = load %x_84
                store %x_85_phi, %46
                exit_if  # if_5
              }
            }
            %x_85:bool = load %x_85_phi
            if %x_85 [t: %b18] {  # if_6
              %b18 = block {  # true
                %48:ptr<function, f32, read_write> = access %data, %x_70_save
                %x_88:f32 = load %48
                %50:ptr<function, f32, read_write> = access %data, %x_72_save
                %x_89:f32 = load %50
                %52:ptr<function, f32, read_write> = access %data, %x_70_save
                store %52, %x_89
                %53:ptr<function, f32, read_write> = access %data, %x_72_save
                store %53, %x_88
                exit_if  # if_6
              }
            }
            continue %b12
          }
          %b12 = block {  # continuing
            %54:i32 = add %x_60, 1i
            store %x_61, %54
            %55:i32 = load %x_61
            store %x_60_phi, %55
            next_iteration %b11
          }
        }
        continue %b8
      }
      %b8 = block {  # continuing
        %56:i32 = add %x_53, 1i
        store %x_54, %56
        %57:i32 = load %x_54
        store %x_53_phi, %57
        next_iteration %b7
      }
    }
    %x_91:f32 = load_vector_element %gl_FragCoord, 0u
    %59:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_93:f32 = load_vector_element %59, 0u
    %61:f32 = mul %x_93, 0.5f
    %62:bool = lt %x_91, %61
    if %62 [t: %b19, f: %b20] {  # if_7
      %b19 = block {  # true
        %63:ptr<function, f32, read_write> = access %data, 0i
        %x_100:f32 = load %63
        %65:ptr<function, f32, read_write> = access %data, 5i
        %x_103:f32 = load %65
        %67:ptr<function, f32, read_write> = access %data, 9i
        %x_106:f32 = load %67
        %69:f32 = mul %x_100, 0.10000000149011611938f
        %70:f32 = mul %x_103, 0.10000000149011611938f
        %71:f32 = mul %x_106, 0.10000000149011611938f
        %72:vec4<f32> = construct %69, %70, %71, 1.0f
        store %x_GLF_color, %72
        exit_if  # if_7
      }
      %b20 = block {  # false
        %73:ptr<function, f32, read_write> = access %data, 5i
        %x_110:f32 = load %73
        %75:ptr<function, f32, read_write> = access %data, 9i
        %x_113:f32 = load %75
        %77:ptr<function, f32, read_write> = access %data, 0i
        %x_116:f32 = load %77
        %79:f32 = mul %x_110, 0.10000000149011611938f
        %80:f32 = mul %x_113, 0.10000000149011611938f
        %81:f32 = mul %x_116, 0.10000000149011611938f
        %82:vec4<f32> = construct %79, %80, %81, 1.0f
        store %x_GLF_color, %82
        exit_if  # if_7
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
  %b21 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %85:void = call %main_1
    %86:vec4<f32> = load %x_GLF_color
    %87:main_out = construct %86
    ret %87
  }
}

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