public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "alvinhochun at gmail dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/108040] New: -fdevirtualize causes part of function to be missing in output
Date: Fri, 09 Dec 2022 22:01:22 +0000	[thread overview]
Message-ID: <bug-108040-4@http.gcc.gnu.org/bugzilla/> (raw)

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

            Bug ID: 108040
           Summary: -fdevirtualize causes part of function to be missing
                    in output
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: alvinhochun at gmail dot com
  Target Milestone: ---

Created attachment 54057
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54057&action=edit
preprocessed source file

Using MSYS2 UCRT64 GCC 12.2.0

$ g++ -v
Using built-in specs.
COLLECT_GCC=C:\msys64\ucrt64\bin\g++.exe
COLLECT_LTO_WRAPPER=C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-12.2.0/configure --prefix=/ucrt64
--with-local-prefix=/ucrt64/local --build=x86_64-w64-mingw32
--host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32
--with-native-system-header-dir=/ucrt64/include --libexe
cdir=/ucrt64/lib --enable-bootstrap --enable-checking=release
--with-arch=x86-64 --with-tune=generic
--enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,jit --enable-shared
--enable-static --enable-libatomic --enable-threads=po
six --enable-graphite --enable-fully-dynamic-string
--enable-libstdcxx-filesystem-ts --enable-libstdcxx-time
--disable-libstdcxx-pch --enable-lto --enable-libgomp --disable-multilib
--disable-rpath --disable-win32-registry --disa
ble-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib
--with-gmp=/ucrt64 --with-mpfr=/ucrt64 --with-mpc=/ucrt64 --with-isl=/ucrt64
--with-pkgversion='Rev6, Built by MSYS2 project' --with-bugurl=https://git
hub.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld
--disable-libstdcxx-debug --with-boot-ldflags=-static-libstdc++
--with-stage1-ldflags=-static-libstdc++
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (Rev6, Built by MSYS2 project)


I compiled the original source with the following commands:

$ g++ -DCATCH_CONFIG_COLOUR_ANSI -D_WIN32_WINNT=0x0602
-ID:/dev/mingw-winrt/cppwinrt/test
-ID:/dev/mingw-winrt/cppwinrt/test/../cppwinrt
-IC:/msys64/home/Alvin/cppwinrt_rel/test/cppwinrt -O2 -g -DNDEBUG
-fno-omit-frame-pointer -fdiagnostics-color=always -mcx16 -O1
-finline-functions -finline-small-functions -findirect-inlining
-fno-devirtualize -std=gnu++20 -MD -MT
test/test/CMakeFiles/test-out_params_bad.dir/out_params_bad.cpp.obj -MF
'test\test\CMakeFiles\test-out_params_bad.dir\out_params_bad.cpp.obj.d'
D:/dev/mingw-winrt/cppwinrt/test/test/out_params_bad.cpp -g0 -S -o ../good.s
-fverbose-asm -save-temps

$ g++ -DCATCH_CONFIG_COLOUR_ANSI -D_WIN32_WINNT=0x0602
-ID:/dev/mingw-winrt/cppwinrt/test
-ID:/dev/mingw-winrt/cppwinrt/test/../cppwinrt
-IC:/msys64/home/Alvin/cppwinrt_rel/test/cppwinrt -O2 -g -DNDEBUG
-fno-omit-frame-pointer -fdiagnostics-color=always -mcx16 -O1
-finline-functions -finline-small-functions -findirect-inlining
-fno-devirtualize -std=gnu++20 -MD -MT
test/test/CMakeFiles/test-out_params_bad.dir/out_params_bad.cpp.obj -MF
'test\test\CMakeFiles\test-out_params_bad.dir\out_params_bad.cpp.obj.d'
D:/dev/mingw-winrt/cppwinrt/test/test/out_params_bad.cpp -g0 -S -o ../bad.s
-fdevirtualize -fverbose-asm -save-temps


I then compared `good.s` and `bad.s` and checked inside the function `static
void C_A_T_C_H_T_E_S_T_0()` (_ZL19C_A_T_C_H_T_E_S_T_0v). At around
`D:/dev/mingw-winrt/cppwinrt/test/test/out_params_bad.cpp:211`, `bad.s` is
missing a large chunk of the function (all the way to the function epilogue)
compared to `good.s`.

The only difference is that `bad.s` is compiled with `-fdevirtualize`.

Attached the preprocessed source with gzip compression.

             reply	other threads:[~2022-12-09 22:01 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-09 22:01 alvinhochun at gmail dot com [this message]
2023-04-28 11:29 ` [Bug ipa/108040] " jamborm at gcc dot gnu.org
2023-04-28 12:35 ` alvin at alvinhc dot com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-108040-4@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).