Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

140 failing unit tests on develop #386

Closed
bebuch opened this issue Feb 20, 2018 · 6 comments
Closed

140 failing unit tests on develop #386

bebuch opened this issue Feb 20, 2018 · 6 comments

Comments

@bebuch
Copy link
Contributor

bebuch commented Feb 20, 2018

With both clang and GCC I have 140 failing unit tests on the develop branch. Its always somthing like:

    "g++-6"   -fPIC -m64 -O0 -fno-inline -Wall -g -std=gnu++1z -DBOOST_ALL_NO_LIB=1  -I"../../.." -I"../include" -I"_include" -c -o "../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~at.test/gcc-6/debug/ext/boost/fusion/deque/auto/at.o" "ext/boost/fusion/deque/auto/at.cpp"

...failed gcc.compile.c++ ../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~at.test/gcc-6/debug/ext/boost/fusion/deque/auto/at.o...
...skipped <p../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~at.test/gcc-6/debug>test~ext~boost~fusion~deque~auto~at for lack of <p../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~at.test/gcc-6/debug>ext/boost/fusion/deque/auto/at.o...
...skipped <p../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~at.test/gcc-6/debug>test~ext~boost~fusion~deque~auto~at.run for lack of <p../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~at.test/gcc-6/debug>test~ext~boost~fusion~deque~auto~at...
gcc.compile.c++ ../../../bin.v2/libs/hana/test/test~ext~boost~fusion~deque~auto~any_of.test/gcc-6/debug/ext/boost/fusion/deque/auto/any_of.o
In file included from ../../../boost/type_traits/is_convertible.hpp:20:0,
                 from ../../../boost/type_traits/is_empty.hpp:12,
                 from ../../../boost/mpl/empty_base.hpp:23,
                 from ../../../boost/fusion/sequence/intrinsic/at.hpp:15,
                 from ../../../boost/hana/ext/boost/fusion/detail/common.hpp:22,
                 from ../../../boost/hana/ext/boost/fusion/deque.hpp:16,
                 from ext/boost/fusion/deque/auto/_specs.hpp:8,
                 from ext/boost/fusion/deque/auto/any_of.cpp:5:
../../../boost/type_traits/is_convertible.hpp: In instantiation of ‘struct boost::is_convertible<boost::hana::ext::boost::fusion::deque_tag, boost::fusion::detail::from_sequence_convertible_type>’:
../../../boost/mpl/aux_/nested_type_wknd.hpp:26:31:   required from ‘struct boost::mpl::aux::nested_type_wknd<boost::is_convertible<boost::hana::ext::boost::fusion::deque_tag, boost::fusion::detail::from_sequence_convertible_type> >’
../../../boost/mpl/not.hpp:39:8:   required from ‘struct boost::mpl::not_<boost::is_convertible<boost::hana::ext::boost::fusion::deque_tag, boost::fusion::detail::from_sequence_convertible_type> >’
../../../boost/mpl/aux_/nested_type_wknd.hpp:26:31:   required from ‘struct boost::mpl::aux::nested_type_wknd<boost::mpl::not_<boost::is_convertible<boost::hana::ext::boost::fusion::deque_tag, boost::fusion::detail::from_sequence_convertible_type> > >’
../../../boost/mpl/aux_/preprocessed/gcc/and.hpp:48:8:   required from ‘struct boost::mpl::and_<boost::mpl::not_<boost::is_convertible<boost::hana::ext::boost::fusion::deque_tag, boost::fusion::detail::from_sequence_convertible_type> >, boost::mpl::is_sequence<boost::hana::ext::boost::fusion::deque_tag>, mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> >’
../../../boost/fusion/support/detail/is_mpl_sequence.hpp:21:12:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
../../../boost/fusion/support/tag_of.hpp:52:16:   required from ‘struct boost::fusion::detail::tag_of_impl<boost::hana::ext::boost::fusion::deque_tag, void>’
../../../boost/fusion/support/tag_of.hpp:70:16:   required from ‘struct boost::fusion::traits::tag_of<boost::hana::ext::boost::fusion::deque_tag, void>’
../../../boost/hana/core/tag_of.hpp:22:12:   required from ‘struct boost::hana::tag_of<boost::hana::ext::boost::fusion::deque_tag, void>’
../../../boost/hana/concept/searchable.hpp:27:13:   required from ‘struct boost::hana::Searchable<boost::hana::ext::boost::fusion::deque_tag>’
../../../boost/hana/any_of.hpp:41:10:   required from ‘constexpr auto boost::hana::any_of_t::operator()(Xs&&, Pred&&) const [with Xs = boost::fusion::deque<>; Pred = <lambda()>::<lambda(auto:2)>]’
_include/auto/any_of.hpp:22:5:   required from here
../../../boost/static_assert.hpp:31:45: error: static assertion failed: From argument type to is_convertible must be a complete type
 #     define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
                                             ^
../../../boost/type_traits/is_convertible.hpp:484:4: note: in expansion of macro ‘BOOST_STATIC_ASSERT_MSG’
    BOOST_STATIC_ASSERT_MSG(boost::is_complete<From>::value || boost::is_void<From>::value || boost::is_array<From>::value, "From argument type to is_convertible must be a complete type");
    ^~~~~~~~~~~~~~~~~~~~~~~

The From is a Hana-Tag struct (boost::hana::ext::boost::fusion::deque_tag in this case) which is not complete. (BTW: Are Hana-Tags required to be compete? The documentation does not mention this explicitly, but in the examples they are not.)

@ldionne
Copy link
Member

ldionne commented Feb 21, 2018

Hana tags should not be required to be complete. I can't reproduce locally using the classic CMake workflow and Boost 1.65.1. Also, Travis CI does not report any failure. Can you please provide a minimal complete example of how you're setting up Hana to reproduce?

@bebuch
Copy link
Contributor Author

bebuch commented Feb 21, 2018

I used bjam in the test directory to compile the tests.

$ bjam toolset=gcc
$ bjam toolset=clang

I can reproduce it with a newly checked-out repository:

git clone --recursive "https://github.com/boostorg/boost.git" modular-boost
cd modular-boost
git checkout develop
git submodule foreach git checkout develop
./bootstrap.sh
./b2 headers
PATH=$(pwd):$PATH
cd libs/hana/test/
bjam toolset=gcc -j 8

@ldionne
Copy link
Member

ldionne commented Feb 27, 2018

I could not reproduce locally, even with your instructions, but now I just saw it fail on Travis: https://travis-ci.org/boostorg/hana/jobs/346757876. I'll look into that.

@ldionne
Copy link
Member

ldionne commented Feb 27, 2018

I believe this is a Fusion bug. I am able to reproduce with this:

#include <boost/fusion/include/tag_of.hpp>
struct incomplete;
using X = ::boost::fusion::traits::tag_of<incomplete>::type

int main() { }

My guess is that Fusion used to accept incomplete types in tag_of, but they don't anymore.

@ldionne
Copy link
Member

ldionne commented Feb 27, 2018

Ok, I believe this started happening in boostorg/type_traits@ac35139. Presumably, fusion::tag_of using a type trait that requires the input type to be complete, but it does not check for that (and it doesn't document that the input of tag_of must be complete AFAICT).

@ldionne
Copy link
Member

ldionne commented Mar 3, 2018

This should have been fixed in Fusion now. Thanks a lot for reporting, this could have been a big breakage.

@ldionne ldionne closed this as completed Mar 3, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants