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

%func_ = func():f32 -> %b2 {
  %b2 = block {
    %x:ptr<function, i32, read_write> = var
    %6:f32 = load_vector_element %gl_FragCoord, 0u
    %7:bool = lt %6, 1.0f
    if %7 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret 5.0f
      }
    }
    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %9:f32 = load_vector_element %8, 0u
    %10:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %11:f32 = load_vector_element %10, 1u
    %12:bool = gt %9, %11
    if %12 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret 1.0f
      }
    }
    %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %14:f32 = load_vector_element %13, 0u
    %15:i32 = convert %14
    store %x, %15
    %16:i32 = load %x
    %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %18:f32 = load_vector_element %17, 0u
    %19:f32 = clamp %18, 0.0f, 1.0f
    %20:i32 = convert %19
    %21:i32 = mul %20, 3i
    %22:i32 = add %16, %21
    store %x, %22
    %x_120:i32 = load %x
    %24:f32 = convert %x_120
    %25:f32 = add 5.0f, %24
    ret %25
  }
}
%main_1 = func():void -> %b5 {
  %b5 = block {
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %data:ptr<function, array<vec2<f32>, 17>, read_write> = var
    store %i, 0i
    loop [b: %b6, c: %b7] {  # loop_1
      %b6 = block {  # body
        %30:i32 = load %i
        %31:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
        %32:f32 = load_vector_element %31, 0u
        %33:i32 = convert %32
        %34:i32 = add 4i, %33
        %35:bool = lt %30, %34
        if %35 [t: %b8, f: %b9] {  # if_3
          %b8 = block {  # true
            exit_if  # if_3
          }
          %b9 = block {  # false
            exit_loop  # loop_1
          }
        }
        %36:f32 = load_vector_element %gl_FragCoord, 0u
        %37:bool = gte %36, 0.0f
        if %37 [t: %b10] {  # if_4
          %b10 = block {  # true
            store %j, 0i
            loop [b: %b11, c: %b12] {  # loop_2
              %b11 = block {  # body
                %x_81:ptr<function, bool, read_write> = var
                %x_82:ptr<function, bool, read_write> = var
                %40:i32 = load %j
                %41:bool = lt %40, 4i
                if %41 [t: %b13, f: %b14] {  # if_5
                  %b13 = block {  # true
                    exit_if  # if_5
                  }
                  %b14 = block {  # false
                    exit_loop  # loop_2
                  }
                }
                %x_67:i32 = load %j
                %x_69:i32 = load %i
                %x_71:f32 = call %func_
                %45:i32 = mul 4i, %x_67
                %46:i32 = add %45, %x_69
                %47:ptr<function, vec2<f32>, read_write> = access %data, %46
                store_vector_element %47, 0u, %x_71
                %48:ptr<function, vec2<f32>, read_write> = access %data, 0i
                %49:f32 = load_vector_element %48, 0u
                %x_75:bool = eq %49, 5.0f
                store %x_82, %x_75
                %51:bool = eq %x_75, false
                if %51 [t: %b15] {  # if_6
                  %b15 = block {  # true
                    %52:ptr<function, vec2<f32>, read_write> = access %data, 15i
                    %53:f32 = load_vector_element %52, 0u
                    %54:bool = eq %53, 5.0f
                    store %x_81, %54
                    %55:bool = load %x_81
                    store %x_82, %55
                    exit_if  # if_6
                  }
                }
                %56:bool = load %x_82
                if %56 [t: %b16, f: %b17] {  # if_7
                  %b16 = block {  # true
                    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                    exit_if  # if_7
                  }
                  %b17 = block {  # false
                    store %x_GLF_color, vec4<f32>(0.0f)
                    exit_if  # if_7
                  }
                }
                %57:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
                %58:f32 = load_vector_element %57, 0u
                %59:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
                %60:f32 = load_vector_element %59, 1u
                %61:bool = gt %58, %60
                if %61 [t: %b18] {  # if_8
                  %b18 = block {  # true
                    ret
                  }
                }
                continue %b12
              }
              %b12 = block {  # continuing
                %62:i32 = load %j
                %63:i32 = add %62, 1i
                store %j, %63
                next_iteration %b11
              }
            }
            exit_if  # if_4
          }
        }
        continue %b7
      }
      %b7 = block {  # continuing
        %64:i32 = load %i
        %65:i32 = add %64, 1i
        store %i, %65
        next_iteration %b6
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
  %b19 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %68:void = call %main_1
    %69:vec4<f32> = load %x_GLF_color
    %70:main_out = construct %69
    ret %70
  }
}

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