clang compile failure on FreeBSD
GoogleCodeExporter opened this issue · comments
Google Code Exporter commented
What steps will reproduce the problem?
1. build package for freebsd ports
What is the expected output? What do you see instead?
build success
What version of the product are you using? On what operating system?
google-sparsehash-2.0.2
FreeBSD 11.0-CURRENT FreeBSD 11.0-CURRENT
FreeBSD 10.0-ALPHA
Please provide any additional information below.
Full build log here:
http://people.freebsd.org/~sbruno/google-sparsehash-2.0.2.log
Original issue reported on code.google.com by seanwbr...@gmail.com
on 18 Oct 2013 at 4:15
Google Code Exporter commented
Seems to work fine with gcc, but clang is definitely not happy. Since this
uses tr1 things, does this code need a C11 refresh or something?
Original comment by DJFrankN...@gmail.com
on 29 Oct 2013 at 9:36
Google Code Exporter commented
I'm getting compile error on FreeBSD 10 release with clang 3.3 too ( have you
solved the problem yet? ) :
./src/sparsehash/internal/sparsehashtable.h:161:8: note: candidate constructor
(the implicit copy constructor) not viable: requires 1
argument, but 3 were provided
struct sparse_hashtable_iterator {
^
In file included from src/hashtable_test.cc:63:
./src/hash_test_interface.h:88:15: error: type 'typename
sparse_hash_map<basic_string<char>, basic_string<char>, Hasher, Hasher,
Alloc<basic_string<char>, unsigned long, 18446744073709551615> >::iterator' (aka 'sparse_hashtable_iterator<std::__1::pair<const
std::__1::basic_string<char>, std::__1::basic_string<char> >, std::__1::basic_string<char>, <anonymous>::Hasher,
google::sparse_hash_map<std::__1::basic_string<char>, std::__1::basic_string<char>, <anonymous>::Hasher, <anonymous>::Hasher,
<anonymous>::Alloc<std::__1::basic_string<char>, unsigned long, 18446744073709551615> >::SelectKey,
google::sparse_hash_map<std::__1::basic_string<char>, std::__1::basic_string<char>, <anonymous>::Hasher, <anonymous>::Hasher,
<anonymous>::Alloc<std::__1::basic_string<char>, unsigned long, 18446744073709551615> >::SetKey, <anonymous>::Hasher,
<anonymous>::Alloc<std::__1::basic_string<char>, unsigned long, 18446744073709551615> >') is not a direct or virtual base of
'google::BaseHashtableInterface<google::sparse_hash_map<std::__1::basic_string<char>, std::__1::basic_string<char>,
<anonymous>::Hasher, <anonymous>::Hasher, <anonymous>::Alloc<std::__1::basic_string<char>, unsigned long, 18446744073709551615> >
>::iterator'
: HT::iterator(it), parent_(parent) { }
^~~~~~~~
./src/hash_test_interface.h:144:12: note: in instantiation of member function
'google::BaseHashtableInterface<google::sparse_hash_map<std::__1::basic_string<char>, std::__1::basic_string<char>,
<anonymous>::Hasher, <anonymous>::Hasher, <anonymous>::Alloc<std::__1::basic_string<char>, unsigned long, 18446744073709551615> >
>::iterator::iterator' requested here
return iterator(ht_.begin(), this);
^
src/hashtable_test.cc:620:25: note: in instantiation of member function
'google::BaseHashtableInterface<google::sparse_hash_map<std::__1::basic_string<char>, std::__1::basic_string<char>,
<anonymous>::Hasher, <anonymous>::Hasher, <anonymous>::Alloc<std::__1::basic_string<char>, unsigned long, 18446744073709551615> >
>::begin' requested here
EXPECT_TRUE(this->ht_.begin() == this->ht_.end());
^
./src/testutil.h:51:9: note: expanded from macro 'EXPECT_TRUE'
if (!(cond)) { \
^
src/hashtable_test.cc:619:1: note: in instantiation of member function
'<anonymous
namespace>::TEST_onetype_HashtableAllTest_NormalIterators<google::HashtableInterface_SparseHashMap<std::__1::basic_string<char>,
std::__1::basic_string<char>, <anonymous>::Hasher, <anonymous>::Hasher, <anonymous>::Alloc<std::__1::basic_string<char>, unsigned
long, 18446744073709551615> > >::Run' requested here
TYPED_TEST(HashtableAllTest, NormalIterators) {
^
./src/testutil.h:171:7: note: expanded from macro 'TYPED_TEST'
Run(); \
^
src/hashtable_test.cc:619:1: note: in instantiation of member function
'<anonymous
namespace>::TEST_onetype_HashtableAllTest_NormalIterators<google::HashtableInterface_SparseHashMap<std::__1::basic_string<char>,
std::__1::basic_string<char>, <anonymous>::Hasher, <anonymous>::Hasher, <anonymous>::Alloc<std::__1::basic_string<char>, unsigned
long, 18446744073709551615> > >::TEST_onetype_HashtableAllTest_NormalIterators' requested here
TYPED_TEST(HashtableAllTest, NormalIterators) {
^
./src/testutil.h:205:68: note: expanded from macro 'TYPED_TEST'
TEST_onetype_##superclass##_##testname<superclass##_type7> t; \
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
3 warnings and 20 errors generated.
*** Error code 1
Original comment by hmonfa...@gmail.com
on 27 Aug 2014 at 10:16
Google Code Exporter commented
Seems clang is a bit more stringent - some of the allocators used in the test
are wrong. Seems hashmap allocators need to return pairs. Separately looks like
there's something wonky going on in libc++ or sparsehash itself - the first
element of the pair needs to be const. Not sure why.
Either way - here's a patch to fix the compile with clang.
Original comment by mike.kap...@gmail.com
on 27 Oct 2014 at 7:17
Attachments: