[clang] [Clang] Bugfixes and improved support for `AttributedType`s in lambdas (PR #85325)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 14 16:46:04 PDT 2024
================
@@ -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.
----------------
Sirraide wrote:
I’ve been thinking about this too; something like that or some way to strip `TypeLoc`s that count as ‘sugar’; we’re doing similar things all over the place, but from what I can tell, what is or isn’t stripped is highly dependent on context.
https://github.com/llvm/llvm-project/pull/85325
More information about the cfe-commits
mailing list