[Bug c++/61302] New: When returning nullptr in a comma operator, side effects are lost.

2014-05-24 Thread fox at ucw dot cz
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61302

Bug ID: 61302
   Summary: When returning nullptr in a comma operator, side
effects are lost.
   Product: gcc
   Version: 4.7.3
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: fox at ucw dot cz

Consider the following code:

  #include 

  void* test(void) {
return printf("Hello world.\n"), nullptr;
  }

  int main(void) {
return test() ? 0 : 1;
  }

When compiled with g++-4.7.3, no "Hello world.\n" is printed.
The g++-4.8.1 works fine.

I though this would be connected to #52988, but it is not,
the attachment 27157 of #52988 works fine in g++-4.7.3.


[Bug c/61410] New: strcat overwrites destination string when compiling with optimizations

2014-06-04 Thread fox at ucw dot cz
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61410

Bug ID: 61410
   Summary: strcat overwrites destination string when compiling
with optimizations
   Product: gcc
   Version: 4.7.3
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: fox at ucw dot cz

The following code

  #include 
  #include 

  int main(void) {
char str[250];
strcpy(str, " ");
str[0] = '_';
strcat(str, ",");
puts(str);
return 0;
  }

prints only ",\n" when compiled with gcc-4.7 -O[23]. It should print "_,\n" and
it does so with gcc-4.7 -O[01], gcc-4.4 -O[0123] and gcc-4.8 -O[0123].

The result of gcc-4.7 -v is
  Using built-in specs.
  COLLECT_GCC=gcc
  COLLECT_LTO_WRAPPER=/usr/lib/gcc/i486-linux-gnu/4.7/lto-wrapper
  Target: i486-linux-gnu
  Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.7.3-1ubuntu1~10.04.2' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs
--enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.7 --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls
--enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes
--enable-gnu-unique-object --enable-plugin --with-system-zlib --enable-objc-gc
--enable-targets=all --disable-werror --with-arch-32=i586
--with-multilib-list=m32,m64 --with-tune=generic --enable-checking=release
--build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
  Thread model: posix
  gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1~10.04.2)

The disassembly of the code when using gcc-4.7 -O2:
  080483a0 :
   80483a0:   55  push   %ebp
   80483a1:   89 e5   mov%esp,%ebp
   80483a3:   83 e4 f0and$0xfff0,%esp
   80483a6:   81 ec 10 01 00 00   sub$0x110,%esp
   80483ac:   65 a1 14 00 00 00   mov%gs:0x14,%eax
   80483b2:   89 84 24 0c 01 00 00mov%eax,0x10c(%esp)
   80483b9:   31 c0   xor%eax,%eax
   80483bb:   8d 44 24 12 lea0x12(%esp),%eax
   80483bf:   89 04 24mov%eax,(%esp)
   80483c2:   66 c7 44 24 12 2c 00movw   $0x2c,0x12(%esp)
   80483c9:   e8 a2 ff ff ff  call   8048370 
   80483ce:   31 c0   xor%eax,%eax
   80483d0:   8b 94 24 0c 01 00 00mov0x10c(%esp),%edx
   80483d7:   65 33 15 14 00 00 00xor%gs:0x14,%edx
   80483de:   75 02   jne80483e2 
   80483e0:   c9  leave  
   80483e1:   c3  ret
   80483e2:   e8 79 ff ff ff  call   8048360 <__stack_chk_fail@plt>
   80483e7:   90  nop

Cheers,
Milan Straka