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_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %i, 0i
    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %9:f32 = load_vector_element %8, 1u
    %10:bool = lt %9, 0.0f
    if %10 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        exit_if  # if_1
      }
      $B4: {  # false
        %x_42:ptr<function, bool, read_write> = var
        %12:f32 = load_vector_element %gl_FragCoord, 1u
        %13:bool = lt %12, -1.0f
        store %x_42, %13
        %14:bool = load %x_42
        if %14 [t: $B5, f: $B6] {  # if_2
          $B5: {  # true
            exit_if  # if_2
          }
          $B6: {  # false
            loop [b: $B7, c: $B8] {  # loop_1
              $B7: {  # body
                %15:i32 = load %i
                %16:bool = gte %15, 256i
                if %16 [t: $B9] {  # if_3
                  $B9: {  # true
                    exit_loop  # loop_1
                  }
                }
                loop [b: $B10, c: $B11] {  # loop_2
                  $B10: {  # body
                    store %i_1, 0i
                    loop [b: $B12, c: $B13] {  # loop_3
                      $B12: {  # body
                        %17:i32 = load %i_1
                        %18:bool = lt %17, 1i
                        if %18 [t: $B14, f: $B15] {  # if_4
                          $B14: {  # true
                            exit_if  # if_4
                          }
                          $B15: {  # false
                            exit_loop  # loop_3
                          }
                        }
                        %19:bool = load %x_42
                        if %19 [t: $B16] {  # if_5
                          $B16: {  # true
                            store %i_2, 0i
                            loop [b: $B17, c: $B18] {  # loop_4
                              $B17: {  # body
                                %20:i32 = load %i_2
                                %21:bool = lt %20, 1i
                                if %21 [t: $B19, f: $B20] {  # if_6
                                  $B19: {  # true
                                    exit_if  # if_6
                                  }
                                  $B20: {  # false
                                    exit_loop  # loop_4
                                  }
                                }
                                continue  # -> $B18
                              }
                              $B18: {  # continuing
                                %22:i32 = load %i_2
                                %23:i32 = add %22, 1i
                                store %i_2, %23
                                next_iteration  # -> $B17
                              }
                            }
                            continue  # -> $B13
                          }
                        }
                        ret
                      }
                      $B13: {  # continuing
                        %24:i32 = load %i_1
                        %25:i32 = add %24, 1i
                        store %i_1, %25
                        next_iteration  # -> $B12
                      }
                    }
                    continue  # -> $B11
                  }
                  $B11: {  # continuing
                    break_if true  # -> [t: exit_loop loop_2, f: $B10]
                  }
                }
                continue  # -> $B8
              }
              $B8: {  # continuing
                break_if true  # -> [t: exit_loop loop_1, f: $B7]
              }
            }
            exit_if  # if_2
          }
        }
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B21: {
    store %gl_FragCoord, %gl_FragCoord_param
    %28:void = call %main_1
    %29:vec4<f32> = load %x_GLF_color
    %30:main_out = construct %29
    ret %30
  }
}

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