clang貌似有很多bug?
最近想給miniblink換個編譯器,看能否達到優化體積和大小的效果,就試了試clang。我用的是clang-cl + vs。
編譯出來的miniblink要小了將近2m,但跑起來卻有各種bug。
例如下面的程式碼:
#include <process.h> static unsigned int WINAPI buildThread(void* param) { int* waitCount = (int*)param; *waitCount = 0; return 0; } int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTRlpCmdLine, _In_ intnCmdShow) { int waitCount = 1; unsigned int threadIdentifier = 0; HANDLE threadHandle = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, buildThread, &waitCount, 0, &threadIdentifier)); ::CloseHandle(threadHandle); while (waitCount) { } return 0; }
開啟O2優化後,這個while居然會被翻譯成死迴圈?

看彙編,jmp跳到了自己的地址,死迴圈了。求clang高手解惑一下(我是
https://prereleases.llvm.org/win-snapshots/LLVM-9.0.0-r351376-win64.exe prereleases.llvm.org這個版本的)。
另外還遇到些小麻煩,如
1,官網的clang不支援vs2015( http:// llvm.org/builds/ ).不過還好有其他人寫的指令碼可以支援( https:// github.com/zufuliu/llvm -utils )
2,不支援多處理器編譯。 這個沒找到好方法,所有文章都說不支援多處理器編譯 。只好自己寫了個封裝,多程序調起clang-cl來編譯。