1

我认为这是一个非常简单的问题,但我无法解决。很伤心。所以。当我做

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;

在我的项目中,出现错误 IntelliSense: no operator "=" matches these operands operand types are: llvm::Attributes = int我需要做什么?包括所有必要的标题。[操作系统 - Windows 7 x64,LLVM - 3.2]

4

1 回答 1

1

我不知道为什么 cpp 后端会生成此代码。无论如何,属性处理在 3.2 中已更改(并将在 3.3 中再次更改)。在 3.2 中获取属性的正确方法应该是:

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

(您始终可以在此处传递任何 ArrayRef 作为第二个参数,以使用多个值初始化属性集)。

向函数添加属性的最简单方法是:

Function->addFnAttr(Attributes::NoUnwind)

如果你想要一个AttributeWithIndex

AttributeWithIndex::get(Context, ID, Attributes::NoUnwind)
// OR:
AttributeWithIndex::get(ID, Attributes::get(Context, Attributes::NoUnwind))
于 2013-05-01T07:04:50.477 回答