[clang] [ExtractAPI] Skip parsing function bodies (PR #215373)

via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 10 12:48:22 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Prajwal Nadig (snprajwal)

<details>
<summary>Changes</summary>

Public API can never be defined in function bodies, since that would make the type function-local only. The symbol graph must not contain any such symbols as they cannot be used by a downstream consumer. Skip parsing function bodies in ExtractAPI. This also addresses cases where inlinable functions sometimes had their local types erroneously included in the symbol graph due to the definition being retained in the PCM file.

rdar://181241162

---
Full diff: https://github.com/llvm/llvm-project/pull/215373.diff


1 Files Affected:

- (modified) clang/lib/ExtractAPI/ExtractAPIConsumer.cpp (+3) 


``````````diff
diff --git a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
index 85da480fb67a6..237decf2f0bd5 100644
--- a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
+++ b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
@@ -448,6 +448,9 @@ ExtractAPIAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
 }
 
 bool ExtractAPIAction::PrepareToExecuteAction(CompilerInstance &CI) {
+  // Public API can never be inside function bodies, so skip parsing them.
+  CI.getFrontendOpts().SkipFunctionBodies = true;
+
   auto &Inputs = CI.getFrontendOpts().Inputs;
   if (Inputs.empty())
     return true;

``````````

</details>


https://github.com/llvm/llvm-project/pull/215373


More information about the cfe-commits mailing list