From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11751 invoked by alias); 17 Apr 2002 09:46:06 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 11715 invoked by uid 71); 17 Apr 2002 09:46:02 -0000 Resent-Date: 17 Apr 2002 09:46:02 -0000 Resent-Message-ID: <20020417094602.11714.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, aj@suse.de, pmladek@suse.cz Resent-Reply-To: gcc-gnats@gcc.gnu.org, pthomas@suse.de Received:(qmail 10285 invoked by uid 61); 17 Apr 2002 09:40:58 -0000 Message-Id:<20020417094058.10284.qmail@sources.redhat.com> Date: Wed, 17 Apr 2002 02:46:00 -0000 From: pthomas@suse.de Reply-To: pthomas@suse.de To: gcc-gnats@gcc.gnu.org Cc: aj@suse.de, pmladek@suse.cz X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify:aj@suse.de, pmladek@suse.cz Subject: c++/6331: g++ 3.1 looses const qualifiers X-SW-Source: 2002-04/txt/msg00879.txt.bz2 List-Id: >Number: 6331 >Category: c++ >Synopsis: g++ 3.1 looses const qualifiers >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Wed Apr 17 02:46:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Philipp Thomas, SuSE Linux Ag >Release: 3.1 >Organization: >Environment: suse-linux-gnu >Description: Gcc rejects the attached code, stating that the conversion is illegal. Output of 'c++ -v -c gcc31_bug_const.cc' is: Using built-in specs. Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared i486-suse-linux Thread model: posix gcc version 3.1 20020408 (prerelease) /usr/lib/gcc-lib/i486-suse-linux/3.1/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i486__ gcc31_bug_const.cc -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase gcc31_bug_const.cc -version -fmessage-length=0 -o /tmp/ccVQg0M0.s GNU CPP version 3.1 20020408 (prerelease) (cpplib) (i386 Linux/ELF) GNU C++ version 3.1 20020408 (prerelease) (i486-suse-linux) compiled by GNU C version 3.1 20020408 (prerelease). ignoring nonexistent directory "/usr/i486-suse-linux/include" #include "..." search starts here: #include <...> search starts here: /usr/include/g++ /usr/include/g++/i486-suse-linux /usr/include/g++/backward /usr/local/include /usr/lib/gcc-lib/i486-suse-linux/3.1/include /usr/include End of search list. gcc31_bug_const.cc: In member function `int Collision::automatic_shift()': gcc31_bug_const.cc:38: invalid conversion from `int (*)(int* const&, int* const&)' to `int (*)(int*&, int*&)' gcc31_bug_const.cc:38: initializing argument 1 of `void Link_array::sort(int (*)(T*&, T*&), int, int) [with T = int]' gcc31_bug_const.cc: In member function `void Link_array::sort(int (*)(T*&, T*&), int, int) [with T = int]': gcc31_bug_const.cc:38: instantiated from here gcc31_bug_const.cc:29: invalid conversion from `int (*)(int* const&, int* const&)' to `int (*)(int*&, int*&)' gcc31_bug_const.cc:29: initializing argument 1 of `void Link_array::sort(int (*)(T*&, T*&), int, int) [with T = int]' >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/plain; name="gcc31_bug_const.cc" Content-Disposition: inline; filename="gcc31_bug_const.cc" template class Link_array { public: Link_array () {} Link_array (Link_array const &src) {} // quicksort. void sort (int (*compare) (T *const&,T *const&), int lower = -1, int upper = -1); }; class Note_column { public: static int shift_compare (int *const &, int *const &) {}; }; class Collision // interface { public: int automatic_shift (); }; template void Link_array::sort (int (*compare) (T *const&,T *const&), int lower, int upper) { int last = lower; sort (compare, lower, last-1); } int Collision::automatic_shift () { int d = 1; Link_array clashes; clashes.sort (Note_column::shift_compare); return 1; } int main() { return 0; }