https://github.com/danix800 updated 
https://github.com/llvm/llvm-project/pull/89096

>From 0f7ddbfef8ca9c93efacfb2a437ddb5645ca07b1 Mon Sep 17 00:00:00 2001
From: dingfei <fd...@feysh.com>
Date: Thu, 18 Apr 2024 00:03:14 +0800
Subject: [PATCH] [ASTImporter] Fix infinite recurse on return type declared
 inside body (#68775)

Lambda without trailing auto could has return type declared inside the
body too.
---
 .cproject                                   | 125 ++++++++++++++++++++
 .project                                    |  27 +++++
 .settings/language.settings.xml             |  27 +++++
 .settings/org.eclipse.cdt.core.prefs        |   6 +
 clang/docs/ReleaseNotes.rst                 |   2 +
 clang/lib/AST/ASTImporter.cpp               |  16 +--
 clang/unittests/AST/ASTImporterTest.cpp     |  16 +++
 expand-modular-headers-ppcallbacks.cpp.diff |  55 +++++++++
 8 files changed, 264 insertions(+), 10 deletions(-)
 create mode 100644 .cproject
 create mode 100644 .project
 create mode 100644 .settings/language.settings.xml
 create mode 100644 .settings/org.eclipse.cdt.core.prefs
 create mode 100644 expand-modular-headers-ppcallbacks.cpp.diff

diff --git a/.cproject b/.cproject
new file mode 100644
index 00000000000000..36ee502ff51294
--- /dev/null
+++ b/.cproject
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject 
storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+       <storageModule moduleId="org.eclipse.cdt.core.settings">
+               <cconfiguration 
id="cdt.managedbuild.config.gnu.exe.debug.1267319361">
+                       <storageModule 
buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" 
id="cdt.managedbuild.config.gnu.exe.debug.1267319361" 
moduleId="org.eclipse.cdt.core.settings" name="Debug">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension 
id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GASErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GmakeErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GLDErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GCCErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" 
version="4.0.0">
+                               <configuration artifactName="${ProjName}" 
buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" 
buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"
 cleanCommand="rm -rf" description="" 
id="cdt.managedbuild.config.gnu.exe.debug.1267319361" name="Debug" 
optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes="
 parent="cdt.managedbuild.config.gnu.exe.debug">
+                                       <folderInfo 
id="cdt.managedbuild.config.gnu.exe.debug.1267319361." name="/" resourcePath="">
+                                               <toolChain 
id="cdt.managedbuild.toolchain.gnu.exe.debug.1153281986" name="Linux GCC" 
superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+                                                       <targetPlatform 
id="cdt.managedbuild.target.gnu.platform.exe.debug.1948615513" name="Debug 
Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+                                                       <builder 
buildPath="${workspace_loc:/llvm-project-main}/Debug" 
id="cdt.managedbuild.target.gnu.builder.exe.debug.927080357" 
keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make 
Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.archiver.base.1302454782" name="GCC Archiver" 
superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.282261753" name="GCC C++ 
Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+                                                               <option 
id="gnu.cpp.compiler.exe.debug.option.optimization.level.1422916899" 
name="Optimization Level" 
superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" 
useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" 
valueType="enumerated"/>
+                                                               <option 
defaultValue="gnu.cpp.compiler.debugging.level.max" 
id="gnu.cpp.compiler.exe.debug.option.debugging.level.2079538612" name="Debug 
Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" 
useByScannerDiscovery="false" valueType="enumerated"/>
+                                                               <option 
id="gnu.cpp.compiler.option.dialect.std.1349065635" name="Language standard" 
superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" 
value="gnu.cpp.compiler.dialect.c++17" valueType="enumerated"/>
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.cpp.compiler.input.653076756" 
superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.228751645" name="GCC C 
Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+                                                               <option 
defaultValue="gnu.c.optimization.level.none" 
id="gnu.c.compiler.exe.debug.option.optimization.level.1467363068" 
name="Optimization Level" 
superClass="gnu.c.compiler.exe.debug.option.optimization.level" 
useByScannerDiscovery="false" valueType="enumerated"/>
+                                                               <option 
defaultValue="gnu.c.debugging.level.max" 
id="gnu.c.compiler.exe.debug.option.debugging.level.335655535" name="Debug 
Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" 
useByScannerDiscovery="false" valueType="enumerated"/>
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.c.compiler.input.891046201" 
superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1921172643" name="GCC C 
Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1443620065" name="GCC C++ 
Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.cpp.linker.input.1441732570" 
superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.assembler.exe.debug.2136218787" name="GCC 
Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.assembler.input.569538120" 
superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                               </toolChain>
+                                       </folderInfo>
+                               </configuration>
+                       </storageModule>
+                       <storageModule 
moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration 
id="cdt.managedbuild.config.gnu.exe.release.789955962">
+                       <storageModule 
buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" 
id="cdt.managedbuild.config.gnu.exe.release.789955962" 
moduleId="org.eclipse.cdt.core.settings" name="Release">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension 
id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GASErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GmakeErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GLDErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension 
id="org.eclipse.cdt.core.GCCErrorParser" 
point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" 
version="4.0.0">
+                               <configuration artifactName="${ProjName}" 
buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" 
buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"
 cleanCommand="rm -rf" description="" 
id="cdt.managedbuild.config.gnu.exe.release.789955962" name="Release" 
parent="cdt.managedbuild.config.gnu.exe.release">
+                                       <folderInfo 
id="cdt.managedbuild.config.gnu.exe.release.789955962." name="/" 
resourcePath="">
+                                               <toolChain 
id="cdt.managedbuild.toolchain.gnu.exe.release.743790239" name="Linux GCC" 
superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+                                                       <targetPlatform 
id="cdt.managedbuild.target.gnu.platform.exe.release.2032015911" name="Debug 
Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+                                                       <builder 
buildPath="${workspace_loc:/llvm-project-main}/Release" 
id="cdt.managedbuild.target.gnu.builder.exe.release.53681744" 
keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make 
Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.archiver.base.1694144547" name="GCC Archiver" 
superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1224154314" name="GCC 
C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+                                                               <option 
id="gnu.cpp.compiler.exe.release.option.optimization.level.422610093" 
name="Optimization Level" 
superClass="gnu.cpp.compiler.exe.release.option.optimization.level" 
useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.most" 
valueType="enumerated"/>
+                                                               <option 
defaultValue="gnu.cpp.compiler.debugging.level.none" 
id="gnu.cpp.compiler.exe.release.option.debugging.level.826071592" name="Debug 
Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" 
useByScannerDiscovery="false" valueType="enumerated"/>
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1201728870" 
superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1246499717" name="GCC C 
Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+                                                               <option 
defaultValue="gnu.c.optimization.level.most" 
id="gnu.c.compiler.exe.release.option.optimization.level.800172949" 
name="Optimization Level" 
superClass="gnu.c.compiler.exe.release.option.optimization.level" 
useByScannerDiscovery="false" valueType="enumerated"/>
+                                                               <option 
defaultValue="gnu.c.debugging.level.none" 
id="gnu.c.compiler.exe.release.option.debugging.level.2017639086" name="Debug 
Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" 
useByScannerDiscovery="false" valueType="enumerated"/>
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.c.compiler.input.942514186" 
superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.c.linker.exe.release.2037908518" name="GCC C 
Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.111161569" name="GCC C++ 
Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.cpp.linker.input.1849592677" 
superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool 
id="cdt.managedbuild.tool.gnu.assembler.exe.release.62680122" name="GCC 
Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+                                                               <inputType 
id="cdt.managedbuild.tool.gnu.assembler.input.349462156" 
superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                               </toolChain>
+                                       </folderInfo>
+                               </configuration>
+                       </storageModule>
+                       <storageModule 
moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+       </storageModule>
+       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+               <project 
id="llvm-project-main.cdt.managedbuild.target.gnu.exe.39877796" 
name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+       </storageModule>
+       <storageModule moduleId="scannerConfiguration">
+               <autodiscovery enabled="true" problemReportingEnabled="true" 
selectedProfileId=""/>
+               <scannerConfigBuildInfo 
instanceId="cdt.managedbuild.config.gnu.exe.debug.1267319361;cdt.managedbuild.config.gnu.exe.debug.1267319361.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.228751645;cdt.managedbuild.tool.gnu.c.compiler.input.891046201">
+                       <autodiscovery enabled="true" 
problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo 
instanceId="cdt.managedbuild.config.gnu.exe.debug.1267319361;cdt.managedbuild.config.gnu.exe.debug.1267319361.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.282261753;cdt.managedbuild.tool.gnu.cpp.compiler.input.653076756">
+                       <autodiscovery enabled="true" 
problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo 
instanceId="cdt.managedbuild.config.gnu.exe.release.789955962;cdt.managedbuild.config.gnu.exe.release.789955962.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1224154314;cdt.managedbuild.tool.gnu.cpp.compiler.input.1201728870">
+                       <autodiscovery enabled="true" 
problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo 
instanceId="cdt.managedbuild.config.gnu.exe.release.789955962;cdt.managedbuild.config.gnu.exe.release.789955962.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1246499717;cdt.managedbuild.tool.gnu.c.compiler.input.942514186">
+                       <autodiscovery enabled="true" 
problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+       </storageModule>
+       <storageModule 
moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+       <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+       <storageModule moduleId="refreshScope" versionNumber="2">
+               <configuration configurationName="Debug">
+                       <resource resourceType="PROJECT" 
workspacePath="/llvm-project-main"/>
+               </configuration>
+               <configuration configurationName="Release">
+                       <resource resourceType="PROJECT" 
workspacePath="/llvm-project-main"/>
+               </configuration>
+       </storageModule>
+       <storageModule 
moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+</cproject>
\ No newline at end of file
diff --git a/.project b/.project
new file mode 100644
index 00000000000000..196eba5f79ca4a
--- /dev/null
+++ b/.project
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>llvm-project-main</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+                       <triggers>clean,full,incremental,</triggers>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+                       <triggers>full,incremental,</triggers>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.cdt.core.cnature</nature>
+               <nature>org.eclipse.cdt.core.ccnature</nature>
+               
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+               
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+       </natures>
+</projectDescription>
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
new file mode 100644
index 00000000000000..f7f1a86f21c061
--- /dev/null
+++ b/.settings/language.settings.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project>
+       <configuration id="cdt.managedbuild.config.gnu.exe.debug.1267319361" 
name="Debug">
+               <extension 
point="org.eclipse.cdt.core.LanguageSettingsProvider">
+                       <provider copy-of="extension" 
id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+                       <provider-reference 
id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" 
ref="shared-provider"/>
+                       <provider-reference 
id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" 
ref="shared-provider"/>
+                       <provider 
class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector"
 console="false" env-hash="1298772840355742954" 
id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" 
keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" 
parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" 
prefer-non-shared="true">
+                               <language-scope id="org.eclipse.cdt.core.gcc"/>
+                               <language-scope id="org.eclipse.cdt.core.g++"/>
+                       </provider>
+                       <provider copy-of="extension" 
id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
+                       <provider 
build-parser-id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" 
cdb-modified-time="1713227326364" 
cdb-path="/home/danis/Sources/llvm-project-main/build/compile_commands.json" 
class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.CompilationDatabaseParser"
 id="org.eclipse.cdt.managedbuilder.core.CompilationDatabaseParser" 
name="Compilation Database Parser" prefer-non-shared="true"/>
+               </extension>
+       </configuration>
+       <configuration id="cdt.managedbuild.config.gnu.exe.release.789955962" 
name="Release">
+               <extension 
point="org.eclipse.cdt.core.LanguageSettingsProvider">
+                       <provider copy-of="extension" 
id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+                       <provider-reference 
id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" 
ref="shared-provider"/>
+                       <provider-reference 
id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" 
ref="shared-provider"/>
+                       <provider 
class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector"
 console="false" env-hash="1298769406850196872" 
id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" 
keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" 
parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" 
prefer-non-shared="true">
+                               <language-scope id="org.eclipse.cdt.core.gcc"/>
+                               <language-scope id="org.eclipse.cdt.core.g++"/>
+                       </provider>
+               </extension>
+       </configuration>
+</project>
\ No newline at end of file
diff --git a/.settings/org.eclipse.cdt.core.prefs 
b/.settings/org.eclipse.cdt.core.prefs
new file mode 100644
index 00000000000000..c8ec5df2d4439b
--- /dev/null
+++ b/.settings/org.eclipse.cdt.core.prefs
@@ -0,0 +1,6 @@
+doxygen/doxygen_new_line_after_brief=true
+doxygen/doxygen_use_brief_tag=false
+doxygen/doxygen_use_javadoc_tags=true
+doxygen/doxygen_use_pre_tag=false
+doxygen/doxygen_use_structural_commands=false
+eclipse.preferences.version=1
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index c19ad9fba58f37..7a623c6be72fd2 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -545,6 +545,8 @@ Bug Fixes to AST Handling
 Miscellaneous Bug Fixes
 ^^^^^^^^^^^^^^^^^^^^^^^
 
+- Fixed an infinite recursion on return type declared inside body (#GH68775).
+
 Miscellaneous Clang Crashes Fixed
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index 6aaa34c55ce307..88883bbd6ebaf1 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -695,7 +695,7 @@ namespace clang {
     // Returns true if the given function has a placeholder return type and
     // that type is declared inside the body of the function.
     // E.g. auto f() { struct X{}; return X(); }
-    bool hasAutoReturnTypeDeclaredInside(FunctionDecl *D);
+    bool hasReturnTypeDeclaredInside(FunctionDecl *D);
   };
 
 template <typename InContainerTy>
@@ -3649,19 +3649,15 @@ class IsTypeDeclaredInsideVisitor
 
 /// This function checks if the function has 'auto' 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");
 
   QualType RetT = FromFPT->getReturnType();
-  if (isa<AutoType>(RetT.getTypePtr())) {
-    FunctionDecl *Def = D->getDefinition();
-    IsTypeDeclaredInsideVisitor Visitor(Def ? Def : D);
-    return Visitor.CheckType(RetT);
-  }
-
-  return false;
+  FunctionDecl *Def = D->getDefinition();
+  IsTypeDeclaredInsideVisitor Visitor(Def ? Def : D);
+  return Visitor.CheckType(RetT);
 }
 
 ExplicitSpecifier
@@ -3811,7 +3807,7 @@ ExpectedDecl 
ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) {
     // E.g.: auto foo() { struct X{}; return X(); }
     // To avoid an infinite recursion when importing, create the FunctionDecl
     // with a simplified return type.
-    if (hasAutoReturnTypeDeclaredInside(D)) {
+    if (hasReturnTypeDeclaredInside(D)) {
       FromReturnTy = Importer.getFromContext().VoidTy;
       UsedDifferentProtoType = true;
     }
diff --git a/clang/unittests/AST/ASTImporterTest.cpp 
b/clang/unittests/AST/ASTImporterTest.cpp
index acc596fef87b76..3fac5514319c24 100644
--- a/clang/unittests/AST/ASTImporterTest.cpp
+++ b/clang/unittests/AST/ASTImporterTest.cpp
@@ -6721,6 +6721,22 @@ TEST_P(ASTImporterOptionSpecificTestBase, 
LambdaInFunctionBody) {
   EXPECT_FALSE(FromL->isDependentLambda());
 }
 
+TEST_P(ASTImporterOptionSpecificTestBase, LambdaReturnTypeDeclaredInside) {
+  Decl *From, *To;
+  std::tie(From, To) = getImportedDecl(
+      R"(
+      void foo() {
+        (void) []() {
+          struct X {};
+          return X();
+        };
+      }
+      )",
+      Lang_CXX11, "", Lang_CXX11, "foo");
+  auto *ToLambda = FirstDeclMatcher<LambdaExpr>().match(To, lambdaExpr());
+  EXPECT_TRUE(ToLambda);
+}
+
 TEST_P(ASTImporterOptionSpecificTestBase, LambdaInFunctionParam) {
   Decl *FromTU = getTuDecl(
       R"(
diff --git a/expand-modular-headers-ppcallbacks.cpp.diff 
b/expand-modular-headers-ppcallbacks.cpp.diff
new file mode 100644
index 00000000000000..9a435e3f4dfe77
--- /dev/null
+++ b/expand-modular-headers-ppcallbacks.cpp.diff
@@ -0,0 +1,55 @@
+diff --git 
a/clang-tools-extra/test/clang-tidy/infrastructure/expand-modular-headers-ppcallbacks.cpp
 
b/clang-tools-extra/test/clang-tidy/infrastructure/expand-modular-headers-ppcallbacks.cpp
+index c9b05517d210..4d1ca669b8d0 100644
+--- 
a/clang-tools-extra/test/clang-tidy/infrastructure/expand-modular-headers-ppcallbacks.cpp
++++ 
b/clang-tools-extra/test/clang-tidy/infrastructure/expand-modular-headers-ppcallbacks.cpp
+@@ -3,18 +3,18 @@
+ // RUN: mkdir %t
+ // RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
+ // RUN: %check_clang_tidy -std=c++11 %s readability-identifier-naming 
%t/without-modules -- \
+-// RUN:   -config="CheckOptions: [{ \
+-// RUN:      key: readability-identifier-naming.MacroDefinitionCase, value: 
UPPER_CASE }]" \
+-// RUN:   -header-filter=.* \
++// RUN:   -config="CheckOptions: { \
++// RUN:      readability-identifier-naming.MacroDefinitionCase: UPPER_CASE }" 
\
++// RUN:   -header-filter=.* --enable-module-headers-parsing \
+ // RUN:   -- -I %t/
+ //
+ // RUN: rm -rf %t
+ // RUN: mkdir %t
+ // RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
+ // RUN: %check_clang_tidy -std=c++17 %s readability-identifier-naming 
%t/without-modules -- \
+-// RUN:   -config="CheckOptions: [{ \
+-// RUN:      key: readability-identifier-naming.MacroDefinitionCase, value: 
UPPER_CASE }]" \
+-// RUN:   -header-filter=.* \
++// RUN:   -config="CheckOptions: { \
++// RUN:      readability-identifier-naming.MacroDefinitionCase: UPPER_CASE }" 
\
++// RUN:   -header-filter=.* --enable-module-headers-parsing \
+ // RUN:   -- -I %t/
+ //
+ // Run clang-tidy on a file with modular includes:
+@@ -23,9 +23,9 @@
+ // RUN: mkdir %t
+ // RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
+ // RUN: %check_clang_tidy -std=c++11 %s readability-identifier-naming 
%t/with-modules -- \
+-// RUN:   -config="CheckOptions: [{ \
+-// RUN:      key: readability-identifier-naming.MacroDefinitionCase, value: 
UPPER_CASE }]" \
+-// RUN:   -header-filter=.* \
++// RUN:   -config="CheckOptions: { \
++// RUN:      readability-identifier-naming.MacroDefinitionCase: UPPER_CASE }" 
\
++// RUN:   -header-filter=.* --enable-module-headers-parsing \
+ // RUN:   -- -I %t/ \
+ // RUN:   -fmodules -fimplicit-modules -fno-implicit-module-maps \
+ // RUN:   -fmodule-map-file=%t/module.modulemap \
+@@ -35,9 +35,9 @@
+ // RUN: mkdir %t
+ // RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
+ // RUN: %check_clang_tidy -std=c++17 %s readability-identifier-naming 
%t/with-modules -- \
+-// RUN:   -config="CheckOptions: [{ \
+-// RUN:      key: readability-identifier-naming.MacroDefinitionCase, value: 
UPPER_CASE }]" \
+-// RUN:   -header-filter=.* \
++// RUN:   -config="CheckOptions: { \
++// RUN:      readability-identifier-naming.MacroDefinitionCase: UPPER_CASE }" 
\
++// RUN:   -header-filter=.* --enable-module-headers-parsing \
+ // RUN:   -- -I %t/ \
+ // RUN:   -fmodules -fimplicit-modules -fno-implicit-module-maps \
+ // RUN:   -fmodule-map-file=%t/module.modulemap \

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to