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++/64830] New: g++ generating segfaulting binaries


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64830

            Bug ID: 64830
           Summary: g++ generating segfaulting binaries
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: amigo.elite at gmail dot com

Created attachment 34601
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34601&action=edit
Test case sources (.proto, .cc) and temporary .ii

Starting from 4.6 (perhaps, I can't test every version) g++ generating binaries
that was segfaulting.

Test case was attached.

How to reproduce:

First of all, you will need a protobuf compiler (named protoc) and protobuf
headers installed on test system.
I'm sorry, but escaping from protobuf dependencies to write a self sufficient
test case requires a lot of work but this dependency should not be a problem
(at least I hope so).

1. Create a new directory with source files that was attached and cd into it
2. Run protoc testcase.proto --cpp_out=./
3. Run g++ -g -lprotobuf -lstdc++ -o testcase *cc
4. Run ./testcase

Actual result:

Segfault because of NULL dereference in protobuf.

Expected result:

Protobuf class members should be initialized properly (that's not a protobuf
bug, please read details).

Additional information:

I have done some additional tests and according to results segfault occurs only
when g++ version is greater then 4.5.1.
You can see detailed list of systems here:
https://github.com/Am1GO/gcc-testcase/blob/master/README.md
If you dislike external links, here is the list of systems which I've done
testing on:

Failed (segfault occurs):
Fedora 15 x86_64 (gcc 4.6.3)
Debian stable 7.8 x86_64 (gcc 4.7.2)
Fedora 20 x86_64 (gcc 4.8.3)
Fedora 21 x86_64 (gcc 4.9.2)
Debian unstable i586 (gcc 4.9.2)

Works fine (no segfault):
Ubuntu 10.04.3 LTS x86_64 (gcc 4.4.3)
Fedora 13 x86_64 (gcc 4.4.5)
Scientific Linux 6.6 i686 (gcc 4.4.7)
Fedora 14 x86_64 (gcc 4.5.1)
FreeBSD 10.1-RELEASE amd64 (clang 3.3)
FreeBSD 10.1-RELEASE amd64 (clang 3.4.2)
FreeBSD 10.1-RELEASE amd64 (clang 3.5.0)

Why do I think that it's not a protobuf bug?
Because I've taken protobuf packages from EPEL6 (protobuf 2.3) and installed
them to Fedora 20 which provides protobuf 2.5 and vice versa (i.e. protobuf 2.5
from Fedora installed on Scientific 6.6).
Segfault occurs on Fedora (gcc 4.8.3) with protobuf 2.3 and 2.5.
No segfault occurs on Scientific 6.6 (gcc 4.4.7) with protobuf 2.3 or 2.5.

Compiling with -fno-strict-aliasing -fwrapv makes no difference (Fedora 20
x86_64 with gcc 4.8.3).

There is some workaround available (I've tested it only on Fedora 20 x86_64
with gcc 4.8.3): compiling with -O1 or greater optimization enabled makes g++
to produce valid executable (no segfault occurs).

According to your summarized bug reporting instructions I need to include some
additional information so here it is:

    the exact version of GCC: 4.8.3 20140911 (Red Hat 4.8.3-7)

    the system type: x86_64-redhat-linux, Fedora release 20 (Heisenbug) with
all updates

    the options given when GCC was configured/built: --prefix=/usr
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap
--enable-shared --enable-threads=posix --enable-checking=release
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions
--enable-gnu-unique-object --enable-linker-build-id
--with-linker-hash-style=gnu
--enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin
--enable-initfini-array --enable-java-awt=gtk --disable-dssi
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre
--enable-libgcj-multifile --enable-java-maintainer-mode
--with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib
--with-isl=/builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/isl-install
--with-cloog=/builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/cloog-install
--with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux

    the complete command line that triggers the bug: g++ -g -lprotobuf -lstdc++
-o testcase *cc

    the compiler output (error messages, warnings, etc.): no messages except
unused argc and argv in main()

    the preprocessed file (*.i*) that triggers the bug, generated by adding
-save-temps to the complete compilation command, or, in the case of a bug
report for the GNAT front end, a complete set of source files: attached


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