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
    %7:f32 = load_vector_element %6, 0u
    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %9:f32 = load_vector_element %8, 1u
    %x_36:bool = gt %7, %9
    if %x_36 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret
      }
    }
    %11:f32 = load_vector_element %gl_FragCoord, 0u
    %x_41:bool = lt %11, 0.0f
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %13:i32 = load %loop_count
        %14:bool = lt %13, 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
                %15:i32 = load %loop_count
                %16:bool = lt %15, 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
                %17:i32 = load %loop_count
                %18:i32 = add %17, 1i
                store %loop_count, %18
                next_iteration %b16
              }
            }
            exit_if  # if_8
          }
        }
        continue %b5
      }
      %b5 = block {  # continuing
        %19:i32 = load %loop_count
        %20:i32 = add %19, 1i
        store %loop_count, %20
        next_iteration %b4
      }
    }
    %21:i32 = load %loop_count
    %22:bool = gte %21, 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.  *
********************************************************************
