Instead, return a nonloc::LazyCompoundVal of a temporary region for the call expression, with a trivial store in which the temporary region is invalidated.
Returning a conjured record-type symbol is painful because the return value of the function may suddenly change during materialization of a temporary - it will be hotfixed into the same lazy compound value anyway in some cases, eg. in createTemporaryRegionIfNeeded when handling a MaterializeTemporaryExpr. After this patch, we should be receiving the same temporary region during materialization, instead of constructing a new region, and materialization of a conjured structure starts doing a lot less things.
I'm including a change in the yet-to-land iterator checker (D25660), which should or should not be committed depending on the order of patches landing. This change demonstrates how the problem explained above causes checkers to hack around.
In fact, there are other places in which we conjure structure-type symbols, eg. some cases of array invalidations. They aren't known to cause problems though.