2020年3月12日 星期四

fatal error C1001: 編譯器發生內部錯誤

今天跟了某同事的 commit 後,編譯 UEFI Application 時,會發生如下的錯誤。
看了一下同事的 code,左看右看都看不出個所以然,連那個 f: 的路徑都不知從哪來的?

後來實在沒辦法,把 inf 裡的最佳化從 "/Oi-" 改成 "/Od" 便暫時解決了此問題。
一整個下午的心情都被搞成很阿雜!

2020/03/13 更新

那個提示訊息是有意義的,是同事的 code 出問題無誤,非那個奇怪的 f: 路徑。

原本有加上 /FAcs 想看錯誤行數的 assembly code,是否能看出最佳化後的組語長怎樣?不過因為是到那邊出錯,故整個函數的 assembly code 都未產出到檔案。

後來再仔細研究了同事 commit 的函數,居然是錯在函數的參數被拿來計算,導致最佳化出錯,真是個奇特的經驗。

unsigned int XXXX(void* buffer, unsigned int len, unsigned int ans)
{
    unsigned char* buf = (unsigned int*)buffer;
    unsigned int i;
    
    for (i = 0; i < len; ++i) {
        if (i == 8) ans = 0;
        ans += (unsigned int)(*buf++);
    }
    
    return ans;
}

沒有留言:

張貼留言