c++ - 为什么我从 TableGen 生成的 *.inc 文件 (LLVM) 中收到错误?

标签 c++ compiler-construction llvm

我正在尝试编写一个 LLVM 后端,当我尝试构建它时,我收到以下错误消息:

AbcGenRegisterInfo.inc: In static member function 'static const llvm::AbcFrameLowering* llvm::AbcGenRegisterInfo::getFrameLowering(const llvm::MachineFunction&)':
AbcGenRegisterInfo.inc:322:43: error: invalid static_cast from type 'const llvm::TargetFrameLowering*' to type 'const llvm::AbcFrameLowering*'
    MF.getSubtarget().getFrameLowering());
    ^

这是我的 AbcRegisterInfo.td(我从 here 复制它):

class AbcReg<string n> : Register<n> {
    let namespace = "Abc";
}

def DUMMY_REG : AbcReg<"R0">;

def RegI64 : RegisterClass<"Abc", [i64], 64, (add DUMMY_REG)>;

我还重写了 AbcSubtarget::getFrameLowering() 方法:

class AbcSubTarget : public AbcGenSubtargetInfo {
    AbcFrameLowering *frameLowering;

    // more fields and methods

    const AbcFrameLowering *getFrameLowering() const override {
        return frameLowering;
    }
};

但错误消息没有改变。

我不明白该怎么做 - 我不能只编辑 AbcGenRegisterInfo.inc,因为每次我构建 LLVM 时它都会重新生成,而且我不明白是什么我的 TableGen 文件中有错误。


我还尝试在编译之前从构建目录中删除 AbcGenRegisterInfo.inc 文件,但没有效果。

最佳答案

AbcFrameLowering 是否继承自 TargetFrameLowering?看起来静态转换正在提示,因为类型不相关。

还要确保在包含 .inc 文件之前包含具有 AbcFrameLowering 定义的 header ,否则静态转换也会失败。

关于c++ - 为什么我从 TableGen 生成的 *.inc 文件 (LLVM) 中收到错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013676/

相关文章:

c++ - 异常堆栈跟踪

c++ - Ribbon UI动态按钮菜单编辑

c++ - 使用互斥锁在 C++ 中复制构造函数

c - Eclipse SDK 程序 "cl"在 PATH 错误中找不到

c - 编译器语法中if then else的翻译

c++ - ffmpeg:transcoding.c 问题

.net - 用于 .NET 的 IL 编译器?

c - 如何使用现代编译器使用旧语法编译 C 代码?

linux - libcxxabi 在 linux 下有意义吗?有什么好处?

xcode - 使用已弃用的方法时在 Xcode 中显示自定义警告