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

            Bug ID: 71260
           Summary: Crash in DLL compiled with -fipa-pure-const and -flto
                    [mingw32]
           Product: gcc
           Version: 4.9.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: slawomir.czarko at dev dot policat.net
  Target Milestone: ---

Created attachment 38553
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38553&action=edit
DLL code

Description of problem:

Function in DLL compiled with -O3 and -flto crashes due to page fault.

Crash does not happen in either of these cases:
* -fno-ipa-pure-const is added to compiler options,
* inlining is disabled,
* optimization level is reduced to O2,
* various changes are made to the code, for example member variable dummy is
removed from struct E

During debugging I saw that call to a.c1.at( 0 ) uses invalid address of
variable a and that causes the crash.

Options -Wall -Wextra do not show any problems.
Adding -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations has no
effect.

Version-Release number of selected component (if applicable):
mingw32-gcc-c++-4.9.3-1.el7.x86_64

How reproducible:
100%

Steps to Reproduce:
1. Compile and link DLL:
i686-w64-mingw32-g++ -std=c++11 -O3 -pipe -m32 -flto -fpreprocessed -c crash.ii
-o dll.o
i686-w64-mingw32-g++ -std=c++11 -O3 -pipe -m32 -flto -static
-Wl,--out-implib,libdll.lib dll.o -Wl,-Bstatic -shared -o dll.dll

2. Compile and link program:
i686-w64-mingw32-g++ -std=c++11 -fpreprocessed -o a32.o -c a.ii
i686-w64-mingw32-g++ -std=c++11 -static -Wl,-Bdynamic -L. -ldll -o a32.exe
a32.o -Wl,-Bstatic

3. Run program (wine on Fedora):
WINEDEBUG=fixme-all wine32 a32.exe

Actual results:
Program crashes due to page fault.

Expected results:
No crash.

Additional info:
64-bit build does not have this problem.

Reply via email to