[llvm-commits] [llvm] r153837 - in /llvm/trunk: include/llvm/MC/MCRegisterInfo.h utils/TableGen/RegisterInfoEmitter.cpp utils/TableGen/RegisterInfoEmitter.h

Anton Yartsev anton.yartsev at gmail.com
Tue Apr 3 19:10:41 PDT 2012


Hi Benjamin,

just failed to compile Clang with MSVC8, found out that the problem seem 
to be caused by this commit.

 > class MCRegisterInfo {
 > public:
 >   typedef const MCRegisterClass *regclass_iterator;
 > +
 > +  /// DwarfLLVMRegPair - Emitted by tablegen so Dwarf<->LLVM reg 
mappings can be
 > +  /// performed with a binary search.
 > +  struct DwarfLLVMRegPair {
 > +    unsigned FromReg;
 > +    unsigned ToReg;
 > +
 > +    bool operator==(unsigned Reg) const { return FromReg == Reg; }
 > +    bool operator<(unsigned Reg) const { return FromReg < Reg; }
 > +  };

My workaround was to add the cast operator to the DwarfLLVMRegPair 
struct (patch attached)
As seen from the "Microsoft Visual Studio 9.0\VC\include\xutility" both 
left to right and right to left comparisons are present:

template<class _Ty1, class _Ty2> inline
     bool __CLRCALL_OR_CDECL _Debug_lt(const _Ty1& _Left, const _Ty2& 
_Right,
         const wchar_t *_Where, unsigned int _Line)
     {    // test if _Left < _Right and operator< is strict weak ordering
     if (!(_Left < _Right))
         return (false);
     else if (_Right < _Left)
         _DEBUG_ERROR2("invalid operator<", _Where, _Line);
     return (true);
     }

Is this the right fix?

here is my build log:

1>------ Build started: Project: LLVMMC, Configuration: Debug Win32 ------
1>Compiling...
1>MCDwarf.cpp
1>MCContext.cpp
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xutility(263) 
: error C2678: binary '<' : no operator found which takes a left-hand 
operand of type 'const unsigned int' (or there is no acceptable conversion)
1>        F:\llvm_TRC\include\llvm/ADT/StringRef.h(497): could be 'bool 
llvm::operator <(llvm::StringRef,llvm::StringRef)' [found using 
argument-dependent lookup]
1>        while trying to match the argument list '(const unsigned int, 
const llvm::MCRegisterInfo::DwarfLLVMRegPair)'
1>        C:\Program Files\Microsoft Visual Studio 
9.0\VC\include\algorithm(2264) : see reference to function template 
instantiation 'bool 
std::_Debug_lt<llvm::MCRegisterInfo::DwarfLLVMRegPair,_Ty>(const _Ty1 
&,const _Ty2 &,const wchar_t *,unsigned int)' being compiled
1>        with
1>        [
1>            _Ty=unsigned int,
1>            _Ty1=llvm::MCRegisterInfo::DwarfLLVMRegPair,
1>            _Ty2=unsigned int
1>        ]
1>        C:\Program Files\Microsoft Visual Studio 
9.0\VC\include\algorithm(2276) : see reference to function template 
instantiation '_FwdIt std::_Lower_bound<const 
llvm::MCRegisterInfo::DwarfLLVMRegPair*,_Ty,std::iterator_traits<_Iter>::difference_type>(_FwdIt,_FwdIt,const 
_Ty &,_Diff *)' being compiled
1>        with
1>        [
1>            _FwdIt=const llvm::MCRegisterInfo::DwarfLLVMRegPair *,
1>            _Ty=unsigned int,
1>            _Iter=const llvm::MCRegisterInfo::DwarfLLVMRegPair *,
1>            _Diff=std::iterator_traits<const 
llvm::MCRegisterInfo::DwarfLLVMRegPair *>::difference_type
1>        ]
1>        F:\llvm_TRC\include\llvm/MC/MCRegisterInfo.h(319) : see 
reference to function template instantiation '_FwdIt 
std::lower_bound<const llvm::MCRegisterInfo::DwarfLLVMRegPair*,unsigned 
int>(_FwdIt,_FwdIt,const _Ty &)' being compiled
1>        with
1>        [
1>            _FwdIt=const llvm::MCRegisterInfo::DwarfLLVMRegPair *,
1>            _Ty=unsigned int
1>        ]

-- 
Anton

-------------- next part --------------
A non-text attachment was scrubbed...
Name: MCRegisterInfo.h.patch
Type: text/x-diff
Size: 477 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120404/1ad0c6ea/attachment.patch>


More information about the llvm-commits mailing list