https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69657
Bug ID: 69657 Summary: [6 Regression] abs() not inlined after including math.h Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: wdijkstr at arm dot com Target Milestone: --- Since a recent C++ header change abs() no longer gets inlined if we include an unrelated header before it. #include <math.h> #include <cstdlib> int wrap_abs (int x) { return abs (x) + std::abs(x); } Until recently GCC6 with -O2 -S produced for AArch64: _Z8wrap_absi: cmp w0, wzr csneg w0, w0, w0, ge lsl w0, w0, 1 ret However trunk GCC6 now emits: _Z8wrap_absi: stp x29, x30, [sp, -16]! add x29, sp, 0 bl abs lsl w0, w0, 1 ldp x29, x30, [sp], 16 This may result in significant slowdowns as it adds a call and PLT indirection to execute a 3-instruction function. There might be other builtin functions that are affected in a similar way.