SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: theSSBO = struct @align(4) {
  out_data:i32 @offset(0)
}

buf1 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

%b1 = block {  # root
  %x_4:ptr<storage, theSSBO, read_write> = var @binding_point(0, 0)
  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %GLF_live3s:ptr<function, f32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %z:ptr<function, i32, read_write> = var
    %8:ptr<storage, i32, read_write> = access %x_4, 0u
    store %8, 42i
    %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_37:f32 = load_vector_element %9, 0u
    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_39:f32 = load_vector_element %11, 1u
    %13:bool = gt %x_37, %x_39
    if %13 [t: %b3] {  # if_1
      %b3 = block {  # true
        %14:void = workgroupBarrier
        exit_if  # if_1
      }
    }
    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_44:f32 = load_vector_element %15, 0u
    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_46:f32 = load_vector_element %17, 1u
    %19:bool = gt %x_44, %x_46
    if %19 [t: %b4] {  # if_2
      %b4 = block {  # true
        %20:void = workgroupBarrier
        exit_if  # if_2
      }
    }
    %21:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %x_51:f32 = load_vector_element %21, 1u
    %23:i32 = convert %x_51
    store %i, %23
    loop [b: %b5, c: %b6] {  # loop_1
      %b5 = block {  # body
        %x_57:i32 = load %i
        %25:bool = gt %x_57, 0i
        if %25 [t: %b7, f: %b8] {  # if_3
          %b7 = block {  # true
            exit_if  # if_3
          }
          %b8 = block {  # false
            exit_loop  # loop_1
          }
        }
        %26:void = workgroupBarrier
        continue %b6
      }
      %b6 = block {  # continuing
        %x_60:i32 = load %i
        %28:i32 = sub %x_60, 1i
        store %i, %28
        next_iteration %b5
      }
    }
    store %GLF_live3s, 0.0f
    loop [b: %b9, c: %b10] {  # loop_2
      %b9 = block {  # body
        store %i_1, 1i
        loop [b: %b11, c: %b12] {  # loop_3
          %b11 = block {  # body
            %x_70:i32 = load %i_1
            %30:bool = lt %x_70, 2i
            if %30 [t: %b13, f: %b14] {  # if_4
              %b13 = block {  # true
                exit_if  # if_4
              }
              %b14 = block {  # false
                exit_loop  # loop_3
              }
            }
            %31:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
            %x_74:f32 = load_vector_element %31, 0u
            %33:bool = gt %x_74, 1.0f
            if %33 [t: %b15] {  # if_5
              %b15 = block {  # true
                %34:void = workgroupBarrier
                exit_if  # if_5
              }
            }
            %35:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
            %x_79:f32 = load_vector_element %35, 0u
            %37:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
            %x_81:f32 = load_vector_element %37, 1u
            %39:bool = gt %x_79, %x_81
            if %39 [t: %b16] {  # if_6
              %b16 = block {  # true
                %40:void = workgroupBarrier
                exit_if  # if_6
              }
            }
            %41:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
            %x_86:f32 = load_vector_element %41, 1u
            %43:i32 = convert %x_86
            store %z, %43
            loop [b: %b17, c: %b18] {  # loop_4
              %b17 = block {  # body
                %x_92:i32 = load %z
                %45:bool = gt %x_92, 0i
                if %45 [t: %b19, f: %b20] {  # if_7
                  %b19 = block {  # true
                    exit_if  # if_7
                  }
                  %b20 = block {  # false
                    exit_loop  # loop_4
                  }
                }
                %x_95:f32 = load %GLF_live3s
                %47:f32 = add %x_95, 1.0f
                store %GLF_live3s, %47
                continue %b18
              }
              %b18 = block {  # continuing
                %x_97:i32 = load %z
                %49:i32 = sub %x_97, 1i
                store %z, %49
                next_iteration %b17
              }
            }
            %x_99:i32 = load %i_1
            %51:bool = gte %x_99, 1i
            if %51 [t: %b21] {  # if_8
              %b21 = block {  # true
                %52:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
                %x_104:f32 = load_vector_element %52, 0u
                %54:bool = gt %x_104, 1.0f
                if %54 [t: %b22] {  # if_9
                  %b22 = block {  # true
                    %55:void = workgroupBarrier
                    exit_if  # if_9
                  }
                }
                exit_if  # if_8
              }
            }
            continue %b12
          }
          %b12 = block {  # continuing
            %x_108:i32 = load %i_1
            %57:i32 = add %x_108, 1i
            store %i_1, %57
            next_iteration %b11
          }
        }
        continue %b10
      }
      %b10 = block {  # continuing
        %58:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %x_111:f32 = load_vector_element %58, 0u
        %60:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %x_113:f32 = load_vector_element %60, 1u
        %62:bool = gt %x_111, %x_113
        %63:bool = eq %62, false
        break_if %63 %b9
      }
    }
    ret
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b23 {
  %b23 = block {
    %65:void = call %main_1
    ret
  }
}

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