[Bug c++/18214] New: Wrong code for function call involving copy constuctor
ajd at gentrack dot com
gcc-bugzilla@gcc.gnu.org
Fri Oct 29 01:24:00 GMT 2004
Configured with: /home/ajd/gcc-3.4.2/configure --prefix=/opt/gcc-3.4.2 --
enable-languages=c,c++ --enable-threads=posix --with-gnu-as --without-gnu-ld --
with-as=/usr/local/bin/as
Thread model: posix
gcc version 3.4.2
Also reproduced on 3.4.0 and 3.3.2.
The following code segfaults at runtime.
Compiling without any options or optimization (ILP32 mode).
$ g++ test.cpp
$ ./a.out
Memory fault(coredump)
The fault is on the line 'start = src.m_s;', but I believe the problem is in
the argument passing to change.
-----
class var
{
public:
var();
var(const var& copy);
~var();
char *m_s;
public:
};
void change(var src, var from)
{
char *start;
start = src.m_s;
}
int main()
{
var x;
change(x, x);
return 0;
}
var::~var()
{
}
var::var(const var& r)
{
m_s = "UUU";
}
var::var()
{
m_s = "UUU";
}
-----
The following assembly is produced for the call to change:
adds r14 = -48, r35
;;
mov r37 = r14
adds r15 = -64, r35
;;
mov r38 = r15
[.LEHB1:]
br.call.sptk.many b0 = _ZN3varC1ERKS_#
[.LEHE1:]
mov r1 = r36
adds r15 = -48, r35
adds r14 = -8, r35
;;
st8 [r14] = r15
adds r14 = -32, r35
;;
mov r37 = r14
adds r14 = -64, r35
;;
mov r38 = r14
[.LEHB2:]
br.call.sptk.many b0 = _ZN3varC1ERKS_#
mov r1 = r36
adds r14 = -32, r35
adds r15 = -4, r35
;;
ld4 r37 = [r15]
mov r38 = r14
br.call.sptk.many b0 = _Z6change3varS_#
mov r1 = r36
The last 4 lines is where it appears to go wrong.
EG: it is loading from memory at [r15] which is uninitialized.
--
Summary: Wrong code for function call involving copy constuctor
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ajd at gentrack dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: ia64-hp-hpux11.23
GCC host triplet: ia64-hp-hpux11.23
GCC target triplet: ia64-hp-hpux11.23
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18214
More information about the Gcc-bugs
mailing list