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++/39566] New: Optimization fails on templated iteration function


I tried to reduce the code to a minimum, so the example does no longer make
sense at all.
However, the point is, that the code is supposed to return half the count of
elements in a container (e.g. if the container holds 16 elements, the function
would return 16, if it holds 33 elements, the function would still return 16).
Compiled with -O0, things are alright. Using -O1 or -O2 breaks it and the
function returns 15 for a container with 32 elements.
Compiling with -DWORKS_OK, omitting the template, everything is fine.


mrohrbac@linux-5tx5:~/test> uname -a
Linux linux-5tx5 2.6.27-rc3-g8d0968ab-24-pae
#8d0968abd03ec6b407df117adc773562386702fa SMP 2008/24/14 00:24:3 i686 i686 i386
GNU/Linux

mrohrbac@linux-5tx5:~/test> cat test.cxx
#include <string>

#ifdef WORKS_OK
typedef std::string::iterator II;
#else
template<typename II>
#endif
size_t test(II from, II end)
{
    size_t cnt=0;
    while (from != end) {
        ++from;
        if (from == end)
            return cnt;
        ++from;
        ++cnt;
    }
    return cnt;
}

int main(int,char**)
{
  std::string s="1234567890abcdef1234567890abcdef";
  size_t cnt=test(s.begin(), s.end());
  return cnt;
}

mrohrbac@linux-5tx5:~/test> g++ -v -O1 -Wall -pedantic test.cxx
Using built-in specs.
Target: i586-suse-linux
Configured with: ../configure --prefix=/usr --with-local-prefix=/usr/local
--infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib
--libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada
--enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.3
--enable-ssp --disable-libssp --with-bugurl=http://bugs.opensuse.org/
--with-pkgversion='SUSE Linux' --disable-libgcj --with-slibdir=/lib
--with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new
--disable-libstdcxx-pch --program-suffix=-4.3
--enable-version-specific-runtime-libs --enable-linux-futex
--without-system-libunwind --with-cpu=generic --build=i586-suse-linux
Thread model: posix
gcc version 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036] (SUSE
Linux)
COLLECT_GCC_OPTIONS='-v' '-O1' '-Wall' '-pedantic' '-shared-libgcc'
'-mtune=generic'
 /usr/lib/gcc/i586-suse-linux/4.3/cc1plus -quiet -v -D_GNU_SOURCE test.cxx
-quiet -dumpbase test.cxx -mtune=generic -auxbase test -O1 -Wall -pedantic
-version -o /tmp/cc0jlsQi.s
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.3
 /usr/include/c++/4.3/i586-suse-linux
 /usr/include/c++/4.3/backward
 /usr/local/include
 /usr/lib/gcc/i586-suse-linux/4.3/include
 /usr/lib/gcc/i586-suse-linux/4.3/include-fixed
 /usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/include
 /usr/include
End of search list.
GNU C++ (SUSE Linux) version 4.3.1 20080507 (prerelease) [gcc-4_3-branch
revision 135036] (i586-suse-linux)
        compiled by GNU C version 4.3.1 20080507 (prerelease) [gcc-4_3-branch
revision 135036], GMP version 4.2.2, MPFR version 2.3.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 0a1ff4dd89b2c90c4ec1f432d1f05160
COLLECT_GCC_OPTIONS='-v' '-O1' '-Wall' '-pedantic' '-shared-libgcc'
'-mtune=generic'
 /usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/bin/as -V -Qy -o
/tmp/cc8Gof5B.o /tmp/cc0jlsQi.s
GNU assembler version 2.18.50 (i586-suse-linux) using BFD version (GNU
Binutils; openSUSE 11.0) 2.18.50.20080409-11.1
COMPILER_PATH=/usr/lib/gcc/i586-suse-linux/4.3/:/usr/lib/gcc/i586-suse-linux/4.3/:/usr/lib/gcc/i586-suse-linux/:/usr/lib/gcc/i586-suse-linux/4.3/:/usr/lib/gcc/i586-suse-linux/:/usr/lib/gcc/i586-suse-linux/4.3/:/usr/lib/gcc/i586-suse-linux/:/usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/bin/
LIBRARY_PATH=/usr/lib/gcc/i586-suse-linux/4.3/:/usr/lib/gcc/i586-suse-linux/4.3/:/usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/lib/:/usr/lib/gcc/i586-suse-linux/4.3/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-O1' '-Wall' '-pedantic' '-shared-libgcc'
'-mtune=generic'
 /usr/lib/gcc/i586-suse-linux/4.3/collect2 --eh-frame-hdr -m elf_i386
-dynamic-linker /lib/ld-linux.so.2
/usr/lib/gcc/i586-suse-linux/4.3/../../../crt1.o
/usr/lib/gcc/i586-suse-linux/4.3/../../../crti.o
/usr/lib/gcc/i586-suse-linux/4.3/crtbegin.o -L/usr/lib/gcc/i586-suse-linux/4.3
-L/usr/lib/gcc/i586-suse-linux/4.3
-L/usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/lib
-L/usr/lib/gcc/i586-suse-linux/4.3/../../.. /tmp/cc8Gof5B.o -lstdc++ -lm
-lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i586-suse-linux/4.3/crtend.o
/usr/lib/gcc/i586-suse-linux/4.3/../../../crtn.o


-- 
           Summary: Optimization fails on templated iteration function
           Product: gcc
           Version: 4.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: m dot rohrbacher at r-dev dot de
 GCC build triplet: gcc version 4.3.1 20080507 (prerelease) [gcc-4_3-branch
                    revision
  GCC host triplet: i686-suse-linux
GCC target triplet: i586-suse-linux


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


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