SKIP: FAILED

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

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %idx:ptr<function, i32, read_write> = var
    %m43:ptr<function, mat4x3<f32>, read_write> = var
    %ll_1:ptr<function, i32, read_write> = var
    %GLF_live6rows:ptr<function, i32, read_write> = var
    %z:ptr<function, i32, read_write> = var
    %ll_2:ptr<function, i32, read_write> = var
    %ctr:ptr<function, i32, read_write> = var
    %tempm43:ptr<function, mat4x3<f32>, read_write> = var
    %ll_3:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %d:ptr<function, i32, read_write> = var
    %GLF_live6sums:ptr<function, array<f32, 9>, read_write> = var
    store %idx, 0i
    store %m43, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
    store %ll_1, 0i
    store %GLF_live6rows, 2i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %16:i32 = load %ll_1
        %17:ptr<uniform, i32, read> = access %x_9, 0u
        %18:i32 = load %17
        %19:bool = gte %16, %18
        if %19 [t: %b5] {  # if_1
          %b5 = block {  # true
            store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
            exit_loop  # loop_1
          }
        }
        %20:i32 = load %ll_1
        %21:i32 = add %20, 1i
        store %ll_1, %21
        %22:ptr<uniform, i32, read> = access %x_9, 0u
        %23:i32 = load %22
        store %z, %23
        store %ll_2, 0i
        store %ctr, 0i
        loop [b: %b6, c: %b7] {  # loop_2
          %b6 = block {  # body
            %24:i32 = load %ctr
            %25:bool = lt %24, 1i
            if %25 [t: %b8, f: %b9] {  # if_2
              %b8 = block {  # true
                exit_if  # if_2
              }
              %b9 = block {  # false
                exit_loop  # loop_2
              }
            }
            %26:i32 = load %ll_2
            %27:ptr<uniform, i32, read> = access %x_9, 0u
            %28:i32 = load %27
            %29:bool = gte %26, %28
            if %29 [t: %b10] {  # if_3
              %b10 = block {  # true
                exit_loop  # loop_2
              }
            }
            %30:i32 = load %ll_2
            %31:i32 = add %30, 1i
            store %ll_2, %31
            %32:mat4x3<f32> = load %m43
            store %tempm43, %32
            store %ll_3, 0i
            store %c, 0i
            loop [b: %b11, c: %b12] {  # loop_3
              %b11 = block {  # body
                %33:i32 = load %z
                %34:bool = lt 1i, %33
                if %34 [t: %b13, f: %b14] {  # if_4
                  %b13 = block {  # true
                    exit_if  # if_4
                  }
                  %b14 = block {  # false
                    exit_loop  # loop_3
                  }
                }
                store %d, 0i
                %x_29:i32 = load %c
                %x_30:i32 = load %c
                %x_31:i32 = load %c
                %x_32:i32 = load %d
                %x_33:i32 = load %d
                %x_34:i32 = load %d
                %41:bool = gte %x_29, 0i
                %42:bool = lt %x_30, 4i
                %43:bool = and %41, %42
                %44:i32 = select 0i, %x_31, %43
                %45:ptr<function, vec3<f32>, read_write> = access %tempm43, %44
                %46:bool = gte %x_32, 0i
                %47:bool = lt %x_33, 3i
                %48:bool = and %46, %47
                %49:i32 = select 0i, %x_34, %48
                store_vector_element %45, %49, 1.0f
                continue %b12
              }
              %b12 = block {  # continuing
                %50:i32 = load %c
                %51:i32 = add %50, 1i
                store %c, %51
                next_iteration %b11
              }
            }
            %52:i32 = load %idx
            %53:i32 = load %idx
            %54:bool = gte %53, 0i
            %55:i32 = load %idx
            %56:bool = lt %55, 9i
            %57:bool = and %54, %56
            %x_117:i32 = select 0i, %52, %57
            %59:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
            %60:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
            %61:f32 = load %60
            %62:i32 = load %ctr
            %63:ptr<function, vec3<f32>, read_write> = access %m43, %62
            %64:f32 = load_vector_element %63, 1u
            %65:f32 = add %61, %64
            store %59, %65
            continue %b7
          }
          %b7 = block {  # continuing
            %66:i32 = load %ctr
            %67:i32 = add %66, 1i
            store %ctr, %67
            next_iteration %b6
          }
        }
        %68:i32 = load %idx
        %69:i32 = add %68, 1i
        store %idx, %69
        continue %b4
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b15 {
  %b15 = block {
    %71:void = call %main_1
    %72:vec4<f32> = load %x_GLF_color
    %73:main_out = construct %72
    ret %73
  }
}

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