Hi,
I’ve just downloaded llvm/clang and tried to compile it, but I’m getting errors and I don’t know how to proceed.
I’ve googled for this type of error but could not find anything relevant.
I’m working with Windows/Visual Studio 2008. I was able to generate the solution files and tried to compile all projects with the ALL_BUILD project. The error I’m getting occurs in different points of the code, and with different classes, but it boils down to this one example:
MCModule.cpp
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xutility(337) : error C2664: ‘bool (const llvm::MCAtom *,uint64_t)’ : cannot convert parameter 2 from ‘llvm::MCAtom *’ to ‘uint64_t’
There is no context in which this conversion is possible
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\algorithm(2298) : see reference to function template instantiation ‘bool std::_Debug_lt_pred<bool(__cdecl *)(const llvm::MCAtom ,uint64_t),llvm::MCAtom,_Ty>(_Pr,_Ty1 &,const _Ty2 &,const wchar_t *,unsigned int)’ being compiled
with
[
_Ty=uint64_t,
_Pr=bool (__cdecl *)(const llvm::MCAtom *,uint64_t),
_Ty1=llvm::MCAtom *,
_Ty2=uint64_t
]
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\algorithm(2312) : see reference to function template instantiation ‘_FwdIt std::_Lower_bound<std::_Vector_iterator<_Ty,_Alloc>,unsigned __int64,__w64 int,bool(__cdecl *)(const llvm::MCAtom *,uint64_t)>(_FwdIt,_FwdIt,const unsigned __int64 &,_Pr,_Diff *)’ being compiled
with
[
_FwdIt=std::_Vector_iterator<llvm::MCAtom *,std::allocator<llvm::MCAtom *>>,
_Ty=llvm::MCAtom *,
_Alloc=std::allocator<llvm::MCAtom *>,
_Pr=bool (__cdecl *)(const llvm::MCAtom *,uint64_t),
_Diff=__w64 int
]
…....\llvm\lib\MC\MCModule.cpp(28) : see reference to function template instantiation ‘_FwdIt std::lower_bound<llvm::MCModule::atom_iterator,uint64_t,bool(__cdecl *)(const llvm::MCAtom *,uint64_t)>(_FwdIt,_FwdIt,const _Ty &,_Pr)’ being compiled
with
[
_FwdIt=llvm::MCModule::atom_iterator,
_Ty=uint64_t,
_Pr=bool (__cdecl *)(const llvm::MCAtom *,uint64_t)
]
I’ve followed the call thread from MCModule.cpp and it ends up in my VS’s xutility, line 337 (which of course is what the error message says), _Debug_lt_pred where the predicate _Pred is static bool AtomComp(const MCAtom *L, uint64_t Addr) (in MCModule.cpp:17), _Left is the iterator between atom_begin() and atom_end(), and _Right is uint64_t Begin = NewAtom->Begin;
At this point the predicate is applied to the arguments in the reverse order (right, left), and the types are not compatible (cannot convert parameter 2 from ‘llvm::MCAtom *’ to ‘uint64_t’), because the predicate dereferences the first argument(!).
Am I seeing this right? Do I have a bugged/old/incompatible version of xutility?
Please, help!
Thanks in advance,
Manuel Portilheiro