<div dir="ltr">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.)</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 3, 2015 at 4:12 PM, Davide Italiano <span dir="ltr"><<a href="mailto:dccitaliano@gmail.com" target="_blank">dccitaliano@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">davide created this revision.<br>
davide added a reviewer: rsmith.<br>
davide added a subscriber: cfe-commits.<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10935&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=_Ufx3bZ1OrtYNL0SKggZGfkPr5xzjiyIo_RC-iOKnUo&s=8GNVJ65MVLXMimSc_3qk8FgF26CWHwRcrN82qfpbHgM&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10935</a><br>
<br>
Files:<br>
  lib/Sema/SemaOverload.cpp<br>
  test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp<br>
<br>
Index: test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp<br>
===================================================================<br>
--- test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp<br>
+++ test/SemaCXX/warn-pure-virtual-call-from-ctor-dtor.cpp<br>
@@ -12,3 +12,11 @@<br>
   B() { a->f(); };<br>
   ~B() { a->f(); };<br>
 };<br>
+<br>
+// Don't warn if the call is fully qualified. (PR23215)<br>
+struct C {<br>
+    virtual void f() = 0;<br>
+    C() {<br>
+        C::f();<br>
+    }<br>
+};<br>
Index: lib/Sema/SemaOverload.cpp<br>
===================================================================<br>
--- lib/Sema/SemaOverload.cpp<br>
+++ lib/Sema/SemaOverload.cpp<br>
@@ -11788,8 +11788,11 @@<br>
       TheCall->getMethodDecl()->isPure()) {<br>
     const CXXMethodDecl *MD = TheCall->getMethodDecl();<br>
<br>
-    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {<br>
-      Diag(MemExpr->getLocStart(),<br>
+    // If the member access is fully qualified, (i.e. X::f), treat<br>
+    // it as a non-virtual call and don't warn.<br>
+    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) &&<br>
+       !(MemExpr->getQualifier())) {<br>
+      Diag(MemExpr->getLocStart(),<br>
            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)<br>
         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)<br>
         << MD->getParent()->getDeclName();<br>
<br>
<br>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>