public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/7302: -Wnon-virtual-dtor should't complain of protected dtor
@ 2002-10-08 14:47 gdr
  0 siblings, 0 replies; 2+ messages in thread
From: gdr @ 2002-10-08 14:47 UTC (permalink / raw)
  To: cesarb, gcc-bugs, gcc-prs, nobody

Synopsis: -Wnon-virtual-dtor should't complain of protected dtor

State-Changed-From-To: open->analyzed
State-Changed-By: gdr
State-Changed-When: Tue Oct  8 14:47:40 2002
State-Changed-Why:
    Confirmed.  Low priority.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7302


^ permalink raw reply	[flat|nested] 2+ messages in thread

* c++/7302: -Wnon-virtual-dtor should't complain of protected dtor
@ 2002-07-13 19:06 Cesar Eduardo Barros
  0 siblings, 0 replies; 2+ messages in thread
From: Cesar Eduardo Barros @ 2002-07-13 19:06 UTC (permalink / raw)
  To: gcc-gnats, debian-gcc


>Number:         7302
>Category:       c++
>Synopsis:       -Wnon-virtual-dtor should't complain of protected dtor
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jul 13 19:06:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Cesar Eduardo Barros
>Release:        3.1.1 20020703 (Debian prerelease) (Debian testing/unstable)
>Organization:
>Environment:
System: Linux flower 2.4.18-preempt #1 Mon Jun 17 14:21:46 BRT 2002 i686 unknown
Architecture: i686

	
host: i386-pc-linux-gnu
build: i386-pc-linux-gnu
target: i386-pc-linux-gnu
configured with: /mnt/data/gcc-3.1/gcc-3.1-3.1.1ds2/src/configure -v --enable-languages=c,c++,java,f77,proto,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/g++-v3-3.1 --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --enable-clocale=gnu --enable-__cxa_atexit --enable-threads=posix --enable-java-gc=boehm --enable-objc-gc i386-linux
>Description:
	-Wnon-virtual-dtor warns even when the destructor is protected and the
	class has only pure virtual members and no friends.

	In that case, there's no way the destructor can be called incorrectly.
	The class can't call it, since there are no methods other than the
	destructor itself. There are no friends who could call it. And if you
	inherit from it without making the derived class' destructor virtual,
	it would complain about it in the derived class, since it has virtual
	functions and a non-virtual destructor (unless it also has no non-pure
	members, no friends and a non-public destructor).
>How-To-Repeat:

Input file:
=== x.cc ===
class x
{
public:
	virtual void y () = 0;

protected:
	~x () { }
};

void f (x* p)
{
	p->y();
	delete p;
}
======

Command line:
======
g++-3.1 -Wnon-virtual-dtor -O2 -v -save-temps x.cc -o x
======

Compiler output:
======
Reading specs from /usr/lib/gcc-lib/i386-linux/3.1.1/specs
Configured with: /mnt/data/gcc-3.1/gcc-3.1-3.1.1ds2/src/configure -v --enable-languages=c,c++,java,f77,proto,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/g++-v3-3.1 --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --enable-clocale=gnu --enable-__cxa_atexit --enable-threads=posix --enable-java-gc=boehm --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.1.1 20020703 (Debian prerelease)
 /usr/lib/gcc-lib/i386-linux/3.1.1/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=1 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ x.cc -Wnon-virtual-dtor x.ii
GNU CPP version 3.1.1 20020703 (Debian prerelease) (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/g++-v3-3.1
 /usr/include/g++-v3-3.1/i386-linux
 /usr/include/g++-v3-3.1/backward
 /usr/local/include
 /usr/lib/gcc-lib/i386-linux/3.1.1/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i386-linux/3.1.1/cc1plus -fpreprocessed x.ii -quiet -dumpbase x.cc -O2 -Wnon-virtual-dtor -version -o x.s
GNU CPP version 3.1.1 20020703 (Debian prerelease) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1.1 20020703 (Debian prerelease) (i386-linux)
	compiled by GNU C version 3.1.1 20020703 (Debian prerelease).
x.cc:2: warning: `class x' has virtual functions but non-virtual destructor
x.cc: In function `void f(x*)':
x.cc:7: `x::~x()' is protected
x.cc:13: within this context
======

The warning at line 2 is the bogus one. The error at line 13 is on purpose, to
show you can't delete it (and so that the warning is bogus).

>Fix:
	If a class has only pure virtual members besides the destructor and
	has no friends, and the destructor is protected or private, then the
	warning shouldn't be shown.
>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-10-08 21:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-08 14:47 c++/7302: -Wnon-virtual-dtor should't complain of protected dtor gdr
  -- strict thread matches above, loose matches on Subject: below --
2002-07-13 19:06 Cesar Eduardo Barros

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).