In InSet it's possible that hset contains GenericInternalRows while child returns UnsafeRows (and vice versa). InSet uses hset.contains (both in doCodeGen and eval) which will always be false in this case.
The following code reproduces the problem:
In.doCodeGen uses compareStructs and seems to work. In.eval might not work but not sure how to reproduce.
Solution could be either to do safe<->unsafe conversion in InSet or not trigger InSet optimization at all in this case.
Need to investigate if In.eval is affected.