[6.2][cxx-interop] Fix unqualified name lookup failure

Explanation: C++ interop synthesizes certain forwarding functions in an
_ObjC module. This confuses MemberImportVisibility. This patch adds
logic to work this around by keeping a mapping between the synthesized
and the original function and looks up where the synthesized functions
belong to based on the original functions' parent module.
Scope: C++ forward interop when MemberImportVisibility is enabled.
Issues: rdar://154887575
Original PRs: #82840
Risk: Low, a narrow change makes getModuleContextForNameLookupForCxxDecl more
precise, and it is only used with MemberImportVisibility.
Testing: Added a compiler test.
Reviewers: @egorzhdan, @tshortli, @hnrklssn
This commit is contained in:
Gábor Horváth
2025-07-08 17:53:35 +01:00
committed by Gabor Horvath
parent 7c12be865e
commit b51b58db30
8 changed files with 81 additions and 5 deletions

View File

@@ -216,6 +216,9 @@ public:
DeclContext *newContext,
ClangInheritanceInfo inheritance) = 0;
/// Returnes the original method if \param decl is a clone from a base class
virtual ValueDecl *getOriginalForClonedMember(const ValueDecl *decl) = 0;
/// Emits diagnostics for any declarations named name
/// whose direct declaration context is a TU.
virtual void diagnoseTopLevelValue(const DeclName &name) = 0;