[Bug c++/89937] For example code, which is valid as either C or C++, optimization seems much better for C
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Apr 2 22:01:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89937
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This is because of the way inline have different semantics between the two
langauges.
If I change TSFastDbg to be static instead of just inline, then the code
emitted is the same.
In the case of C, since TSFastDbg is not inlined, there exists an out of line
version of it in a different TU.
In the case of C++, TSFastDbg has vague linkage, there for will be emitted but
in a comdat section.
The options you have turned on for godbolt, hide this fact; turning them off
you get:
.Ltext0:
.section
.text._Z9TSFastDbgP14TSFastDbgCntl_PKcz,"axG",@progbits,_Z9TSFastDbgP14TSFastDbgCntl_PKcz,comdat
.p2align 4,,15
.weak _Z9TSFastDbgP14TSFastDbgCntl_PKcz
.type _Z9TSFastDbgP14TSFastDbgCntl_PKcz, @function
_Z9TSFastDbgP14TSFastDbgCntl_PKcz:
See how that is a comdat section.
More information about the Gcc-bugs
mailing list