TargetRegisterInfo.h
line759: virtual void eliminateFrameIndex(MachineBasicBlock::iterator MI,
int SPAdj, unsigned FIOperandNum,
RegScavenger *RS = NULL) const = 0;
virtual void First() = 0;纯虚函数,该类为抽象类,不能实例化对象。
加const的意思是说明该成员函数不能修改成员变量的值。
=0表示是纯虚函数
const表示不能在函数内部修改成员变量值
纯虚函数
-------------------------------------------------------------------------------------
142 make[2]: Leaving directory `/work/user/llvm33/llvm-3.3/llvm-obj/obj/llvm/lib/DebugInfo'
145 from /work/user/llvm33/llvm-3.3/lib/Target/x86/x86ConvertTox86Pass.cpp
:17:
146 /work/user/llvm33/llvm-3.3/include/llvm/Target/TargetRegisterInfo.h:759: warning: 'virtual
void llvm::TargetRegisterInfo::eliminateFrameIndex(llvm::MachineBasicBlock::bundle_iterator<llvm::M
achineInstr, llvm::ilist_iterator<llvm::MachineInstr> >, int, unsigned int, llvm::RegScavenger*) co
nst' was hidden
147 /work/user/llvm33/llvm-3.3/lib/Target/x86/x86RegisterInfo.h:76: warning: by 'virtual vo
id llvm::x86RegisterInfo::eliminateFrameIndex(llvm::MachineBasicBlock::bundle_iterator<llvm::Machi
neInstr, llvm::ilist_iterator<llvm::MachineInstr> >, int, llvm::RegScavenger*) const'
148 In file included from /work/user/llvm33/llvm-3.3/lib/Target/x86/x86ConvertTox86Pass.cpp
:17:
149 /work/user/llvm33/llvm-3.3/lib/Target/x86/x86InstrInfo.h:116: error: cannot declare field
'llvm::x86InstrInfo::RI' to be of abstract type 'const llvm::x86RegisterInfo'
150 /work/user/llvm33/llvm-3.3/lib/Target/x86/x86RegisterInfo.h:39: note: because the follo
wing virtual functions are pure within 'const llvm::x86RegisterInfo':
151 /work/user/llvm33/llvm-3.3/include/llvm/Target/TargetRegisterInfo.h:759: note: virtual voi
d llvm::TargetRegisterInfo::eliminateFrameIndex(llvm::MachineBasicBlock::bundle_iterator<llvm::Mach
ineInstr, llvm::ilist_iterator<llvm::MachineInstr> >, int, unsigned int, llvm::RegScavenger*) const
152 make[3]: *** [/work/user/llvm33/llvm-3.3/llvm-obj/obj/llvm/lib/Target/x86/Release+Asserts/
x86ConvertTox86Pass.o] Error 1
153 make[3]: *** Waiting for unfinished jobs....
原因: llvm33 代码升级后,函数多了个参数。
本来对应的父类虚函数 子类有其实现,
现在的子类代码仍是针对llvm32的,也就是说 子类没有对应实现新的 虚函数。
这样 就会报错:cannot declare field XXX to be of abstract type XXXXX