【问题标题】:LLVM: generate runtime errorLLVM:生成运行时错误
【发布时间】:2014-08-24 12:39:43
【问题描述】:

如何根据条件生成运行时错误?

我有一种支持范围整数类型的语言。例如,一种类型是从 0 到 99 的整数,另一种类型是从 -100 到 -20 的整数,依此类推。类型由用户定义。每种类型的范围在编译时是已知的。

如果用户执行的算术运算导致整数超出其定义的范围,我想抛出运行时错误。如何使用 LLVM 的 C++ API 做到这一点?

【问题讨论】:

  • 是你好奇的运行时异常,还是如何插入检查?
  • 运行时异常。我使用比较指令 (ICmpInst) 执行检查,然后使用带有 2 个已定义块的分支指令,1 个用于错误,1 个用于正常行为。
  • 并且,为了进一步澄清,这是否必须支持捕获这些异常,或者在域中可以接受只是出错?
  • 好的,所以只需调用一个 C 函数即可:printf("Invalid arithmetic operation"); exit(-1); 太粗糙了,或者您只是需要帮助构建调用?
  • 这可能是你真正的问题——我不知道;在我看来,这超出了 LLVM 的范围。一个建议可能是寻找__builtin_exit() 或类似的。或者看看llvm如何编译exit();

标签: c++ llvm


【解决方案1】:

这是在运行时库的领域。通常,该语言提供了一个运行时库,编译器可以依赖它来实现像这样的更复杂的功能。在您的情况下,分支的错误路径将导致对运行时库的调用,以调用一些带有一定数量参数的错误函数。运行时库处理打印错误并终止应用程序。然后,运行时库可以由您的编译器编译并链接到用户代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多