如何在 C 中自定义 pragma?

How to customise pragma in C?

我想问一下构建解析器以识别我在 C/C++ 代码中自定义的 pragma 的最简单方法是什么。是的,一个简单的 bash 脚本就可以做到,但我想知道是否有任何正式的方法可以通过 Clang 或 LLVM 来完成?我试图检查 Clang AST,但找不到任何编译指示。

例如:

int foo1(){
#pragma hi k=1
...
}

int foo2(){
#pragma hello k=7
...
}

我想要通行证 returns 以下内容:

function foo1 has hi and k=1
function foo2 has hello and k=7

谢谢。

Pragma 处理需要在以下部分完成:

  1. 在 ParsePragma.cpp 文件中添加一个处理程序(有如何执行此操作的示例)。这一步可以逐个token解析pragma token,并在AST中存储相应的信息(可能是将数据从这一阶段传递到后面阶段的最佳方式)。
  2. 如果您需要在处理 LLVM IR 的过程中处理这些信息,那么您需要将之前存储在 AST 中的信息附加到与 IR 相关的 类 中,在您的情况下似乎是 llvm::Function 是保存它的地方。在此过程中,需要更新'lib/AsmParser/LLParser.cpp'、'lib/AsmParser/LLLexer.cpp'和'lib/IR/AsmWriter.cpp' 文件。这将允许读取和写入存储在 IR 中的信息。

最后,如果您需要将保存在 IR 中的额外信息写入汇编文件,那么您将需要相应地更新“lib/CodeGen/AsmPrinter/AsmPrinter.cpp”文件。