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: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
    %13:bool = lt %12, 128.0f
    %x_54:bool = let %13
    store %x_60, %x_54
    if %x_54 [t: $B3] {  # if_1
      $B3: {  # true
        %15:f32 = load_vector_element %gl_FragCoord, 1u
        %16:bool = lt %15, 128.0f
        store %x_59, %16
        %17:bool = load %x_59
        store %x_60, %17
        exit_if  # if_1
      }
    }
    %18:bool = load %x_60
    if %18 [t: $B4] {  # if_2
      $B4: {  # true
        ret
      }
    }
    store %odd_index, 0i
    loop [b: $B5, c: $B6] {  # loop_1
      $B5: {  # body
        %19:i32 = load %odd_index
        %20:bool = lte %19, 1i
        if %20 [t: $B7, f: $B8] {  # if_3
          $B7: {  # true
            exit_if  # if_3
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        %21:f32 = load_vector_element %x_GLF_color, 0u
        %22:f32 = add %21, 0.25f
        store_vector_element %x_GLF_color, 0u, %22
        %23:i32 = load %odd_index
        %24:i32 = add %23, 1i
        store %odd_index, %24
        continue  # -> $B6
      }
      $B6: {  # continuing
        next_iteration  # -> $B5
      }
    }
    store %even_index, 1i
    loop [b: $B9, c: $B10] {  # loop_2
      $B9: {  # body
        %25:i32 = load %even_index
        %26:bool = gte %25, 0i
        if %26 [t: $B11, f: $B12] {  # if_4
          $B11: {  # true
            exit_if  # if_4
          }
          $B12: {  # false
            exit_loop  # loop_2
          }
        }
        %27:f32 = load_vector_element %x_GLF_color, 0u
        %28:f32 = add %27, 0.25f
        store_vector_element %x_GLF_color, 0u, %28
        %29:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %30:f32 = load_vector_element %29, 0u
        %31:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %32:f32 = load_vector_element %31, 1u
        %33:bool = gt %30, %32
        if %33 [t: $B13] {  # if_5
          $B13: {  # true
            continue  # -> $B10
          }
        }
        %34:i32 = load %even_index
        %35:bool = gte %34, 1i
        if %35 [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
              }
            }
            %36:i32 = load %ll
            %37:bool = gte %36, 3i
            if %37 [t: $B19] {  # if_8
              $B19: {  # true
                exit_loop  # loop_3
              }
            }
            %38:i32 = load %ll
            %39:i32 = add %38, 1i
            store %ll, %39
            %40:i32 = load %j
            %41:u32 = bitcast %40
            %42:bool = lt %41, 1u
            if %42 [t: $B20] {  # if_9
              $B20: {  # true
                continue  # -> $B16
              }
            }
            %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
            %44:f32 = load_vector_element %43, 0u
            %45:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
            %46:f32 = load_vector_element %45, 1u
            %47:bool = gt %44, %46
            if %47 [t: $B21] {  # if_10
              $B21: {  # true
                exit_loop  # loop_3
              }
            }
            continue  # -> $B16
          }
          $B16: {  # continuing
            %48:i32 = load %j
            %49:i32 = add %48, 1i
            store %j, %49
            next_iteration  # -> $B15
          }
        }
        %50:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %51:f32 = load_vector_element %50, 0u
        %52:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
        %53:f32 = load_vector_element %52, 1u
        %54:bool = gt %51, %53
        if %54 [t: $B22] {  # if_11
          $B22: {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_11
          }
        }
        %55:i32 = load %even_index
        %56:i32 = sub %55, 1i
        store %even_index, %56
        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
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    %62:bool = load %continue_execution
    %63:bool = eq %62, false
    if %63 [t: $B24] {  # if_12
      $B24: {  # true
        terminate_invocation
      }
    }
    ret %61
  }
}

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