================
@@ -182,6 +183,30 @@ void IncrementalParser::CleanUpPTU(TranslationUnitDecl 
*MostRecentTU) {
     }
   }
 
+  auto *ECCD = S.getASTContext().getExternCContextDecl();
+  if (auto *Map = ECCD->getPrimaryContext()->getLookupPtr()) {
+    for (auto &&[Key, List] : *Map) {
+      DeclContextLookupResult R = List.getLookupResult();
+      std::vector<NamedDecl *> NamedDeclsToRemove;
+      for (NamedDecl *D : R) {
+        // Implicitly generated C decl is not attached to the current TU but
+        // lexically attached to the recent TU, so we need to check the lexical
+        // context.
----------------
fogsong233 wrote:

 The total stack from parse to really add it is here:
 ```
 #1 0x00005649db60da48 
clang::DeclContext::makeDeclVisibleInContextImpl(clang::NamedDecl*, bool) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x3aa3a48)
 #2 0x00005649db60f024 
clang::DeclContext::makeDeclVisibleInContextWithFlags(clang::NamedDecl*, bool, 
bool) (/home/kacent/llvm-project/build2/bin/clang-repl+0x3aa5024)
 #3 0x00005649dd9d50ed clang::Sema::ActOnFunctionDeclarator(clang::Scope*, 
clang::Declarator&, clang::DeclContext*, clang::TypeSourceInfo*, 
clang::LookupResult&, llvm::MutableArrayRef<clang::TemplateParameterList*>, 
bool&) (/home/kacent/llvm-project/build2/bin/clang-repl+0x5e6b0ed)
 #4 0x00005649dd9d89ec clang::Sema::HandleDeclarator(clang::Scope*, 
clang::Declarator&, llvm::MutableArrayRef<clang::TemplateParameterList*>) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x5e6e9ec)
 #5 0x00005649dd9d982a clang::Sema::ActOnDeclarator(clang::Scope*, 
clang::Declarator&) (/home/kacent/llvm-project/build2/bin/clang-repl+0x5e6f82a)
 #6 0x00005649dd9dac64 
clang::Sema::ImplicitlyDefineFunction(clang::SourceLocation, 
clang::IdentifierInfo&, clang::Scope*) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x5e70c64)
 #7 0x00005649dd9ded32 clang::Sema::ClassifyName(clang::Scope*, 
clang::CXXScopeSpec&, clang::IdentifierInfo*&, clang::SourceLocation, 
clang::Token const&, clang::CorrectionCandidateCallback*) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x5e74d32)
 #8 0x00005649dd3ddf4d 
clang::Parser::TryAnnotateName(clang::CorrectionCandidateCallback*, 
clang::ImplicitTypenameContext) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x5873f4d)
 #9 0x00005649dd4b6d61 
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, 
clang::ParsedAttributes&, clang::ParsedAttributes&, clang::LabelDecl*) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x594cd61)
#10 0x00005649dd4b8762 
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 
24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, 
clang::LabelDecl*) (/home/kacent/llvm-project/build2/bin/clang-repl+0x594e762)
#11 0x00005649dd3f5c99 clang::Parser::ParseTopLevelStmtDecl() 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x588bc99)
#12 0x00005649dd3e9fbc 
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x587ffbc)
#13 0x00005649dd3ea7fd 
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, 
clang::Sema::ModuleImportState&) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x58807fd)
#14 0x00005649dd3eac81 
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, 
clang::Sema::ModuleImportState&) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x5880c81)
#15 0x00005649dc0ec504 clang::IncrementalParser::ParseOrWrapTopLevelDecl() 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x4582504)
#16 0x00005649dc0ed6bd clang::IncrementalParser::Parse(llvm::StringRef) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x45836bd)
#17 0x00005649dc0e2acd clang::Interpreter::Parse(llvm::StringRef) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x4578acd)
#18 0x00005649dc0e337d clang::Interpreter::ParseAndExecute(llvm::StringRef, 
clang::Value*) (/home/kacent/llvm-project/build2/bin/clang-repl+0x457937d)
```
You can see the main logic in
```
 #6 0x00005649dd9dac64 
clang::Sema::ImplicitlyDefineFunction(clang::SourceLocation, 
clang::IdentifierInfo&, clang::Scope*) 
(/home/kacent/llvm-project/build2/bin/clang-repl+0x5e70c64)
 ```

https://github.com/llvm/llvm-project/pull/178648
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to