[cfe-dev] Unexpected check-libcxx failures on FreeBSD
Krzysztof Parzyszek via cfe-dev
cfe-dev at lists.llvm.org
Sat Oct 8 06:44:34 PDT 2016
This patch works very well. The infinite cleverness delivers again! :)
There are still some failures left in check-libcxx, but they seem
unrelated, except one:
/usr/bin/CC -o
/w/bld/org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/Output/trivial_copy_move.pass.cpp.o
-x c++
/w/src/llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
-c -v -Werror=thread-safety -std=c++1z -nostdinc++ -include
/w/src/llvm.org/projects/libcxx/test/support/nasty_macros.hpp
-I/w/src/llvm.org/projects/libcxx/include
-I/w/src/llvm.org/projects/libcxx/test/support
-DLIBCXX_FILESYSTEM_STATIC_TEST_ROOT="/w/src/llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env"
-DLIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT="/w/bld/org/projects/libcxx/test/filesystem/Output/dynamic_env"
-DLIBCXX_FILESYSTEM_DYNAMIC_TEST_HELPER="/usr/local/bin/python2.7
/w/src/llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py"
-c
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on
LLVM 3.8.0)
Target: x86_64-unknown-freebsd11.0
Thread model: posix
InstalledDir: /usr/bin
"/usr/bin/c++" -cc1 -triple x86_64-unknown-freebsd11.0 -emit-obj
-mrelax-all -disable-free -disable-llvm-verifier -main-file-name
trivial_copy_move.pass.cpp -mrelocation-model static -mthread-model
posix -mdisable-fp-elim -masm-verbose -mconstructor-aliases
-munwind-tables -target-cpu x86-64 -v -dwarf-column-info
-debugger-tuning=gdb -coverage-file
/w/bld/org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/Output/trivial_copy_move.pass.cpp.o
-nostdinc++ -resource-dir /usr/bin/../lib/clang/3.8.0 -include
/w/src/llvm.org/projects/libcxx/test/support/nasty_macros.hpp -I
/w/src/llvm.org/projects/libcxx/include -I
/w/src/llvm.org/projects/libcxx/test/support -D
LIBCXX_FILESYSTEM_STATIC_TEST_ROOT=/w/src/llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env
-D
LIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT=/w/bld/org/projects/libcxx/test/filesystem/Output/dynamic_env
-D LIBCXX_FILESYSTEM_DYNAMIC_TEST_HELPER=/usr/local/bin/python2.7
/w/src/llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py
-Werror=thread-safety -std=c++1z -fdeprecated-macro
-fdebug-compilation-dir /w/src/llvm.org -ferror-limit 19
-fmessage-length 210 -fobjc-runtime=gnustep -fcxx-exceptions
-fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o
/w/bld/org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/Output/trivial_copy_move.pass.cpp.o
-x c++
/w/src/llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
clang -cc1 version 3.8.0 based upon LLVM 3.8.0 default target
x86_64-unknown-freebsd11.0
#include "..." search starts here:
#include <...> search starts here:
/w/src/llvm.org/projects/libcxx/include
/w/src/llvm.org/projects/libcxx/test/support
/usr/bin/../lib/clang/3.8.0/include
/usr/include
End of search list.
/w/src/llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp:35:9:
error: static_assert failed ""
static_assert(std::is_trivially_copy_constructible<P>::value, "");
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/w/src/llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp:40:9:
error: static_assert failed ""
static_assert(std::is_trivially_move_constructible<P>::value, "");
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/w/src/llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp:47:9:
error: static_assert failed ""
static_assert(std::is_trivially_move_constructible<P1>::value, "");
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 errors generated.
-Krzysztof
On 10/7/2016 9:31 PM, Eric Fiselier wrote:
> In my infinite cleverness I think I found a solution which gives both
> constexpr and non-trivial constructors.
>
> Please take a look at https://reviews.llvm.org/D25389.
>
> /Eric
>
> On Fri, Oct 7, 2016 at 8:11 PM, Eric Fiselier <eric at efcs.ca
> <mailto:eric at efcs.ca>> wrote:
>
> On second thought applying (A) might be ill-advised. Most of the
> pair tests still fail after applying it in constructs like
> "std::is_copy_constructible_v<std::pair<NonCopyable, int&&>>",
> except now instead of returning the wrong answer the traits cause
> hard compile errors and template barf.
>
> @Ed, David, and Dimitry The FreeBSD std::pair implementation is
> fundamentally broken, and there's not much I think I can do about
> it. Is there a timeline for making the ABI change in FreeBSD?
>
> /Eric
>
> On Fri, Oct 7, 2016 at 7:59 PM, Eric Fiselier <eric at efcs.ca
> <mailto:eric at efcs.ca>> wrote:
>
> > Does anyone know what the problem may be?
>
> FreeBSD ships std::pair with explicitly defined copy and move
> constructors as opposed to explicitly defaulted ones. Mistakenly
> these constructors have not been marked constexpr in C++14.
> FreeBSD provides these old constructors is because switching to
> defaulted copy/move constructors is an ABI break because it
> makes std::pair non-trivial and changes how it's passed to
> functions according to the Itanium ABI.
>
> Fixing this requires either (A) marking the fallback
> constructors constexpr in C++14, or (B) convincing FreeBSD to
> take the ABI break.
>
> The easiest and simplistic fix is (A). However my concern with
> (A) is that the fallback constructors don't SFINAE away if they
> are ill-formed. This means that applying constexpr to them could
> break existing code by causing the eager instantiation of the
> ill-formed constructors, instantiations that would not occur if
> the constructors were non-constexpr. For this reason I think fix
> (B) is more correct, and greatly preferable.
>
> Since we have plenty of time until the next release I'll go
> ahead and commit (A) for now, keeping my ear to the ground for
> breakage.
>
> /Eric
>
>
> On Fri, Oct 7, 2016 at 7:23 PM, Krzysztof Parzyszek via cfe-dev
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
> I'm running this on FreeBSD 11 (stable). It has clang-3.8.0
> as the system compiler. LLVM/Clang/et al. compiled without
> problems, but I'm seeing failures in check-libcxx. Example
> below.
>
> Does anyone know what the problem may be?
>
>
> clang version 4.0.0 (http://llvm.org/git/clang.git
> a85c03256cfc0812e268f5e0f1b804910e75e673)
> (http://llvm.org/git/llvm.git
> c95d4ff692323bde64fc8ef45e174b19450779af)
> Target: x86_64-unknown-freebsd11.0
> Thread model: posix
> InstalledDir: /w/c/org/bin
> "/w/c/org/bin/clang-4.0" -cc1 -triple
> x86_64-unknown-freebsd11.0 -emit-obj -mrelax-all
> -disable-free -main-file-name minmax_init_list_comp.pass.cpp
> -mrelocation-model static -mthread-model posix
> -mdisable-fp-elim -masm-verbose -mconstructor-aliases
> -munwind-tables -target-cpu x86-64 -v -v -dwarf-column-info
> -debugger-tuning=gdb -coverage-notes-file
> /w/bld/org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/Output/minmax_init_list_comp.pass.cpp.gcno
> -nostdinc++ -resource-dir /w/c/org/bin/../lib/clang/4.0.0
> -include
> /w/src/llvm.org/projects/libcxx/test/support/nasty_macros.hpp <http://llvm.org/projects/libcxx/test/support/nasty_macros.hpp>
> -I /w/src/llvm.org/projects/libcxx/include
> <http://llvm.org/projects/libcxx/include> -I
> /w/src/llvm.org/projects/libcxx/test/support
> <http://llvm.org/projects/libcxx/test/support> -D
> LIBCXX_FILESYSTEM_STATIC_TEST_ROOT=/w/src/llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env
> <http://llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env>
> -D
> LIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT=/w/bld/org/projects/libcxx/test/filesystem/Output/dynamic_env
> -D
> LIBCXX_FILESYSTEM_DYNAMIC_TEST_HELPER=/usr/local/bin/python2.7
> /w/src/llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py
> <http://llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py>
> -Werror=thread-safety -std=c++1z -fdeprecated-macro
> -fdebug-compilation-dir /w/src/llvm.org <http://llvm.org>
> -ferror-limit 19 -fmessage-length 210 -fobjc-runtime=gnustep
> -fcxx-exceptions -fexceptions -fdiagnostics-show-option
> -fcolor-diagnostics -o
> /w/bld/org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/Output/minmax_init_list_comp.pass.cpp.o
> -x c++
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp>
> clang -cc1 version 4.0.0 based upon LLVM 4.0.0svn default
> target x86_64-unknown-freebsd11.0
> #include "..." search starts here:
> #include <...> search starts here:
> /w/src/llvm.org/projects/libcxx/include
> <http://llvm.org/projects/libcxx/include>
> /w/src/llvm.org/projects/libcxx/test/support
> <http://llvm.org/projects/libcxx/test/support>
> /w/c/org/bin/../lib/clang/4.0.0/include
> /usr/include
> End of search list.
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:19
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:19>:
> error: static_assert expression is not an integral constant
> expression
> static_assert((std::minmax({1, 2, 3},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /w/src/llvm.org/projects/libcxx/include/algorithm:2823:12
> <http://llvm.org/projects/libcxx/include/algorithm:2823:12>:
> note: non-constexpr constructor 'pair' cannot be used in a
> constant expression
> return __result;
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:20
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:20>:
> note: in call to 'minmax({&{1, 2, 3}[0], 3}, {{}})'
> static_assert((std::minmax({1, 2, 3},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
> ^
> /w/src/llvm.org/projects/libcxx/include/utility:316:5
> <http://llvm.org/projects/libcxx/include/utility:316:5>:
> note: declared here
> pair(pair&& __p)
> _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:19
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:19>:
> error: static_assert expression is not an integral constant
> expression
> static_assert((std::minmax({1, 3, 2},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /w/src/llvm.org/projects/libcxx/include/algorithm:2823:12
> <http://llvm.org/projects/libcxx/include/algorithm:2823:12>:
> note: non-constexpr constructor 'pair' cannot be used in a
> constant expression
> return __result;
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:20
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:20>:
> note: in call to 'minmax({&{1, 3, 2}[0], 3}, {{}})'
> static_assert((std::minmax({1, 3, 2},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
> ^
> /w/src/llvm.org/projects/libcxx/include/utility:316:5
> <http://llvm.org/projects/libcxx/include/utility:316:5>:
> note: declared here
> pair(pair&& __p)
> _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:19
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:19>:
> error: static_assert expression is not an integral constant
> expression
> static_assert((std::minmax({2, 1, 3},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /w/src/llvm.org/projects/libcxx/include/algorithm:2823:12
> <http://llvm.org/projects/libcxx/include/algorithm:2823:12>:
> note: non-constexpr constructor 'pair' cannot be used in a
> constant expression
> return __result;
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:20
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:20>:
> note: in call to 'minmax({&{2, 1, 3}[0], 3}, {{}})'
> static_assert((std::minmax({2, 1, 3},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
> ^
> /w/src/llvm.org/projects/libcxx/include/utility:316:5
> <http://llvm.org/projects/libcxx/include/utility:316:5>:
> note: declared here
> pair(pair&& __p)
> _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:19
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:19>:
> error: static_assert expression is not an integral constant
> expression
> static_assert((std::minmax({2, 3, 1},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /w/src/llvm.org/projects/libcxx/include/algorithm:2823:12
> <http://llvm.org/projects/libcxx/include/algorithm:2823:12>:
> note: non-constexpr constructor 'pair' cannot be used in a
> constant expression
> return __result;
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:20
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:20>:
> note: in call to 'minmax({&{2, 3, 1}[0], 3}, {{}})'
> static_assert((std::minmax({2, 3, 1},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
> ^
> /w/src/llvm.org/projects/libcxx/include/utility:316:5
> <http://llvm.org/projects/libcxx/include/utility:316:5>:
> note: declared here
> pair(pair&& __p)
> _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:19
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:19>:
> error: static_assert expression is not an integral constant
> expression
> static_assert((std::minmax({3, 1, 2},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /w/src/llvm.org/projects/libcxx/include/algorithm:2823:12
> <http://llvm.org/projects/libcxx/include/algorithm:2823:12>:
> note: non-constexpr constructor 'pair' cannot be used in a
> constant expression
> return __result;
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:20
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:20>:
> note: in call to 'minmax({&{3, 1, 2}[0], 3}, {{}})'
> static_assert((std::minmax({3, 1, 2},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
> ^
> /w/src/llvm.org/projects/libcxx/include/utility:316:5
> <http://llvm.org/projects/libcxx/include/utility:316:5>:
> note: declared here
> pair(pair&& __p)
> _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:19
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:19>:
> error: static_assert expression is not an integral constant
> expression
> static_assert((std::minmax({3, 2, 1},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /w/src/llvm.org/projects/libcxx/include/algorithm:2823:12
> <http://llvm.org/projects/libcxx/include/algorithm:2823:12>:
> note: non-constexpr constructor 'pair' cannot be used in a
> constant expression
> return __result;
> ^
> /w/src/llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:20
> <http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:20>:
> note: in call to 'minmax({&{3, 2, 1}[0], 3}, {{}})'
> static_assert((std::minmax({3, 2, 1},
> std::greater<int>()) == std::pair<int, int>(3, 1)), "");
> ^
> /w/src/llvm.org/projects/libcxx/include/utility:316:5
> <http://llvm.org/projects/libcxx/include/utility:316:5>:
> note: declared here
> pair(pair&& __p)
> _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
> ^
> 6 errors generated.
>
>
> -Krzysztof
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>
>
>
>
More information about the cfe-dev
mailing list