Qualified calls to virtual methods still go through the vtable in -fapple-kext mode, so you probably don't want to change that there. (Look for AppleKext in CodeGen and Sema.)
On Fri, Jul 3, 2015 at 4:12 PM, Davide Italiano <dccitali...@gmail.com> wrote: > davide created this revision. > davide added a reviewer: rsmith. > davide added a subscriber: cfe-commits. > > Repository: > rL LLVM > > http://reviews.llvm.org/D10935 > > Files: > lib/Sema/SemaOverload.cpp > test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp > > Index: test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp > =================================================================== > --- test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp > +++ test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp > @@ -12,3 +12,11 @@ > B() { a->f(); }; > ~B() { a->f(); }; > }; > + > +// Don't warn if the call is fully qualified. (PR23215) > +struct C { > + virtual void f() = 0; > + C() { > + C::f(); > + } > +}; > Index: lib/Sema/SemaOverload.cpp > =================================================================== > --- lib/Sema/SemaOverload.cpp > +++ lib/Sema/SemaOverload.cpp > @@ -11788,8 +11788,11 @@ > TheCall->getMethodDecl()->isPure()) { > const CXXMethodDecl *MD = TheCall->getMethodDecl(); > > - if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) { > - Diag(MemExpr->getLocStart(), > + // If the member access is fully qualified, (i.e. X::f), treat > + // it as a non-virtual call and don't warn. > + if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && > + !(MemExpr->getQualifier())) { > + Diag(MemExpr->getLocStart(), > diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) > << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) > << MD->getParent()->getDeclName(); > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits