[Bug 274706] The C++ header 'execution' is missing

From: <bugzilla-noreply_at_freebsd.org>
Date: Fri, 27 Oct 2023 06:49:27 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=274706

--- Comment #4 from Mark Millard <marklmi26-fbsd@yahoo.com> ---
(In reply to Mark Millard from comment #3)

The file "execution" is not missing from 13.2-STABLE as of what I just checked.
It is in an expected sort of place:

# uname -apKU
FreeBSD generic 13.2-STABLE FreeBSD 13.2-STABLE stable/13-n256634-c4dfacd0b3c3
GENERIC arm64 aarch64 1302508 1302508

# find /usr/include -name '*execution*' -print
/usr/include/c++/v1/execution

The actual "problem" looks to be that other files are missing:

# grep -r _LIBCPP_HAS_PARALLEL_ALGORITHMS /usr/include
/usr/include/c++/v1/algorithm:#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) &&
_LIBCPP_STD_VER >= 17
/usr/include/c++/v1/execution:#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) &&
_LIBCPP_STD_VER >= 17
/usr/include/c++/v1/memory:#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) &&
_LIBCPP_STD_VER >= 17
/usr/include/c++/v1/numeric:#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) &&
_LIBCPP_STD_VER >= 17
/usr/include/c++/v1/__config_site:/* #undef _LIBCPP_HAS_PARALLEL_ALGORITHMS */

and has /usr/include/c++/v1/__config_site with:

#ifndef _LIBCPP___CONFIG_SITE
#define _LIBCPP___CONFIG_SITE

#define _LIBCPP_ABI_VERSION 1
#define _LIBCPP_ABI_NAMESPACE __1
/* #undef _LIBCPP_ABI_FORCE_ITANIUM */
/* #undef _LIBCPP_ABI_FORCE_MICROSOFT */
/* #undef _LIBCPP_HAS_NO_THREADS */
/* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
/* #undef _LIBCPP_HAS_MUSL_LIBC */
/* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */
/* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */
/* #undef _LIBCPP_HAS_THREAD_API_WIN32 */
/* #undef _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL */
/* #undef _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS */
#define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
/* #undef _LIBCPP_NO_VCRUNTIME */
/* #undef _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION */
/* #undef _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY */
/* #undef _LIBCPP_HAS_PARALLEL_ALGORITHMS */
/* #undef _LIBCPP_HAS_NO_RANDOM_DEVICE */
/* #undef _LIBCPP_HAS_NO_LOCALIZATION */
/* #undef _LIBCPP_HAS_NO_FSTREAM */
/* #undef _LIBCPP_HAS_NO_WIDE_CHARACTERS */
#define _LIBCPP_ENABLE_ASSERTIONS_DEFAULT 0
/* #undef _LIBCPP_ENABLE_DEBUG_MODE */

. . .

#endif // _LIBCPP___CONFIG_SITE

so _LIBCPP_HAS_PARALLEL_ALGORITHMS is not defined by default. That
in turn disables execution's content.

(That source looks to predate the -fexperimental-library
mechanism.)

# c++ -std=c++17 -D_LIBCPP_HAS_PARALLEL_ALGORITHMS execution_test.cpp 
In file included from execution_test.cpp:1:
In file included from /usr/include/c++/v1/mutex:192:
In file included from /usr/include/c++/v1/__mutex_base:20:
In file included from /usr/include/c++/v1/system_error:154:
In file included from /usr/include/c++/v1/string:576:
In file included from /usr/include/c++/v1/string_view:1025:
/usr/include/c++/v1/algorithm:1909:12: fatal error: '__pstl_algorithm' file not
found
#  include <__pstl_algorithm>
           ^~~~~~~~~~~~~~~~~~
1 error generated.

# find /usr/include -name '*pstl*' -print
# 

But:

# grep -r pstl /usr/include/c++/v1/
/usr/include/c++/v1/algorithm:#  include <__pstl_algorithm>
/usr/include/c++/v1/execution:#   include <__pstl_execution>
/usr/include/c++/v1/memory:#   include <__pstl_memory>
/usr/include/c++/v1/numeric:#   include <__pstl_numeric>

So it is the __pstl_* material that is missing, not execution itself.

I've not checked, but it may be that the c++ language was updated
to LLVM16 without updating libc++ to also be based on LLVM16's
assoicated libc++ source.

I will note that:

# uname -apKU
FreeBSD CA72-16Gp-ZFS 15.0-CURRENT FreeBSD 15.0-CURRENT #120
main-n266130-d521abdff236-dirty: Tue Oct 24 18:26:23 PDT 2023    
root@CA72-16Gp-ZFS:/usr/obj/BUILDs/main-CA72-nodbg-clang/usr/main-src/arm64.aarch64/sys/GENERIC-NODBG-CA72
arm64 aarch64 1500002 1500002

has the same basic status:

# find /usr/include -name '*pstl*' -print
#

# grep -r pstl /usr/include/c++/v1/
/usr/include/c++/v1/numeric:#   include <__pstl_numeric>
/usr/include/c++/v1/memory:#   include <__pstl_memory>
/usr/include/c++/v1/algorithm:#  include <__pstl_algorithm>
/usr/include/c++/v1/execution:#   include <__pstl_execution>

-- 
You are receiving this mail because:
You are the assignee for the bug.