A suggestion was to use expr wfl, but that is impractical:
there are too many places where an expressions type is directly
compared with CALL_EXPR (if (TREE_CODE (call) != CALL_EXPR)) -
all of those places would have to be changed to also check for
a EXPR_WITH_FILE_LOCATION that wraps a CALL_EXPR and then
unwrap the call expr in order to subsequentially be able to
process it.
What leads you to believe that this is true? Why would not the
WFL expr just go through expand_expr, and thence to expand_call?
Well, wouldn't e.g. operand_equal_p need to handle
EXPR_WITH_FILE_LOCATION? I see lots of other places in the optimizers
with the same issue. Right now EXPR_WITH_FILE_LOCATION is only used to
wrap inline calls, as far as I can see. Even there I suspect it hurts
optimization because of this issue.