The type of the call expression and the return value type of the function are not necessarily the same thing. In the attached example, the function is declared to return const C &, but the actual call-expression has type const C and is also an lvalue. Which is, well, kinda the same thing, but needs a different sort of boilerplate.
Previously we tried to find construction context for such call-expression and became surprised that this is not a temporary object context. Fix the crash by making sure that the call-expression is not an lvalue before trying to attach a construction context to it.