Fix CPP backend for method attributes by creating a block where a new AttrBuilder is defined for each attribute.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166762 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nicolas Geoffray 2012-10-26 09:14:38 +00:00
parent f098be4f86
commit 8b1b4136a0

View File

@ -476,11 +476,11 @@ void CppWriter::printAttributes(const AttrListPtr &PAL,
unsigned index = PAL.getSlot(i).Index;
AttrBuilder attrs(PAL.getSlot(i).Attrs);
Out << "PAWI.Index = " << index << "U;\n";
Out << " AttrBuilder B;\n";
Out << " {\n AttrBuilder B;\n";
#define HANDLE_ATTR(X) \
if (attrs.hasAttribute(Attributes::X)) \
Out << " B.addAttribute(Attributes::" #X ");\n"; \
Out << " B.addAttribute(Attributes::" #X ");\n"; \
attrs.removeAttribute(Attributes::X);
HANDLE_ATTR(SExt);
@ -509,11 +509,10 @@ void CppWriter::printAttributes(const AttrListPtr &PAL,
HANDLE_ATTR(NonLazyBind);
#undef HANDLE_ATTR
if (attrs.hasAttribute(Attributes::StackAlignment))
Out << "B.addStackAlignmentAttr(" << attrs.getStackAlignment() << ")";
nl(Out);
Out << " B.addStackAlignmentAttr(" << attrs.getStackAlignment() << ")\n";
attrs.removeAttribute(Attributes::StackAlignment);
assert(!attrs.hasAttributes() && "Unhandled attribute!");
Out << "PAWI.Attrs = Attributes::get(mod->getContext(), B);";
Out << " PAWI.Attrs = Attributes::get(mod->getContext(), B);\n }";
nl(Out);
Out << "Attrs.push_back(PAWI);";
nl(Out);