FOR PORTION OF doesn't seem to work well with virtual generated columns,
either. The following example seg-faults on my machine:
create table t (a int, b int4range generated always as (int4range(a, a + 1)) virtual);
insert into t values (1);
delete from t for portion of b from 1 to 2;
--
nathan