[clang] [Clang] Bugfixes and improved support for `AttributedType`s in lambdas (PR #85325)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 19 08:48:50 PDT 2024
================
@@ -3162,30 +3213,11 @@ void ASTContext::adjustDeducedFunctionResultType(FunctionDecl *FD,
/// and preserved. Other type sugar (for instance, typedefs) is not.
QualType ASTContext::getFunctionTypeWithExceptionSpec(
QualType Orig, const FunctionProtoType::ExceptionSpecInfo &ESI) const {
- // Might have some parens.
- if (const auto *PT = dyn_cast<ParenType>(Orig))
- return getParenType(
- getFunctionTypeWithExceptionSpec(PT->getInnerType(), ESI));
-
- // Might be wrapped in a macro qualified type.
- if (const auto *MQT = dyn_cast<MacroQualifiedType>(Orig))
- return getMacroQualifiedType(
- getFunctionTypeWithExceptionSpec(MQT->getUnderlyingType(), ESI),
- MQT->getMacroIdentifier());
-
- // Might have a calling-convention attribute.
- if (const auto *AT = dyn_cast<AttributedType>(Orig))
- return getAttributedType(
- AT->getAttrKind(),
- getFunctionTypeWithExceptionSpec(AT->getModifiedType(), ESI),
- getFunctionTypeWithExceptionSpec(AT->getEquivalentType(), ESI));
-
- // Anything else must be a function type. Rebuild it with the new exception
- // specification.
- const auto *Proto = Orig->castAs<FunctionProtoType>();
- return getFunctionType(
- Proto->getReturnType(), Proto->getParamTypes(),
- Proto->getExtProtoInfo().withExceptionSpec(ESI));
+ return adjustType(Orig, [&](QualType Ty) {
+ const auto *Proto = Ty->castAs<FunctionProtoType>();
----------------
AaronBallman wrote:
This one is fine because an exception specification means we're not in C and so the function always has a prototype.
https://github.com/llvm/llvm-project/pull/85325
More information about the cfe-commits
mailing list