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)
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
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers

Remote bug watches

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