SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %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
    %x_33:f32 = let %7
    %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %10:f32 = load_vector_element %9, 1u
    %x_35:f32 = let %10
    %12:bool = gt %x_33, %x_35
    %x_36:bool = let %12
    if %x_36 [t: $B3] {  # if_1
      $B3: {  # true
        ret
      }
    }
    %14:f32 = load_vector_element %gl_FragCoord, 0u
    %x_40:f32 = let %14
    %16:bool = lt %x_40, 0.0f
    %x_41:bool = let %16
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %18:i32 = load %loop_count
        %x_43:i32 = let %18
        %20:bool = lt %x_43, 100i
        if %20 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        if %x_36 [t: $B8] {  # if_3
          $B8: {  # true
            exit_loop  # loop_1
          }
        }
        if %x_36 [t: $B9, f: $B10] {  # if_4
          $B9: {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_4
          }
          $B10: {  # false
            if %x_41 [t: $B11] {  # if_5
              $B11: {  # true
                ret
              }
            }
            exit_if  # if_4
          }
        }
        if %x_36 [t: $B12, f: $B13] {  # if_6
          $B12: {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_6
          }
          $B13: {  # 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: {  # true
            ret
          }
        }
        if %x_41 [t: $B15] {  # if_8
          $B15: {  # true
            loop [b: $B16, c: $B17] {  # loop_2
              $B16: {  # body
                %21:i32 = load %loop_count
                %x_63:i32 = let %21
                %23:bool = lt %x_63, 100i
                if %23 [t: $B18, f: $B19] {  # if_9
                  $B18: {  # true
                    exit_if  # if_9
                  }
                  $B19: {  # false
                    exit_loop  # loop_2
                  }
                }
                continue  # -> $B17
              }
              $B17: {  # continuing
                %24:i32 = load %loop_count
                %x_67:i32 = let %24
                %26:i32 = add %x_67, 1i
                store %loop_count, %26
                next_iteration  # -> $B16
              }
            }
            exit_if  # if_8
          }
        }
        continue  # -> $B5
      }
      $B5: {  # continuing
        %27:i32 = load %loop_count
        %x_69:i32 = let %27
        %29:i32 = add %x_69, 1i
        store %loop_count, %29
        next_iteration  # -> $B4
      }
    }
    %30:i32 = load %loop_count
    %x_71:i32 = let %30
    %32:bool = gte %x_71, 100i
    if %32 [t: $B20, f: $B21] {  # if_10
      $B20: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_10
      }
      $B21: {  # 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: {
    store %gl_FragCoord, %gl_FragCoord_param
    %35:void = call %main_1
    %36:vec4<f32> = load %x_GLF_color
    %37:main_out = construct %36
    ret %37
  }
}

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