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
    %x_35:f32 = let %9
    %11:bool = lt %x_35, 0.0f
    if %11 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        exit_if  # if_1
      }
      $B4: {  # false
        %x_42:ptr<function, bool, read_write> = var
        %13:f32 = load_vector_element %gl_FragCoord, 1u
        %x_41:f32 = let %13
        %15:bool = lt %x_41, -1.0f
        store %x_42, %15
        %16:bool = load %x_42
        if %16 [t: $B5, f: $B6] {  # if_2
          $B5: {  # true
            exit_if  # if_2
          }
          $B6: {  # false
            loop [b: $B7, c: $B8] {  # loop_1
              $B7: {  # body
                %17:i32 = load %i
                %x_50:i32 = let %17
                %19:bool = gte %x_50, 256i
                if %19 [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
                        %20:i32 = load %i_1
                        %x_58:i32 = let %20
                        %22:bool = lt %x_58, 1i
                        if %22 [t: $B14, f: $B15] {  # if_4
                          $B14: {  # true
                            exit_if  # if_4
                          }
                          $B15: {  # false
                            exit_loop  # loop_3
                          }
                        }
                        %23:bool = load %x_42
                        if %23 [t: $B16] {  # if_5
                          $B16: {  # true
                            store %i_2, 0i
                            loop [b: $B17, c: $B18] {  # loop_4
                              $B17: {  # body
                                %24:i32 = load %i_2
                                %x_66:i32 = let %24
                                %26:bool = lt %x_66, 1i
                                if %26 [t: $B19, f: $B20] {  # if_6
                                  $B19: {  # true
                                    exit_if  # if_6
                                  }
                                  $B20: {  # false
                                    exit_loop  # loop_4
                                  }
                                }
                                continue  # -> $B18
                              }
                              $B18: {  # continuing
                                %27:i32 = load %i_2
                                %x_70:i32 = let %27
                                %29:i32 = add %x_70, 1i
                                store %i_2, %29
                                next_iteration  # -> $B17
                              }
                            }
                            continue  # -> $B13
                          }
                        }
                        ret
                      }
                      $B13: {  # continuing
                        %30:i32 = load %i_1
                        %x_72:i32 = let %30
                        %32:i32 = add %x_72, 1i
                        store %i_1, %32
                        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
    %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.  *
********************************************************************
