[libcxx-commits] [libcxx] cd66970 - [libc++] Don't try to include <Block.h> when not available
David Zarzycki via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Apr 23 02:56:02 PDT 2020
Hi Louis:
FYI – This still isn't sufficient:
1) `REQUIRES: has-fblocks` and `__has_include(<Block.h>)` does not imply anything about whether the blocks runtime is available.
2) The blocks runtime is not built into libc/libsystem on non-Apple platforms, therefore it must be explicitly linked against but the test fails to do so.
I've worked around the build/test failure by removing the `libblocksruntime` and `libblocksruntime-devel` packages from my system, but not every non-Apple platform/user might be able to do this.
Dave
On Wed, Apr 22, 2020, at 3:22 PM, Louis Dionne via libcxx-commits wrote:
>
> Author: Louis Dionne
> Date: 2020-04-22T15:22:12-04:00
> New Revision: cd66970b371240d90e163d2020c1a42bb2b7e1b9
>
> URL:
> https://github.com/llvm/llvm-project/commit/cd66970b371240d90e163d2020c1a42bb2b7e1b9
> DIFF:
> https://github.com/llvm/llvm-project/commit/cd66970b371240d90e163d2020c1a42bb2b7e1b9.diff
>
> LOG: [libc++] Don't try to include <Block.h> when not available
>
> Added:
>
>
> Modified:
> libcxx/include/functional
> libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
>
> Removed:
>
>
>
> ################################################################################
> diff --git a/libcxx/include/functional b/libcxx/include/functional
> index f03ba8bb5541..360ca6e32005 100644
> --- a/libcxx/include/functional
> +++ b/libcxx/include/functional
> @@ -508,7 +508,7 @@ POLICY: For non-variadic implementations, the
> number of arguments is limited
>
> #include <__functional_base>
>
> -#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) &&
> !defined(_LIBCPP_HAS_OBJC_ARC)
> +#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) &&
> !defined(_LIBCPP_HAS_OBJC_ARC) && __has_include(<Block.h>)
> #include <Block.h>
> #endif
>
> @@ -2255,7 +2255,7 @@ template <class _Rp, class... _ArgTypes> class
> __policy_func<_Rp(_ArgTypes...)>
> #endif // _LIBCPP_NO_RTTI
> };
>
> -#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) &&
> !defined(_LIBCPP_HAS_OBJC_ARC)
> +#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) &&
> !defined(_LIBCPP_HAS_OBJC_ARC) && __has_include(<Block.h>)
>
> template<class _Rp1, class ..._ArgTypes1, class _Alloc, class _Rp,
> class ..._ArgTypes>
> class __func<_Rp1(^)(_ArgTypes1...), _Alloc, _Rp(_ArgTypes...)>
>
> diff --git
> a/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
> b/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
> index a608d42eb515..25b95465485e 100644
> --- a/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
> +++ b/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
> @@ -14,6 +14,8 @@
> // RUN: %{build} -fblocks
> // RUN: %{run}
>
> +#if __has_include(<Block.h>)
> +
> #include <functional>
> #include <cstdlib>
> #include <cassert>
> @@ -140,3 +142,9 @@ int main(int, char**)
>
> return 0;
> }
> +
> +#else
> +
> +int main() { }
> +
> +#endif
>
>
>
> _______________________________________________
> libcxx-commits mailing list
> libcxx-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-commits
>
More information about the libcxx-commits
mailing list