r336225 - Fix allocation of Nullability attribute.
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 3 13:43:22 PDT 2018
On Tue, Jul 3, 2018 at 4:30 PM, Erich Keane via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: erichkeane
> Date: Tue Jul 3 13:30:34 2018
> New Revision: 336225
>
> URL: http://llvm.org/viewvc/llvm-project?rev=336225&view=rev
> Log:
> Fix allocation of Nullability attribute.
>
> Existing code always allocates for on the declarator's attribute pool,
> but sometimes adds it to the declspec. This patch ensures that the
> correct pool is used.
>
>
> Discovered while testing: https://reviews.llvm.org/D48788
Can you devise a testcase for this change, or is that hard to get the
original behavior to fail in a consistent way?
~Aaron
>
> Modified:
> cfe/trunk/lib/Parse/ParseObjc.cpp
>
> Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=336225&r1=336224&r2=336225&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseObjc.cpp Tue Jul 3 13:30:34 2018
> @@ -381,25 +381,23 @@ static void addContextSensitiveTypeNulla
> SourceLocation nullabilityLoc,
> bool &addedToDeclSpec) {
> // Create the attribute.
> - auto getNullabilityAttr = [&]() -> AttributeList * {
> - return D.getAttributePool().create(
> - P.getNullabilityKeyword(nullability),
> - SourceRange(nullabilityLoc),
> - nullptr, SourceLocation(),
> - nullptr, 0,
> - AttributeList::AS_ContextSensitiveKeyword);
> + auto getNullabilityAttr = [&](AttributePool &Pool) -> AttributeList * {
> + return Pool.create(P.getNullabilityKeyword(nullability),
> + SourceRange(nullabilityLoc), nullptr, SourceLocation(),
> + nullptr, 0, AttributeList::AS_ContextSensitiveKeyword);
> };
>
> if (D.getNumTypeObjects() > 0) {
> // Add the attribute to the declarator chunk nearest the declarator.
> - auto nullabilityAttr = getNullabilityAttr();
> + auto nullabilityAttr = getNullabilityAttr(D.getAttributePool());
> DeclaratorChunk &chunk = D.getTypeObject(0);
> nullabilityAttr->setNext(chunk.getAttrListRef());
> chunk.getAttrListRef() = nullabilityAttr;
> } else if (!addedToDeclSpec) {
> // Otherwise, just put it on the declaration specifiers (if one
> // isn't there already).
> - D.getMutableDeclSpec().addAttributes(getNullabilityAttr());
> + D.getMutableDeclSpec().addAttributes(
> + getNullabilityAttr(D.getDeclSpec().getAttributePool()));
> addedToDeclSpec = true;
> }
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list