What is the purpose of AbstractFunctionDecl::BodySynthesizer?
Body synthesizers seem used by derived conformances, but it's not clear to me whether it exists as a performance optimization (lazily synthesizing function body) or whether it's necessary for some reason.
It's a compiler performance optimization. We save quite a bit of time during type checking if we avoid synthesizing bodies for methods that aren't really used by the program.
I'll leave the same message from another question thread: I wonder if this rationale is documented anywhere? If not, adding some code documentation sounds good. I care about documentation like this so I'm happy to write a short draft sometime.
More specifically, when type checking a derived conformance implementation, or an accessor method, or one of several other places where lazy body synthesizers are used, we don't need the body if the declaration was defined in a non-primary source file.
We also use lazy body synthesizers for various imported declarations as well. Name lookup can pull in a lot of imported declarations which are ultimately never referenced from generated code, and we don't need a body there either (in general, if you emit a reference to an imported declaration with a body, you do have to emit the body in the same translation unit though, since they're not exported from anywhere).