I am trying to upgrade my code to use the latest version of llvm from
svn. Whenever I include "llvm/ADT/HashExtras.h", I get error messages
like the following. Does anyone know what is going on? Thanks for any
help.
llvm[1]: Compiling Aux.cpp for Debug build (PIC)
In file included from
/home/lefever/work/memrep/src/compiler/include/Aux.h:4,
from Aux.cpp:1:
/home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h:26:
error: ‘hash’ is not a template
/home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h: In
member function ‘size_t HASH_NAMESPACE::hash<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>::operator()(const
std::string&) const’:
/home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h:34:
error: no match for call to ‘(HASH_NAMESPACE::hash<const char*>) (const
char*)’
/home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h:27:
note: candidates are: size_t HASH_NAMESPACE::hash<T>::operator()(const
T*) const [with T = const char*]
make[1]: ***
[/home/lefever/work/memrep/src/compiler/lib/memrep/Debug/Aux.o] Error 1
make[1]: Leaving directory
`/home/lefever/work/memrep/src/compiler/lib/memrep'
make: *** [compiler/Debug/lib/libmemrep.so] Error 2
So, after digging around in the old llvm/ADT/hash_map, I think I discovered the problem. Now, if you want to include llvm/ADT/HashExtras.h, you have to include the hash_map h file from your system (ext/hash_map in my case) and define HASH_NAMESPACE, before you include llvm/ADT/HashExtras. It might be good to include some documentation about that for those using HashExtras. Regards, Ryan Ryan M. Lefever wrote:> I am trying to upgrade my code to use the latest version of llvm from > svn. Whenever I include "llvm/ADT/HashExtras.h", I get error messages > like the following. Does anyone know what is going on? Thanks for any > help. > > llvm[1]: Compiling Aux.cpp for Debug build (PIC) > In file included from > /home/lefever/work/memrep/src/compiler/include/Aux.h:4, > from Aux.cpp:1: > /home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h:26: > error: ‘hash’ is not a template > /home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h: In > member function ‘size_t HASH_NAMESPACE::hash<std::basic_string<char, > std::char_traits<char>, std::allocator<char> > >::operator()(const > std::string&) const’: > /home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h:34: > error: no match for call to ‘(HASH_NAMESPACE::hash<const char*>) (const > char*)’ > /home/lefever/llvm/svn091010/llvm/include/llvm/ADT/HashExtras.h:27: > note: candidates are: size_t HASH_NAMESPACE::hash<T>::operator()(const > T*) const [with T = const char*] > make[1]: *** > [/home/lefever/work/memrep/src/compiler/lib/memrep/Debug/Aux.o] Error 1 > make[1]: Leaving directory > `/home/lefever/work/memrep/src/compiler/lib/memrep' > make: *** [compiler/Debug/lib/libmemrep.so] Error 2 > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On Oct 12, 2009, at 6:40 PM, Ryan M. Lefever wrote:> So, after digging around in the old llvm/ADT/hash_map, I think I > discovered the problem. Now, if you want to include > llvm/ADT/HashExtras.h, you have to include the hash_map h file from > your > system (ext/hash_map in my case) and define HASH_NAMESPACE, before you > include llvm/ADT/HashExtras. It might be good to include some > documentation about that for those using HashExtras.Hi Ryan, Thanks for bringing this up. HashExtras.h is an obsolete and dead header that was around from when we had hashmap and hashset wrappers. I have removed it from mainline. -Chris