今天发现,执行

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 -cc1 传递 -o 参数,而 -emit-llvm 又需要一个输出文件,因此 clang -cc1 生成了一个默认的输出文件名即 foo.ll
 
 
Back to Top