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]
Other format: [Raw text]

[Bug c++/33025] New: Wrong optimisation


The attached code fails with gcc version 4.3.0 20070703 (experimental). It call
the alloc() function at each iteration producing a memory corruption. I get the
following trace. 

grenade-> g++ /tmp/test.C
grenade-> ./a.out
2000
*** glibc detected *** ./a.out: double free or corruption (!prev):
0x0000000000502010 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3d64a6d313]
/lib64/libc.so.6(__libc_free+0x84)[0x3d64a6d494]
./a.out(__gxx_personality_v0+0x3c0)[0x400c58]
./a.out[0x400e01]
./a.out(__gxx_personality_v0+0x2cf)[0x400b67]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x3d64a1c784]
./a.out(_ZNSt8ios_base4InitD1Ev+0x51)[0x400909]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:02 6975782                           
/home/papadop/compiles/Odyssee++-linux-4.3-x86_64/Bins/DirInv/src/Q1Mesh/a.out
00501000-00502000 rw-p 00001000 08:02 6975782                           
/home/papadop/compiles/Odyssee++-linux-4.3-x86_64/Bins/DirInv/src/Q1Mesh/a.out
00502000-00523000 rw-p 00502000 00:00 0                                  [heap]
3d63d00000-3d63d1a000 r-xp 00000000 08:02 7292997                       
/lib64/ld-2.4.so
3d63e19000-3d63e1a000 r--p 00019000 08:02 7292997                       
/lib64/ld-2.4.so
3d63e1a000-3d63e1b000 rw-p 0001a000 08:02 7292997                       
/lib64/ld-2.4.so
3d64a00000-3d64b3f000 r-xp 00000000 08:02 7293004                       
/lib64/libc-2.4.so
3d64b3f000-3d64c3e000 ---p 0013f000 08:02 7293004                       
/lib64/libc-2.4.so
3d64c3e000-3d64c42000 r--p 0013e000 08:02 7293004                       
/lib64/libc-2.4.so
3d64c42000-3d64c43000 rw-p 00142000 08:02 7293004                       
/lib64/libc-2.4.so
3d64c43000-3d64c48000 rw-p 3d64c43000 00:00 0
3d64d00000-3d64d80000 r-xp 00000000 08:02 7293008                       
/lib64/libm-2.4.so
3d64d80000-3d64e7f000 ---p 00080000 08:02 7293008                       
/lib64/libm-2.4.so
3d64e7f000-3d64e80000 r--p 0007f000 08:02 7293008                       
/lib64/libm-2.4.so
3d64e80000-3d64e81000 rw-p 00080000 08:02 7293008                       
/lib64/libm-2.4.so
2aaaaaaab000-2aaaaaaac000 rw-p 2aaaaaaab000 00:00 0
2aaaaaad2000-2aaaaaad3000 rw-p 2aaaaaad2000 00:00 0
2aaaaaad3000-2aaaaabb8000 r-xp 00000000 08:02 3401368                   
/usr/local/gcc-4.3/lib64/libstdc++.so.6.0.9
2aaaaabb8000-2aaaaacb8000 ---p 000e5000 08:02 3401368                   
/usr/local/gcc-4.3/lib64/libstdc++.so.6.0.9
2aaaaacb8000-2aaaaacbf000 r--p 000e5000 08:02 3401368                   
/usr/local/gcc-4.3/lib64/libstdc++.so.6.0.9
2aaaaacbf000-2aaaaacc1000 rw-p 000ec000 08:02 3401368                   
/usr/local/gcc-4.3/lib64/libstdc++.so.6.0.9
2aaaaacc1000-2aaaaacd4000 rw-p 2aaaaacc1000 00:00 0
2aaaaacd4000-2aaaaace9000 r-xp 00000000 08:02 3401390                   
/usr/local/gcc-4.3/lib64/libgcc_s.so.1
2aaaaace9000-2aaaaade8000 ---p 00015000 08:02 3401390                   
/usr/local/gcc-4.3/lib64/libgcc_s.so.1
2aaaaade8000-2aaaaade9000 rw-p 00014000 08:02 3401390                   
/usr/local/gcc-4.3/lib64/libgcc_s.so.1
2aaaaade9000-2aaaaadeb000 rw-p 2aaaaade9000 00:00 0
2aaaaae00000-2aaaaae21000 rw-p 2aaaaae00000 00:00 0
2aaaaae21000-2aaaaaf00000 ---p 2aaaaae21000 00:00 0
7fffe7a74000-7fffe7a89000 rw-p 7fffe7a74000 00:00 0                     
[stack]
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0                  [vdso]
Abort

As it can be seen the allocator has been called 2000 times instead of only
1000.
The same code on gcc version 4.3.0 20070528 (experimental) (though on
i686-pc-linux-gnu) does not behave the same way...


-- 
           Summary: Wrong optimisation
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: theodore dot papadopoulo at sophia dot inria dot fr
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33025


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