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

%main_1 = func():void {
  $B2: {
    %odd_index:ptr<function, i32, read_write> = var
    %even_index:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %ll:ptr<function, i32, read_write> = var
    %x_59:ptr<function, bool, read_write> = var
    %x_60_phi:ptr<function, bool, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    %12:f32 = load_vector_element %gl_FragCoord, 0u
    %x_53:f32 = let %12
    %14:bool = lt %x_53, 128.0f
    %x_54:bool = let %14
    store %x_60_phi, %x_54
    if %x_54 [t: $B3] {  # if_1
      $B3: {  # true
        %16:f32 = load_vector_element %gl_FragCoord, 1u
        %x_58:f32 = let %16
        %18:bool = lt %x_58, 128.0f
        store %x_59, %18
        %19:bool = load %x_59
        store %x_60_phi, %19
        exit_if  # if_1
      }
    }
    %20:bool = load %x_60_phi
    %x_60:bool = let %20
    if %x_60 [t: $B4] {  # if_2
      $B4: {  # true
        ret
      }
    }
    store %odd_index, 0i
    loop [b: $B5, c: $B6] {  # loop_1
      $B5: {  # body
        %22:i32 = load %odd_index
        %x_11:i32 = let %22
        %24:bool = lte %x_11, 1i
        if %24 [t: $B7, f: $B8] {  # if_3
          $B7: {  # true
            exit_if  # if_3
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        %25:f32 = load_vector_element %x_GLF_color, 0u
        %x_70:f32 = let %25
        %27:f32 = add %x_70, 0.25f
        store_vector_element %x_GLF_color, 0u, %27
        %28:i32 = load %odd_index
        %x_12:i32 = let %28
        %30:i32 = add %x_12, 1i
        store %odd_index, %30
        continue  # -> $B6
      }
      $B6: {  # continuing
        next_iteration  # -> $B5
      }
    }
    store %even_index, 1i
    loop [b: $B9, c: $B10] {  # loop_2
      $B9: {  # body
        %31:i32 = load %even_index
        %x_14:i32 = let %31
        %33:bool = gte %x_14, 0i
        if %33 [t: $B11, f: $B12] {  # if_4
          $B11: {  # true
            exit_if  # if_4
          }
          $B12: {  # false
            exit_loop  # loop_2
          }
        }
        %34:f32 = load_vector_element %x_GLF_color, 0u
        %x_80:f32 = let %34
        %36:f32 = add %x_80, 0.25f
        store_vector_element %x_GLF_color, 0u, %36
        %37:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %38:f32 = load_vector_element %37, 0u
        %x_84:f32 = let %38
        %40:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %41:f32 = load_vector_element %40, 1u
        %x_86:f32 = let %41
        %43:bool = gt %x_84, %x_86
        if %43 [t: $B13] {  # if_5
          $B13: {  # true
            continue  # -> $B10
          }
        }
        %44:i32 = load %even_index
        %x_15:i32 = let %44
        %46:bool = gte %x_15, 1i
        if %46 [t: $B14] {  # if_6
          $B14: {  # true
            store %continue_execution, false
            exit_if  # if_6
          }
        }
        store %j, 1i
        loop [b: $B15, c: $B16] {  # loop_3
          $B15: {  # body
            if true [t: $B17, f: $B18] {  # if_7
              $B17: {  # true
                exit_if  # if_7
              }
              $B18: {  # false
                exit_loop  # loop_3
              }
            }
            %47:i32 = load %ll
            %x_16:i32 = let %47
            %49:bool = gte %x_16, 3i
            if %49 [t: $B19] {  # if_8
              $B19: {  # true
                exit_loop  # loop_3
              }
            }
            %50:i32 = load %ll
            %x_17:i32 = let %50
            %52:i32 = add %x_17, 1i
            store %ll, %52
            %53:i32 = load %j
            %x_19:i32 = let %53
            %55:u32 = bitcast %x_19
            %56:bool = lt %55, 1u
            if %56 [t: $B20] {  # if_9
              $B20: {  # true
                continue  # -> $B16
              }
            }
            %57:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
            %58:f32 = load_vector_element %57, 0u
            %x_106:f32 = let %58
            %60:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
            %61:f32 = load_vector_element %60, 1u
            %x_108:f32 = let %61
            %63:bool = gt %x_106, %x_108
            if %63 [t: $B21] {  # if_10
              $B21: {  # true
                exit_loop  # loop_3
              }
            }
            continue  # -> $B16
          }
          $B16: {  # continuing
            %64:i32 = load %j
            %x_20:i32 = let %64
            %66:i32 = add %x_20, 1i
            store %j, %66
            next_iteration  # -> $B15
          }
        }
        %67:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %68:f32 = load_vector_element %67, 0u
        %x_113:f32 = let %68
        %70:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %71:f32 = load_vector_element %70, 1u
        %x_115:f32 = let %71
        %73:bool = gt %x_113, %x_115
        if %73 [t: $B22] {  # if_11
          $B22: {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_11
          }
        }
        %74:i32 = load %even_index
        %x_22:i32 = let %74
        %76:i32 = sub %x_22, 1i
        store %even_index, %76
        continue  # -> $B10
      }
      $B10: {  # continuing
        next_iteration  # -> $B9
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B23: {
    store %gl_FragCoord, %gl_FragCoord_param
    %79:void = call %main_1
    %80:vec4<f32> = load %x_GLF_color
    %81:main_out = construct %80
    %82:bool = load %continue_execution
    %83:bool = eq %82, false
    if %83 [t: $B24] {  # if_12
      $B24: {  # true
        terminate_invocation
      }
    }
    ret %81
  }
}

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