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]

[g++] -O2 and signed/unsigned char conversion


#include <vector>
#include <iostream>

/*
vector<unsigned char>::push_back() with postincremented dereferenced
pointer to signed char and -O2 is bad.

Reproducable with
        2.95.2 19991024 (release)

Not reproducable with
        egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
---

$ uname -a
FreeBSD host 4.1-RELEASE FreeBSD 4.1-RELEASE #0: Tue Jan  2 09:48:24 CET 2001     root@host:/usr/src/sys/compile/HOST  i386

$ which g++
/usr/bin/g++

$ g++ -v
Using builtin specs.
gcc version 2.95.2 19991024 (release)

$ g++ -Wall -O2 -g push_back_bug.cpp -lstdc++ -o push_back_bug
$ ./push_back_bug
bc

$ g++ -Wall -g push_back_bug.cpp -lstdc++ -o push_back_bug
$ ./push_back_bug
ab */

int
main()
{
  vector <unsigned char> ucv;   // NOTE: unsigned char
  const char* src = "abc";      // NOTE: signed char

  ucv.push_back(*src++);
  ucv.push_back(*src++);
  cout << ucv[0] << ucv[1] << endl;
}

push_back_bug.ii


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