[LLVMbugs] [Bug 7966] New: missing warning about use of virtual member inside destructor

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun Aug 22 15:07:11 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=7966

           Summary: missing warning about use of virtual member inside
                    destructor
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: nicholas at mxc.ca
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


This small program is dangerous:

  struct Base {
    virtual ~Base() {
      test();
    }
    virtual int test() = 0;
  };
  struct Derived : public Base {
    int test() { return 0; }
  };

because the destructor will be called after Derived is destroyed and the lookup
for test will always call the pure virtual method. G++ kindly emits a warning
here:

$ g++ -fsyntax-only vd.cpp
vd.cpp: In destructor ‘virtual Base::~Base()’:
vd.cpp:3: warning: abstract virtual ‘virtual int Base::test()’ called from
destructor

but Clang doesn't. We really should!

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list