egcs-1.1: C++ aggregate initialization bug?

Mumit Khan khan@xraylith.wisc.edu
Wed Oct 21 15:28:00 GMT 1998


/*
   
 The following is a condensed version of a bug report filed by Tom Uban
 <uban@mail.netnitco.net>.

 I believe that egcs is incorrect in trying to use a copy constructor in
 the aggregate initialization below. According to Dec'96 DWP Sec 12.6.2.2 
 "Explicit Initialization", the initialization should only call test(int), 
 and not nomplain about non-public copy constructor. 

 Intel-3.0, which uses EDG front-end, apparently agrees with the 
 interpretation above, but egcs-1.1 does not.

 Could someone please clarify?

 Regard,
 Mumit

*/

struct test 
{
  test(int);
private:             // making this public "fixes" the problem
  test(const test &hack_to_copy);
};

test testarray[]= { test(3) };

/* 
Reading specs from /usr/local/egcs/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.57/specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)
 /usr/local/egcs/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.57/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -trigraphs -D__STRICT_ANSI__ -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS
 -pedantic -Asystem(unix) -Acpu(i386) -Amachine(i386) -D__i386 -D__i386__ -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ aggr-init-bug.cc /tmp/ccJd62QH.ii
GNU CPP version egcs-2.91.57 19980901 (egcs-1.1 release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/egcs/include/g++
 /usr/local/include
 /usr/local/egcs/i686-pc-linux-gnu/include
 /usr/local/egcs/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.57/include
 /usr/include
End of search list.
 /usr/local/egcs/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.57/cc1plus /tmp/ccJd62QH.ii -quiet -dumpbase aggr-init-bug.cc -pedantic -ansi -version -o /tmp/ccOTlKLe.s
GNU C++ version egcs-2.91.57 19980901 (egcs-1.1 release) (i686-pc-linux-gnu) compiled by GNU C version egcs-2.91.57 19980901 (egcs-1.1 release).
aggr-init-bug.cc:25: `test::test(const struct test &)' is private
aggr-init-bug.cc:28: within this context
aggr-init-bug.cc: In function `(static initializers for aggr-init-bug.cc)':
aggr-init-bug.cc:25: `test::test(const struct test &)' is private
aggr-init-bug.cc:28: within this context
*/




More information about the Gcc-bugs mailing list