SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # root
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%x_51 = func():void -> %b2 {
  %b2 = block {
    discard
    ret
  }
}
%main_1 = func():void -> %b3 {
  %b3 = block {
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %x_31:ptr<function, bool, read_write> = var
        %x_30_phi:ptr<function, bool, read_write> = var
        store %x_30_phi, false
        loop [b: %b6, c: %b7] {  # loop_2
          %b6 = block {  # body
            %x_31_phi:ptr<function, bool, read_write> = var
            %x_30:bool = load %x_30_phi
            loop [b: %b8, c: %b9] {  # loop_3
              %b8 = block {  # body
                %x_52:ptr<function, vec4<f32>, read_write> = var
                %x_54:ptr<function, vec4<f32>, read_write> = var
                %x_55_phi:ptr<function, vec4<f32>, read_write> = var
                %12:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
                %x_36:f32 = load_vector_element %12, 1u
                store %x_31_phi, %x_30
                %14:bool = gt %x_36, 0.0f
                if %14 [t: %b10, f: %b11] {  # if_1
                  %b10 = block {  # true
                    exit_if  # if_1
                  }
                  %b11 = block {  # false
                    exit_loop  # loop_3
                  }
                }
                loop [b: %b12, c: %b13] {  # loop_4
                  %b12 = block {  # body
                    %15:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
                    %x_46:f32 = load_vector_element %15, 0u
                    %17:bool = gt %x_46, 0.0f
                    if %17 [t: %b14] {  # if_2
                      %b14 = block {  # true
                        %18:void = call %x_51
                        exit_if  # if_2
                      }
                    }
                    %19:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
                    %20:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %19
                    store %x_54, %20
                    %21:vec4<f32> = load %x_54
                    store %x_55_phi, %21
                    exit_loop  # loop_4
                  }
                  %b13 = block {  # continuing
                    next_iteration %b12
                  }
                }
                %x_55:vec4<f32> = load %x_55_phi
                store %x_GLF_color, %x_55
                store %x_31_phi, true
                exit_loop  # loop_3
              }
              %b9 = block {  # continuing
                next_iteration %b8
              }
            }
            %23:bool = load %x_31_phi
            store %x_31, %23
            %24:bool = load %x_31
            if %24 [t: %b15, f: %b16] {  # if_3
              %b15 = block {  # true
                exit_loop  # loop_2
              }
              %b16 = block {  # false
                continue %b7
              }
            }
            continue %b7
          }
          %b7 = block {  # continuing
            %25:bool = load %x_31
            store %x_30_phi, %25
            next_iteration %b6
          }
        }
        %26:bool = load %x_31
        if %26 [t: %b17] {  # if_4
          %b17 = block {  # true
            exit_loop  # loop_1
          }
        }
        exit_loop  # loop_1
      }
      %b5 = block {  # continuing
        next_iteration %b4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b18 {
  %b18 = block {
    %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.  *
********************************************************************
