ABataev added a comment.

In D71241#1788003 <https://reviews.llvm.org/D71241#1788003>, @jdoerfert wrote:
> In D71241#1787652 <https://reviews.llvm.org/D71241#1787652>, @hfinkel wrote:
>
> > In D71241#1787571 <https://reviews.llvm.org/D71241#1787571>, @ABataev wrote:
> >
> > > In D71241#1787265 <https://reviews.llvm.org/D71241#1787265>, @hfinkel 
> > > wrote:
> > >
> > > > In D71241#1786959 <https://reviews.llvm.org/D71241#1786959>, @jdoerfert 
> > > > wrote:
> > > >
> > > > > In D71241#1786530 <https://reviews.llvm.org/D71241#1786530>, @ABataev 
> > > > > wrote:
> > > > >
> > > > > > Most probably, we can use this solution without adding a new 
> > > > > > expression. `DeclRefExpr` class can contain 2 decls: FoundDecl and 
> > > > > > the Decl being used. You can use FoundDecl to point to the original 
> > > > > > function and used decl to point to the function being called in 
> > > > > > this context. But at first, we need to be sure that we can handle 
> > > > > > all corner cases correctly.
> > > > >
> > > > >
> > > > > What new expression are you talking about?
> > > >
> > > >
> > > > To be clear, I believe he's talking about the new expression that I 
> > > > proposed we add in order to represent this kind of call. If that's not 
> > > > needed, and we can use the FoundDecl/Decl pair for that purpose, that 
> > > > should also be considered.
> > > >
> > > > > This solution already does point to both declarations, as shown here: 
> > > > > https://reviews.llvm.org/D71241#1782504
> > >
> > >
> > > Exactly. We need to check if the `MemberRefExpr` can do this too to 
> > > handle member functions correctly.
> > >  And need to wait for opinion from Richard Smith about the design. We 
> > > need to be sure that it won't break compatibility with C/C++ in some 
> > > corner cases. Design bugs are very hard to solve and I want to be sure 
> > > that we don't miss anything. And we provide full compatibility with both 
> > > C and C++.
> >
> >
> > We do need to be careful here. For cases with FoundDecl != Decl, I think 
> > that the typo-correction cases look like they probably work, but there are 
> > a few places where we make semantic decisions based on the mismatch, such 
> > as:
> >
> > In SemaTemplate.cpp below line 512, we have (this is in C++03-specific 
> > code):
> >
> >   } else if (!Found.isSuppressingDiagnostics()) {
> >     //   - if the name found is a class template, it must refer to the same
> >     //     entity as the one found in the class of the object expression,
> >     //     otherwise the program is ill-formed.
> >     if (!Found.isSingleResult() ||
> >         getAsTemplateNameDecl(Found.getFoundDecl())->getCanonicalDecl() !=
> >             OuterTemplate->getCanonicalDecl()) {
> >       Diag(Found.getNameLoc(),
> >            diag::ext_nested_name_member_ref_lookup_ambiguous)
> >   
> >
> > and in SemaExpr.cpp near line 2783, we have:
> >
> >   // If we actually found the member through a using declaration, cast
> >   // down to the using declaration's type.
> >   //
> >   // Pointer equality is fine here because only one declaration of a
> >   // class ever has member declarations.
> >   if (FoundDecl->getDeclContext() != Member->getDeclContext()) {
> >     assert(isa<UsingShadowDecl>(FoundDecl));
> >     QualType URecordType = Context.getTypeDeclType(
> >                            
> > cast<CXXRecordDecl>(FoundDecl->getDeclContext()));
>
>
> Could you specify what behavior you expect, or what the test casees would 
> look like?
>
> For the record:
>  OpenMP basically says, if you have a call to a (base)function that has 
> variants with contexts that match at the call site, call the variant with the 
> highest score. The variants are specified by a //variant-func-id//, which is 
> a base language identifier or C++ //template-id//. For C++, the variant 
> declaration is identified by *performing the base language lookup rules on 
> the //variant-func-id// with arguments that correspond to the base function 
> argument types*.


No need to worry about lookup in C++, ADL lookup is implemented already.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71241/new/

https://reviews.llvm.org/D71241



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

Reply via email to