> Is this really safe. If I look at where we call
> expand_shift/expand_shift_1 I get real worried that we could end up
> using that NULL value in a context where it's not expected.
> So while emit_store_flag_force knows what to do upon NULL return, I'm
> not sure the other users of expand_shift/expand_shift_1 do.
Yes, that's probably risky, and there are a lot of calls to them.
> Is there any way to address this problem in emit_store_flag_force?
Now that we're in C++, we could add an additional argument to expand_shift_1
with a default value and call the function directly from emit_store_flag with
the non-default value, thus instructing it to return 0 on failure instead of
aborting. emit_store_flag already returns 0 on failure so the result would be
naturally propagated up to emit_store_flag_force.