[Bug c++/64875] -Winline does not report C++ methods
egallager at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Aug 22 20:01:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64875
Eric Gallager <egallager at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2017-08-22
CC| |egallager at gcc dot gnu.org
Assignee|unassigned at gcc dot gnu.org |daniel.gutson at intel dot com
Ever confirmed|0 |1
--- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Daniel Gutson from comment #0)
> The following code misses the warning:
>
> #include <iostream>
>
> struct PP
> {
> inline void m();
> };
>
> int main()
> {
> PP pp;
> pp.m();
> }
>
> inline void PP::m()
> {
> std::cout << "hola" << std::endl;
> }
>
> Invoke:
> g++ -Wall -Wextra -pedantic -ggdb3 -std=c++11 -Winline winline.cpp
> No warnings emitted.
>
> However:
>
> objdump -dC ./a.out |grep "PP"
> 40086c: e8 59 00 00 00 callq 4008ca <PP::m()>
> 00000000004008ca <PP::m()>:
>
> If no one is available, assign this to me (though I'm not sure when I will
> have time to address this).
OK.
(In reply to Daniel Gutson from comment #2)
> inline is as useful in c++ as in C regardless of ODR or any other reason but
> its original purpose: performance. I want to know when my hint is not honored
> which is the exact intent of this warning.
If you use an optimization flag the 'inline' is honored:
$ /usr/local/bin/g++ -Wall -Wextra -pedantic -ggdb3 -std=c++11 -Winline -o
64975_O0.exe 64975.cc
$ objdump -dC ./64975_O0.exe | grep "PP"
1e88: e8 b3 11 00 00 call 3040 <_ZN2PP1mEv$stub>
00001f0e <PP::m()>:
00003040 <_ZN2PP1mEv$stub>:
$ /usr/local/bin/g++ -Wall -Wextra -pedantic -ggdb3 -std=c++11 -Winline -O1 -o
64975_O1.exe 64975.cc
$ objdump -dC ./64975_O1.exe | grep "PP"
So maybe mention optimizing in the warning if you add one.
More information about the Gcc-bugs
mailing list