2012-11-09 59 views
3

我使用LLVM IR生成一些結構數據。我是否需要自己計算填充以構造StructType?

例如:

struct mystruct {int a:1; int b:2; unsigned long c} = {{1, 2, 3}}; 

我閱讀文檔,並試圖演示,似乎API需要用戶自己處理填充和價值組合。

有什麼辦法能夠更簡單地創建結構是這樣的:

fields.push_back(Type::getIntNTy(context, 1)); 
fields.push_back(Type::getIntNTy(context, 2)); 
fields.push_back(Type::getIntNTy(context, 64)); 
structTy.setBody(fields, false /* isPacked*/); 

這真的很難做到佈局工作,這是很容易造成錯誤。初始化器的值合併也很困難。根據我的理解,如果我告訴llvm API該結構未打包,它應該自動處理填充,對吧?

有何評論?

回答

0

填充由您的目標系統的C標準和ABI規定。 LLVM本身不知道這些規則(因爲它們是C,而不是LLVM IR)。

不幸的是,您有責任處理所有填充怪異和位域佈局。通常,這是C/C++前端(例如clang)的工作。

相關問題