This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PR c++/5645 gcc warns that pure virtual class not explicitly initialized
On 13/11/2007, Jason Merrill <jason@redhat.com> wrote:
> Manuel López-Ibáñez wrote:
> > TYPE_HAS_CONSTRUCTOR (BINFO_TYPE (subobject)) is 1.
>
> That seems wrong to me. That's being set in
> add_implicitly_declared_members, but I don't see why; the macro is
> supposed to indicate whether or not there are any user-declared constructors
That is not a recent thing:
22869 mmitchel /* Copy constructor. */
28677 mmitchel if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
22869 mmitchel {
84851 mmitchel TYPE_HAS_INIT_REF (t) = 1;
84851 mmitchel TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
84851 mmitchel CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
84851 mmitchel TYPE_HAS_CONSTRUCTOR (t) = 1;
22869 mmitchel }
> What happens if you remove the line that sets it for the
> implicit copy ctor?
>
Bootstrap breaks badly:
/bin/sh ../libtool --tag CXX --mode=compile
/home/manuel/130148M/build/./gcc/xgcc -shared-libgcc
-B/home/manuel/130148M/build/./gcc -nostdinc++
-L/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/src
-L/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs
-B/home/manuel/./130148M/install/x86_64-unknown-linux-gnu/bin/
-B/home/manuel/./130148M/install/x86_64-unknown-linux-gnu/lib/
-isystem /home/manuel/./130148M/install/x86_64-unknown-linux-gnu/include
-isystem /home/manuel/./130148M/install/x86_64-unknown-linux-gnu/sys-include
-I/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/include/x86_64-unknown-linux-gnu
-I/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/include
-I/home/manuel/src/trunk/libstdc++-v3/libsupc++
-fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual
-fdiagnostics-show-location=once -ffunction-sections -fdata-sections
-g -O2 -D_GNU_SOURCE -c -o codecvt_members.lo codecvt_members.cc
libtool: compile: /home/manuel/130148M/build/./gcc/xgcc
-shared-libgcc -B/home/manuel/130148M/build/./gcc -nostdinc++
-L/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/src
-L/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs
-B/home/manuel/./130148M/install/x86_64-unknown-linux-gnu/bin/
-B/home/manuel/./130148M/install/x86_64-unknown-linux-gnu/lib/
-isystem /home/manuel/./130148M/install/x86_64-unknown-linux-gnu/include
-isystem /home/manuel/./130148M/install/x86_64-unknown-linux-gnu/sys-include
-I/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/include/x86_64-unknown-linux-gnu
-I/home/manuel/130148M/build/x86_64-unknown-linux-gnu/libstdc++-v3/include
-I/home/manuel/src/trunk/libstdc++-v3/libsupc++
-fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual
-fdiagnostics-show-location=once -ffunction-sections -fdata-sections
-g -O2 -D_GNU_SOURCE -c codecvt_members.cc -fPIC -DPIC -o
.libs/codecvt_members.o
codecvt_members.cc: In member function 'virtual
std::codecvt_base::result std::codecvt<wchar_t, char,
__mbstate_t>::do_out(mbstate_t&, const wchar_t*, const wchar_t*, const
wchar_t*&, char*, char*, char*&) const':
codecvt_members.cc:56: error: constructor syntax used, but no
constructor declared for type 'mbstate_t'
codecvt_members.cc:56: error: cannot convert '__mbstate_t' to 'int' in
initialization
codecvt_members.cc:56: warning: missing initializer for member
'__mbstate_t::__value'
codecvt_members.cc: In member function 'virtual
std::codecvt_base::result std::codecvt<wchar_t, char,
__mbstate_t>::do_in(mbstate_t&, const char*, const char*, const
char*&, wchar_t*, wchar_t*, wchar_t*&) const':
codecvt_members.cc:121: error: constructor syntax used, but no
constructor declared for type 'mbstate_t'
codecvt_members.cc:121: error: cannot convert '__mbstate_t' to 'int'
in initialization
codecvt_members.cc:121: warning: missing initializer for member
'__mbstate_t::__value'
codecvt_members.cc: In member function 'virtual int
std::codecvt<wchar_t, char, __mbstate_t>::do_length(mbstate_t&, const
char*, const char*, size_t) const':
codecvt_members.cc:190: error: constructor syntax used, but no
constructor declared for type 'mbstate_t'
codecvt_members.cc:190: error: cannot convert '__mbstate_t' to 'int'
in initialization
codecvt_members.cc:190: warning: missing initializer for member
'__mbstate_t::__value'
Ideas?
Manu.