[clang] [ASTImporter] Fix infinite recurse on return type declared inside body (#68775) (PR #89096)
Matheus Izvekov via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 18 11:04:54 PDT 2024
================
@@ -3647,15 +3647,28 @@ class IsTypeDeclaredInsideVisitor
};
} // namespace
-/// This function checks if the function has 'auto' return type that contains
+/// This function checks if the given function has a return type that contains
/// a reference (in any way) to a declaration inside the same function.
-bool ASTNodeImporter::hasAutoReturnTypeDeclaredInside(FunctionDecl *D) {
+bool ASTNodeImporter::hasReturnTypeDeclaredInside(FunctionDecl *D) {
QualType FromTy = D->getType();
const auto *FromFPT = FromTy->getAs<FunctionProtoType>();
assert(FromFPT && "Must be called on FunctionProtoType");
+ auto IsCXX11LambdaWithouTrailingReturn = [&]() {
+ if (!Importer.FromContext.getLangOpts().CPlusPlus11)
----------------
mizvekov wrote:
I think CPlusPlus11 is set for C++11 *and later*, but we want to return early here for C++14 onwards, as in that case lambda with deduced return type will have AutoType.
```suggestion
if (Importer.FromContext.getLangOpts().CPlusPlus14)
```
https://github.com/llvm/llvm-project/pull/89096
More information about the cfe-commits
mailing list