c++ - 如何使用 clang 前端获取 asm 语句的位置

标签 c++ clang inline-assembly llvm-clang libtooling

示例代码:

int f_i32() {
  __asm {
    mov eax, 1
    mov edx, 1
  }
}

此代码的 AST:

enter image description here

我在 AST 中只得到 MSASMStmt,而在它里面什么也没有。

我想在 __asm block 中提取 ASM 语句的位置。 如何获得带有 clang 前端和 lib-tooling 库的那些?

最佳答案

找到答案。

想法是迭代 MSAsmStmt 返回的 ASM token 并获取每个 token 的位置。

    size_t asmTokens = asmStmt->getNumAsmToks();
    clang::Token* tokens = asmStmt->getAsmToks();
    for (size_t i = 0; i < asmTokens; ++i) {
        clang::Token token = tokens[i];
        size_t tokloc = SourceManager.getExpansionLineNumber(token.getLocation());
    }

关于c++ - 如何使用 clang 前端获取 asm 语句的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713476/

相关文章:

c++ - 模板内的模板 VS 2005 问题?

c++ - 递归函数导致栈溢出

objective-c - Xcode 构建错误 clang 失败

c - 在 C 中组合 ASM block 时出现问题

c++ - 以下内联汇编有什么问题?

c++ - 一次通过 OpenGL 绘制立方体贴图

c++ - 如何使用 OpenCv 中的背景减法测量移动车速

c++ - 在带有 libstdc++ 的 Linux 上使用 -fsanitize=memory 和 clang

c - 为什么那些函数调用没有优化?

c++ - WinSock send() Hook 导致访问冲突