Lancern's Treasure Chest
今天发现,执行 clang++ -S -Xclang -emit-llvm -o foo.s foo.cpp 将导致 clang 将 LLVM IR 输出写入名为 foo.s 的文件,而执行 clang++ -S -fsyntax-only -Xclang -emit-llvm -o foo.s foo.cpp 将导致 clang 将 LLVM IR 输出写入名为 foo.ll 的文件 经进一步检查,发现这是因为 -fsyntax-only 的存在会导致 clang driver 不再向 clang…
为什么会发现这个,是因为咱在调 compiler-explorer 屎山,发现他们生成 LLVM IR 输出的代码是这么写的:

1. 调用 clang 并传递 -Xclang -emit-llvm -S -fsyntax-only -o /tmp/example.s /tmp/example.cpp
2. 在 clang 执行完毕之后直接开读 example.ll 作为 LLVM IR 输出

起初还以为在这两步之间存在某种奇妙逻辑将 example.s 拷贝至 example.ll ,最后发现是依赖了上述的奇妙 clang 行为
 
 
Back to Top