gcc

libgcc-s1 and libstdc++6 depend on broken libtbb2 package

Bug #1933775 reported by Kip Warner
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gcc
In Progress
Medium
tbb (Ubuntu)
New
Undecided
Unassigned

Bug Description

The gcc-11 source package produces libgcc-s1 and (I think?) libstdc++6. Both of these binary packages on Hirsute depend on libtbb2 version 2020.3-1. The latter contains deprecated APIs that create #pragma generated warnings whenever <execution> is included.

See upstream for discussion:

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

Revision history for this message
In , Kip Warner (kip) wrote :

I've managed to reproduce this issue on two different machines, one amd64 and the other ppc64le. Both were using g++-11 (Ubuntu 11.1.0-1ubuntu1~21.04) 11.1.0.

Here is a minimal:

#include <algorithm>
#include <execution>

using namespace std;

int main()
{
    vector<long int> Container(3'000'000);
    iota(begin(Container), end(Container), 1);

    sort(execution::par, begin(Container), end(Container));

    return 0;
}

Compiling raises the following pragma in header generated warning:

$ g++-11 test.cpp -o test -Wall -Werror -std=c++17 -ltbb && ./test
In file included from /usr/include/c++/11/pstl/parallel_backend_tbb.h:26,
                 from /usr/include/c++/11/pstl/parallel_backend.h:20,
                 from /usr/include/c++/11/pstl/algorithm_impl.h:22,
                 from /usr/include/c++/11/pstl/glue_execution_defs.h:50,
                 from /usr/include/c++/11/execution:32,
                 from test.cpp:4:
/usr/include/tbb/task.h:21:139: note: ‘#pragma message: TBB Warning: tbb/task.h is deprecated. For details, please see Deprecated Features appendix in the TBB reference manual.’
   21 | ("TBB Warning: tbb/task.h is deprecated. For details, please see Deprecated Features appendix in the TBB reference manual.")
      | ^

Compiling again with #define TBB_SUPPRESS_DEPRECATED_MESSAGES 1 prepended to the beginning and the warning disappears.

This appears to have crept in some how with the 11 series. The <execution> header is indirectly including some deprecated Intel header from the TBB library.

Revision history for this message
In , Kip Warner (kip) wrote :

Suggestion: Maybe a unit test that includes all the standard STL headers, does nothing with them, and that's expected to emit no warnings would mitigate problems like this occurring in the future.

Revision history for this message
In , Pinskia (pinskia) wrote :

tbb/task.h just got deprecated last year and after parallel_backend_tbb.h was added to GCC.

https://github.com/oneapi-src/oneTBB/issues/243

It depends on the version of TBB that is installed really. Looks like Ubuntu 11.1.0 is using a much newer version. You really should file a bug with Ubuntu about this issue since you are getting both GCC and TBB from them. We won't fixing Ubuntu's compiler even with this bug filed by the way.

Revision history for this message
In , Kip Warner (kip) wrote :

Thanks Andrew. I've opened an issue downstream:

https://bugs.launchpad.net/gcc/+bug/1933775

Changed in gcc:
importance: Unknown → Medium
status: Unknown → Confirmed
Revision history for this message
In , Redi (redi) wrote :

<execution> requires TBB, as documented:
https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017

"Note 3: The Parallel Algorithms have an external dependency on Intel TBB 2018 or later. If the <execution> header is included then -ltbb must be used to link to TBB."

If you use the parallel algos (or just include their headers) then the TBB headers are included. That's by design, they don't work otherwise. We can't do anythign about the fact that Intel deprecated their own API shortly after using contributing the PSTL headers to GCC, which depend on that API.

Revision history for this message
In , Matthias Klose (doko) wrote :

No, the gcc packages don't depend on any tbb package. Probably tbb needs an update to a new upstream version in the distro.

affects: gcc-11 (Ubuntu) → tbb (Ubuntu)
Revision history for this message
Matthias Klose (doko) wrote :

No, see the upstream issue. A new tbb upstream version is needed.

tags: added: rls-ii-incoming
removed: deprecated execution gcc intel libstdc++ pragma tbb warning
Revision history for this message
Matthias Klose (doko) wrote :

No gcc package depends on libtbb2

Revision history for this message
In , Redi (redi) wrote :

There's no easy solution. Intel contributed the PSTL headers with a dependency on TBB task.h header, then deprecated that header in a later TBB release. You need to either use an older TBB, or suppress the warning.

There is a plan to add an OpenMP backend to PSTL, which will remove the TBB dependency, but it's not ready yet.

Revision history for this message
In , Pilarlatiesa (pilarlatiesa) wrote :

This appears to be fixed upstream: https://reviews.llvm.org/D87380

Revision history for this message
In , Redi (redi) wrote :

Tom, it looks like that fix landed upstream after our last sync. Should we use it?

Revision history for this message
In , Rodgertq (rodgertq) wrote :

Yes (I already reviewed it when it arrived upstream). It is probably also safe to backport to GCC-11 since there's no ABI or ABI stability concerns. I will have a go at applying *just* this patch (I don't want to commit to trying a full rebase against upstream at this point).

Changed in gcc:
status: Confirmed → In Progress
Revision history for this message
In , Pilarlatiesa (pilarlatiesa) wrote :

I believe this was fixed for 11.2

Revision history for this message
In , Redi (redi) wrote :

Yes, it was fixed by r11-4187 but the problem is still present on the gcc-10 branch.

Revision history for this message
In , Hicham-8 (hicham-8) wrote :

I see this warning still in g++ (GCC) 12.2.1 20220819 (Red Hat 12.2.1-2) with tbb-2020.3-9.fc35.x86_64

In file included from /usr/include/c++/12/pstl/parallel_backend_tbb.h:26,
                 from /usr/include/c++/12/pstl/parallel_backend.h:20,
                 from /usr/include/c++/12/pstl/algorithm_impl.h:22,
                 from /usr/include/c++/12/pstl/glue_execution_defs.h:50,
                 from /usr/include/c++/12/execution:32,
                 from 4.cpp:8:
/usr/include/tbb/task.h:21:139: note: ‘#pragma message: TBB Warning: tbb/task.h is deprecated. For details, please see Deprecated Features appendix in the TBB reference manual.’
   21 | #pragma message("TBB Warning: tbb/task.h is deprecated. For details, please see Deprecated Features appendix in the TBB reference manual.")

Revision history for this message
In , Kerukuro (kerukuro) wrote :

Yes, this issue is not fixed.

Revision history for this message
In , Redi (redi) wrote :

N.B. you can use -DTBB_SUPPRESS_DEPRECATED_MESSAGES=1 to suppress the warning.

Revision history for this message
In , Redi (redi) wrote :

(In reply to Jonathan Wakely from comment #11)
> Yes, it was fixed by r11-4187 but the problem is still present on the gcc-10
> branch.

I think that commit simply makes it possible to use oneTBB, which doesn't give a warning. But if you use TBB 2020.3 or older, then you still get a warning.

Revision history for this message
In , Redi (redi) wrote :

Maybe we could do something like this:

--- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h
+++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
@@ -15,6 +15,11 @@

 #include "parallel_backend_utils.h"

+#ifndef TBB_SUPPRESS_DEPRECATED_MESSAGES
+# define TBB_SUPPRESS_DEPRECATED_MESSAGES 1
+# define _GLIBCXX_UNDEF_SUPPRESS
+#endif
+
 // Bring in minimal required subset of Intel TBB
 #include <tbb/blocked_range.h>
 #include <tbb/parallel_for.h>
@@ -25,6 +30,11 @@
 #include <tbb/tbb_allocator.h>
 #include <tbb/task.h>

+#ifdef _GLIBCXX_UNDEF_SUPPRESS
+# undef TBB_SUPPRESS_DEPRECATED_MESSAGES
+# undef _GLIBCXX_UNDEF_SUPPRESS
+#endif
+
 #if TBB_INTERFACE_VERSION < 10000
 # error Intel(R) Threading Building Blocks 2018 is required; older versions are not supported.
 #endif

Revision history for this message
In , Cvs-commit (cvs-commit) wrote :

The master branch has been updated by Jonathan Wakely <email address hidden>:

https://gcc.gnu.org/g:c608b57f77a47179899666940c3b8b6a2e5435b2

commit r14-9550-gc608b57f77a47179899666940c3b8b6a2e5435b2
Author: Jonathan Wakely <email address hidden>
Date: Thu Feb 29 17:13:49 2024 +0000

    libstdc++: Suppress deprecation messages from <tbb/task.h> [PR101228]

    libstdc++-v3/ChangeLog:

            PR libstdc++/101228
            * include/pstl/parallel_backend_tbb.h (TBB_SUPPRESS_DEPRECATED_MESSAGES):
            Define before including <tbb/task.h> then undef afterwards.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.