================ @@ -3140,13 +3140,35 @@ const FunctionType *ASTContext::adjustFunctionType(const FunctionType *T, return cast<FunctionType>(Result.getTypePtr()); } +QualType ASTContext::adjustFunctionResultType(QualType FunctionType, + QualType ResultType) { + // Might be wrapped in a macro qualified type. + if (const auto *MQT = dyn_cast<MacroQualifiedType>(FunctionType)) { + return getMacroQualifiedType( + adjustFunctionResultType(MQT->getUnderlyingType(), ResultType), + MQT->getMacroIdentifier()); + } + + // Might have a calling-convention attribute. + if (const auto *AT = dyn_cast<AttributedType>(FunctionType)) { + return getAttributedType( + AT->getAttrKind(), + adjustFunctionResultType(AT->getModifiedType(), ResultType), + adjustFunctionResultType(AT->getEquivalentType(), ResultType)); + } + + // Anything else must be a function type. Rebuild it with the new return + // value. ---------------- yuxuanchen1997 wrote:
I think what would be required for this type of work is to have the general ability to traverse `Type`s and `TypeLoc`s. Implementation like this + the one I provided in `TreeTransform::TransformLambdaExpr` is error prone and wouldn't scale. https://github.com/llvm/llvm-project/pull/85325 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits