目录

clang 的簡介請見

線上文章:

使用範例

# 這裡的 clang 是 compiler driver,負責解析命令行,調用相關工具,並傳遞對應的命令行參數。
# -Xclang 代表其後參數是給 clang -cc1 調用的編譯器。
$ clang -Xclang -ast-dump sum.c
# 這裡的 clang -cc1 調用的是實際上的編譯器。
$ clang -cc1 -ast-dump sum.c
# -### 列出完整的命令行參數。
$ clang -### sum.c
# -xir 指示輸入的是 LLVM IR。
$ clang -xir -c sum.ll

內部實現

透過 gdb 下斷點,觀察 backtrace。

底下是 Clang 前端主要流程:

 Driver -> Lex -> Parse -> Sema -> CodeGen (LLVM IR)

分別在 include/clang 和 lib 底下有對應。Driver 負責調用編譯流程中所需的工具鏈,並傳遞相應參數。真正意義上的前端是自 Lex 以後至 CodeGen 的部分。

IRBuilder

熟悉生成 LLVM IR 生成的方式,和使用到相關的類。

函式庫

Sanitizer

靜態檢查

# 列出可用的 CHECKER 列表。
$ clang -cc1 -analyzer-checker-help
$ cat bug.c
#include <stdio.h>
 
int main() {
  int i;
  printf("%d", i);
}
$ clang -cc1 -analyze -analyzer-checker=core bug.c
bug.c:5:3: warning: Function call argument is an uninitialized value
  printf("%d", i);
  ^~~~~~~~~~~~~~~
1 warning generated.

其它

外部連結