LLVM如何设置属性::非展开到功能?(LLVM how to set Attributes::No

2019-10-18 02:26发布

我觉得这是很简单的问题,但我不能解决这个问题。 很伤心。 所以。 当我做

llc.exe -march=cpp test.bc 

我与这段代码有趣TEST.CPP:

AttrListPtr func__Z2f1i_PAL;
{
 SmallVector<AttributeWithIndex, 4> Attrs;
 AttributeWithIndex PAWI;
 PAWI.Index = 4294967295U; PAWI.Attrs = Attribute::None  | Attribute::NoUnwind;
 Attrs.push_back(PAWI);
 func__Z2f1i_PAL = AttrListPtr::get(Attrs.begin(), Attrs.end());
}

但是,当我想要写串像PAWI.Attrs = Attribute::None | Attribute::NoUnwind; PAWI.Attrs = Attribute::None | Attribute::NoUnwind;

在我的项目,我得到了错误IntelliSense: no operator "=" matches these operands operand types are: llvm::Attributes = int ,我需要做什么? 所有必要的头文件包括在内。 [OS - Windows 7的64位,LLVM - 3.2]

Answer 1:

我不知道为什么CPP后台生成此代码。 在任何情况下属性交接在3.2改变(将在3.3再次改变)。 正确的方法来获得3.2的属性应该是:

Attributes::get(Context, Attributes::NoUnwind)

(你总是可以在这里通过任何数组引用的第二个参数,来初始化多个值设定的属性)。

将属性添加到功能最简单的方法是:

Function->addFnAttr(Attributes::NoUnwind)

如果你想要一个AttributeWithIndex

AttributeWithIndex::get(Context, ID, Attributes::NoUnwind)
// OR:
AttributeWithIndex::get(ID, Attributes::get(Context, Attributes::NoUnwind))


文章来源: LLVM how to set Attributes::NoUnwind to Function?