This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/4459: g++ 3.0.1 resolves to wrong const overload when using access adjustment



>Number:         4459
>Category:       c++
>Synopsis:       g++ 3.0.1 resolves to wrong const overload when using access adjustment
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Oct 03 11:36:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     yoder@roguewave.com
>Release:        3.0.1
>Organization:
>Environment:
g++ 3.0.1 on Solaris 8
>Description:
When access adjustment is used in the body of a class for member functions that are overload on const, all calls resolve (incorrectly) to the const overload.
>How-To-Repeat:
Here is a short test case:

#include <iostream>

using namespace std;

struct A {

  void foo() { cout << "non const" << endl;  }
  void foo() const { cout << "const" << endl;  }


};

struct B : private A {

    using A::foo;

};

int main() {

  B b;
  b.foo();

  return 0;
}  

output:
const


Following is the g++ compile line with the verbose and save temps option:

$ g++ -v -save-temps -c access_adj.cpp
Reading specs from /package/1/compilers/g++/3.0.1/bin/../lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/specs
Configured with: ../gcc-3.0.1/configure --prefix=/tmp/gcc --enable-threads
Thread model: posix
gcc version 3.0.1
 /package/1/compilers/g++/3.0.1/bin/../lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/cpp0 -lang-c++ -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v -iprefix /package/1/compilers/g++/3.0.1/bin/../lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=1 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_XOPEN_SOURCE=500 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D__EXTENSIONS__ -D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc access_adj.cpp access_adj.ii
GNU CPP version 3.0.1 (cpplib) (sparc)
ignoring nonexistent directory "/package/1/compilers/g++/3.0.1/sparc-sun-solaris2.8/include"
ignoring nonexistent directory "/tmp/gcc/lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/../../../../include/g++-v3"
ignoring nonexistent directory "/tmp/gcc/lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/../../../../include/g++-v3/sparc-sun-solaris2.8"
ignoring nonexistent directory "/tmp/gcc/lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/../../../../include/g++-v3/backward"
ignoring nonexistent directory "/tmp/gcc/include"
ignoring nonexistent directory "/tmp/gcc/lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/include"
ignoring nonexistent directory "/tmp/gcc/lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/../../../../sparc-sun-solaris2.8/include"
#include "..." search starts here:
#include <...> search starts here:
 /package/1/compilers/g++/3.0.1/include/g++-v3
 /package/1/compilers/g++/3.0.1/include/g++-v3/sparc-sun-solaris2.8
 /package/1/compilers/g++/3.0.1/include/g++-v3/backward
 /package/1/compilers/g++/3.0.1/lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/include
 /usr/include
End of search list.
 /package/1/compilers/g++/3.0.1/bin/../lib/gcc-lib/sparc-sun-solaris2.8/3.0.1/cc1plus -fpreprocessed access_adj.ii -quiet -dumpbase access_adj.cpp -version -o access_adj.s
GNU CPP version 3.0.1 (cpplib) (sparc)
GNU C++ version 3.0.1 (sparc-sun-solaris2.8)
        compiled by GNU C version 2.95.2 19991024 (release).
 /usr/ccs/bin/as -V -Qy -s -o access_adj.o access_adj.s
/usr/ccs/bin/as: Sun WorkShop 6 99/08/18

$ g++ -o access_adj access_adj.o




$ access_adj
const


>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]