[PATCH] Fix uninitialized value in AttributedTypeLoc.
Aaron Ballman
aaron.ballman at gmail.com
Sun Mar 9 08:43:43 PDT 2014
Is there a test case we can add along with this which would otherwise
be failing?
~Aaron
On Sun, Mar 9, 2014 at 3:29 AM, Logan Chien <tzuhsiang.chien at gmail.com> wrote:
> Hi aaron.ballman,
>
> The uninitialized value for enum operand in AttributedTypeLoc
> might be used during the serialization or deserialization of the
> precompiled headers. This commit fix this issue by adding expression
> variant for enum operand. Besides, several assertions are added to
> prevent future unexpected situation.
>
> http://llvm-reviews.chandlerc.com/D3020
>
> Files:
> lib/Sema/SemaType.cpp
>
> Index: lib/Sema/SemaType.cpp
> ===================================================================
> --- lib/Sema/SemaType.cpp
> +++ lib/Sema/SemaType.cpp
> @@ -3444,10 +3444,17 @@
> }
>
> TL.setAttrNameLoc(attrs->getLoc());
> - if (TL.hasAttrExprOperand() && attrs->isArgExpr(0))
> + if (TL.hasAttrExprOperand()) {
> + assert(attrs->isArgExpr(0) && "mismatched attribute operand kind");
> TL.setAttrExprOperand(attrs->getArgAsExpr(0));
> - else if (TL.hasAttrEnumOperand() && attrs->isArgIdent(0))
> - TL.setAttrEnumOperandLoc(attrs->getArgAsIdent(0)->Loc);
> + } else if (TL.hasAttrEnumOperand()) {
> + assert((attrs->isArgIdent(0) || attrs->isArgExpr(0)) &&
> + "unexpected attribute operand kind");
> + if (attrs->isArgIdent(0))
> + TL.setAttrEnumOperandLoc(attrs->getArgAsIdent(0)->Loc);
> + else
> + TL.setAttrEnumOperandLoc(attrs->getArgAsExpr(0)->getExprLoc());
> + }
>
> // FIXME: preserve this information to here.
> if (TL.hasAttrOperand())
More information about the cfe-commits
mailing list