Sourc code for t.cpp: ------------------------------------------------ class X { void operator delete(void *p) throw (); };
X xa; void X::operator delete(void *p) throw () { } int mymain() { X *p = new X; /* error - can't access X::operator delete */ return 0; } ------------------------------------------------ Expected Behaviour: ------------------------------------------------ t.cpp:9: `static void X::operator delete(void*)' is private t.cpp:14: within this context ------------------------------------------------ Actual Behaviour: ------------------------------------------------ None. ------------------------------------------------ t.ii generated with -save-temps option ------------------------------------------------ # 1 "t.cpp" # 1 "t.cpp" # 1 "<built-in>" # 1 "<command line>" # 1 "t.cpp" class X { void operator delete(void *p) throw (); }; X xa; void X::operator delete(void *p) throw () { } int mymain() { X *p = new X; return 0; } ------------------------------------------------ Release: ------------------------------------------------ GCC Version: 3.2.0 ------------------------------------------------ Environment: System Type: ------------------------------------------------ Reading specs from /usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/specs Configured with: /scratch/gcc-3.2/configure --prefix=/usr/local/gcc.3.2.0 --enable-threads=aix --disable-nls Thread model: aix gcc version 3.2 /usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -v -iprefix /usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/ -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D_IBMR2 -D_POWER -D_LONG_LONG -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_IBMR2 -D_POWER -D_LONG_LONG -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -Asystem=unix -Asystem=aix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED=1 -D_LARGE_FILE_API -D_ALL_SOURCE -D__WCHAR_TYPE__=short unsigned int -D_ARCH_COM /home/msadoghi/scenario/common/t.cpp t.ii GNU CPP version 3.2 (cpplib) ignoring nonexistent directory "/usr/local/lib/gcc-lib/../../powerpc-ibm-aix5.1.0.0/include" ignoring nonexistent directory "/usr/local/gcc.3.2.0/powerpc-ibm-aix5.1.0.0/include" ignoring duplicate directory "/usr/local/gcc.3.2.0/include/c++/3.2" ignoring duplicate directory "/usr/local/gcc.3.2.0/include/c++/3.2/powerpc-ibm-aix5.1.0.0" ignoring duplicate directory "/usr/local/gcc.3.2.0/include/c++/3.2/backward" ignoring duplicate directory "/usr/local/gcc.3.2.0/lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/include" #include "..." search starts here: #include <...> search starts here: /usr/local/lib/gcc-lib/../../include/c++/3.2 /usr/local/lib/gcc-lib/../../include/c++/3.2/powerpc-ibm-aix5.1.0.0 /usr/local/lib/gcc-lib/../../include/c++/3.2/backward /usr/local/lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/include /usr/local/include /usr/local/gcc.3.2.0/include /usr/include End of search list. /usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/cc1plus -fpreprocessed t.ii -quiet -dumpbase t.cpp -version -o t.s GNU CPP version 3.2 (cpplib) GNU C++ version 3.2 (powerpc-ibm-aix5.1.0.0) compiled by GNU C version 3.2. /home/msadoghi/scenario/common/t.cpp:2: warning: all member functions in class `X' are private as -u -mcom -o t.o t.s ------------------------------------------------ How-To-Repeat: ------------------------------------------------ g++ -v -save-temps -c -std=iso9899:199409 t.cpp ------------------------------------------------ Note: ------------------------------------------------ This is a diagnostic test case. Compilation failure is expected. However the compilation is successful and no error or warning messages are produced. According to C++ ANSI Standard the test cases should produces an error. Therefore, in the strict mode compiler should produce a server error and in the extended mode it should at least produces a warning. C++ ANSI Standard: "new-expression that creates object of class type or array thereof must check access for allocation function, deallocation function, and constructor this checks access for operator delete" AIX, MACOS and LINUX all have a similar behaviors. ------------------------------------------------ -- Summary: A new expression must check the access level of delete operator Product: gcc Version: 3.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: msadoghi at ca dot ibm dot com CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20040