Most of the problems with tree-vrp stemmed from its deletion of null-pointer checks (see linked commit in the source.) Now, GCC has a flag to control that, and with it enabled I can boot to the desktop even with tree-vrp enabled.