SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: 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
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %loop_count:ptr<function, i32, read_write> = var
    store %loop_count, 0i
    %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %x_33:f32 = load_vector_element %6, 0u
    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %x_35:f32 = load_vector_element %8, 1u
    %x_36:bool = gt %x_33, %x_35
    if %x_36 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret
      }
    }
    %x_40:f32 = load_vector_element %gl_FragCoord, 0u
    %x_41:bool = lt %x_40, 0.0f
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %x_43:i32 = load %loop_count
        %14:bool = lt %x_43, 100i
        if %14 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        if %x_36 [t: %b8] {  # if_3
          %b8 = block {  # true
            exit_loop  # loop_1
          }
        }
        if %x_36 [t: %b9, f: %b10] {  # if_4
          %b9 = block {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_4
          }
          %b10 = block {  # false
            if %x_41 [t: %b11] {  # if_5
              %b11 = block {  # true
                ret
              }
            }
            exit_if  # if_4
          }
        }
        if %x_36 [t: %b12, f: %b13] {  # if_6
          %b12 = block {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_6
          }
          %b13 = block {  # false
            store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
            exit_if  # if_6
          }
        }
        if %x_36 [t: %b14] {  # if_7
          %b14 = block {  # true
            ret
          }
        }
        if %x_41 [t: %b15] {  # if_8
          %b15 = block {  # true
            loop [b: %b16, c: %b17] {  # loop_2
              %b16 = block {  # body
                %x_63:i32 = load %loop_count
                %16:bool = lt %x_63, 100i
                if %16 [t: %b18, f: %b19] {  # if_9
                  %b18 = block {  # true
                    exit_if  # if_9
                  }
                  %b19 = block {  # false
                    exit_loop  # loop_2
                  }
                }
                continue %b17
              }
              %b17 = block {  # continuing
                %x_67:i32 = load %loop_count
                %18:i32 = add %x_67, 1i
                store %loop_count, %18
                next_iteration %b16
              }
            }
            exit_if  # if_8
          }
        }
        continue %b5
      }
      %b5 = block {  # continuing
        %x_69:i32 = load %loop_count
        %20:i32 = add %x_69, 1i
        store %loop_count, %20
        next_iteration %b4
      }
    }
    %x_71:i32 = load %loop_count
    %22:bool = gte %x_71, 100i
    if %22 [t: %b20, f: %b21] {  # if_10
      %b20 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_10
      }
      %b21 = block {  # false
        store %x_GLF_color, vec4<f32>(1.0f)
        exit_if  # if_10
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b22 {
  %b22 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %25:void = call %main_1
    %26:vec4<f32> = load %x_GLF_color
    %27:main_out = construct %26
    ret %27
  }
}

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