[clang] [Clang] Bugfixes and improved support for `AttributedType`s in lambdas (PR #85325)

Yuxuan Chen via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 14 16:43:56 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.
----------------
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


More information about the cfe-commits mailing list