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]

Formatted output of void* ignores uppercase and internal


When formatting the output of a pointer (void*) the format manipulators
"uppercase" and "internal" seem to be ignored.

The goal is to produce formatted output of a pointer value in hex using
uppercase letters, and with all digits of the value represented including
leading zeros. However, the uppercase and internal format manipulators
are ignored when the output value is a void* type (as one would expect to
cast any formatted output of a pointer). When the pointer is forcibly
cast as a unsigned int, the format manipulators have the expected result.

The following example program demonstrates the effect:

#include <iostream>
#include <iomanip>
using namespace std;

int
main (int count, char** argument)
{
void* pointer = *argument;
cout << "As void*: "
     << hex << setfill ('0') << showbase << uppercase
     << setw (12) << internal
     << pointer << endl;
cout << "As u_int: "
     << hex << setfill ('0') << showbase << uppercase
     << setw (12) << internal
     << reinterpret_cast<unsigned int>(pointer) << endl;
}

The width was set to 12 to exercise the internal zero padding of the hex
formatting. After compiling (g++ -o try try.cc) the output is:

As void*: 000xbfbfe068
As u_int: 0X00BFBFE068

I have tested this on FreeBSD 4.8-STABLE (x86) with gcc 3.3.1, and Solaris
5.8 (sun4u) with gcc 3.2.2 and get the same results. I am attaching a log
of the -v compiler output and the compressed try.ii -save-temps output from
the FreeBSD system.

-- 

Bradford Castalia

"Build an image in your mind, fit yourself into it."

P.S. I would have submitted through bugzilla, but I saw no way to provide
the compressed *.ii file requested in the reporting instructions.
Reading specs from /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/specs
Configured with: ./..//gcc-3.3-20030804/configure --disable-nls --with-gxx-include-dir=/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++/ --with-system-zlib --disable-shared --prefix=/usr/local i386-portbld-freebsd4.8
Thread model: posix
gcc version 3.3.1 [FreeBSD]
 /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/cc1plus -E -D__GNUG__=3 -quiet -v -iprefix /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/ -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1 try.cc try.ii
ignoring nonexistent directory "/opt/pub/i386-portbld-freebsd4.8/include"
ignoring nonexistent directory "/usr/local/i386-portbld-freebsd4.8/include"
ignoring duplicate directory "/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++"
ignoring duplicate directory "/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++/i386-portbld-freebsd4.8"
ignoring duplicate directory "/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++/backward"
ignoring duplicate directory "/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include"
#include "..." search starts here:
#include <...> search starts here:
 /opt/pub/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++
 /opt/pub/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++/i386-portbld-freebsd4.8
 /opt/pub/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include/c++/backward
 /opt/pub/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/include
 /usr/local/include
 /usr/include
End of search list.
 /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/cc1plus -fpreprocessed try.ii -quiet -dumpbase try.cc -auxbase try -version -o try.s
GNU C++ version 3.3.1 [FreeBSD] (i386-portbld-freebsd4.8)
	compiled by GNU C version 3.3.1 [FreeBSD].
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32318
 as -o try.o try.s
 /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/collect2 -V -dynamic-linker /usr/libexec/ld-elf.so.1 -o try /usr/lib/crt1.o /usr/lib/crti.o /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/crtbegin.o -L/opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1 -L/opt/pub/bin/../lib/gcc-lib -L/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1 -L/opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/../../.. -L/usr/local/lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/../../.. try.o -lstdc++ -lm -lgcc -lc -lgcc /opt/pub/bin/../lib/gcc-lib/i386-portbld-freebsd4.8/3.3.1/crtend.o /usr/lib/crtn.o
GNU ld version 2.12.1 [FreeBSD] 2002-07-20
  Supported emulations:
   elf_i386

Attachment: try.ii.gz
Description: GNU Zip compressed data


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