[PATCH] D10935: [Sema] Don't emit "pure virtual" warning for fully qualified calls.

Nico Weber thakis at chromium.org
Fri Jul 3 21:26:02 PDT 2015


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 <dccitaliano at 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 at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150703/2ddfea8a/attachment.html>


More information about the cfe-commits mailing list