Skip to content

Commit

Permalink
[PATCH] libstdc++: Mark non-exported function always_inline
Browse files Browse the repository at this point in the history
  • Loading branch information
smuzaffar committed Aug 25, 2022
1 parent 180a2a3 commit bc01287
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
41 changes: 41 additions & 0 deletions gcc-03af8492bee6243a9d10e78fea1a3e423bd5f9cd.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
From 03af8492bee6243a9d10e78fea1a3e423bd5f9cd Mon Sep 17 00:00:00 2001
From: Jonathan Wakely <jwakely@redhat.com>
Date: Fri, 27 May 2022 12:43:18 +0100
Subject: [PATCH] libstdc++: Mark non-exported function always_inline
[PR105671]

This new function was added for gcc 11.1 but is not exported from the
shared library. Depending on inlining decisions, its callers might get
inlined but an external definition be needed for this function. That
then fails to link.

Since we can't add the export to the gcc-11 release branch now, mark it
always_inline. We can consider exporting it for gcc-13 if/when we bump
the shared library version (and maybe also for gcc-12 which is currently
at the same version as trunk). For now, the attribute will solve the
problem on all affected branches. The function is small enough that
force-inlining it shouldn't cause problems.

libstdc++-v3/ChangeLog:

PR libstdc++/105671
* include/std/sstream (basic_stringbuf::_M_high_mark): Add
always_inline attribute.

(cherry picked from commit de57440858591a88e8fd7ba2505ca54546c86021)
---
libstdc++-v3/include/std/sstream | 1 +
1 file changed, 1 insertion(+)

diff --git a/libstdc++-v3/include/std/sstream b/libstdc++-v3/include/std/sstream
index f21664100ab8..56555ecd98a1 100644
--- a/libstdc++-v3/include/std/sstream
+++ b/libstdc++-v3/include/std/sstream
@@ -425,6 +425,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
// This might not be the same character as _M_string.end() because
// basic_stringbuf::overflow might have written to unused capacity
// in _M_string without updating its length.
+ __attribute__((__always_inline__))
char_type*
_M_high_mark() const _GLIBCXX_NOEXCEPT
{
2 changes: 2 additions & 0 deletions gcc.spec
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,12 @@ Source11: https://github.com/westes/flex/releases/download/v%{flexVersion}/flex-

Patch0: gcc-flex-nonfull-path-m4
Patch1: gcc-flex-disable-doc
Patch2: gcc-03af8492bee6243a9d10e78fea1a3e423bd5f9cd

%prep

%setup -T -b 0 -n %{moduleName}
%patch2 -p1

# Filter out private stuff from RPM requires headers.
cat << \EOF > %{name}-req
Expand Down

0 comments on commit bc01287

Please sign in to comment.