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

            Bug ID: 90757
           Summary: inlining skips function parameter initialization
           Product: gcc
           Version: 9.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jens.georg at desy dot de
  Target Milestone: ---

Created attachment 46454
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46454&action=edit
sample code showing inlining issue

When compiling the attached code with -O3 -Wuninitialized, we get the following
warning: 

msk_jenkins@3db9ec2f15ea:~$ g++ -std=c++17 -O3 -Wuninitialized
aliasing_inlining.cc                            
aliasing_inlining.cc: In function 'int main()':
aliasing_inlining.cc:8:15: warning: 'raw' is used uninitialized in this
function [-Wuninitialized]
    8 |         float genericRepresentation = *(reinterpret_cast<const
float*>(&(*it)));
      |               ^~~~~~~~~~~~~~~~~~~~~
aliasing_inlining.cc:15:5: note: 'raw' was declared here
   15 | int main()
      |     ^~~~

And running the code will result in "0"

msk_jenkins@3db9ec2f15ea:~$ ./a.out 
0

With -fno-inline-small-functions, the code returns 3.25 as expected:
msk_jenkins@3db9ec2f15ea:~$ g++ -std=c++17 -O3 -Wuninitialized
aliasing_inlining.cc -fno-inline-small-functions
msk_jenkins@3db9ec2f15ea:~$ ./a.out 
3.25

The code compiles and runs also fine if the for loop is omitted.

The code is a stripped down version of out template code that is also supposed
to handle STL containers and iterators, therefore there's a lot of probably
unnessary indirection in there. 

It compiles fine on GCC 5.4, 7.1 and 8.1

GCC is from SUSE tumbleweed:
msk_jenkins@3db9ec2f15ea:~$ gcc --version

gcc (SUSE Linux) 9.1.1 20190520 [gcc-9-branch revision 271396]
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Reply via email to