At the end of Sema::checkPointerTypesForAssignment:
if (!S.getLangOpts().CPlusPlus &&
S.IsFunctionConversion(ltrans, rtrans, ltrans))
ltrans and rtrans are the left and right sides of the assignment, and are therefore the destination and source types, respectively.
But:
bool Sema::IsFunctionConversion(QualType FromType, QualType ToType,
QualType &ResultTy) {
Here the source is first and the destination is second.
Maybe this a bug that has gone unnoticed because IsFunctionConversion tends to work symmetrically? (speculating)
Or maybe there is a good reason for checkPointerTypesForAssignment to invert the parameters, but it's not commented or at all apparent by source inspection.