diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-09-27 22:42:37 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-09-27 22:42:37 +0000 |
commit | ff3a078d2a67db9ae6ff4cc0f799a209f85a4e91 (patch) | |
tree | 76015f35050cfa68dc7f1329bfce561b690e82db /lib/AST/Expr.cpp | |
parent | 3e9438b5251a547253d64169863c2909b9b2772a (diff) |
Patch to support transparent_union arguments
passed to nonnull attributed functions. Implements radar
6857843.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114917 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Expr.cpp')
-rw-r--r-- | lib/AST/Expr.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 9536b9bf24..708512ce46 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1862,6 +1862,13 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx, if (getType()->isNullPtrType()) return true; + if (const RecordType *UT = getType()->getAsUnionType()) + if (UT && UT->getDecl()->hasAttr<TransparentUnionAttr>()) + if (const CompoundLiteralExpr *CLE = dyn_cast<CompoundLiteralExpr>(this)){ + const Expr *InitExpr = CLE->getInitializer(); + if (const InitListExpr *ILE = dyn_cast<InitListExpr>(InitExpr)) + return ILE->getInit(0)->isNullPointerConstant(Ctx, NPC); + } // This expression must be an integer type. if (!getType()->isIntegerType() || (Ctx.getLangOptions().CPlusPlus && getType()->isEnumeralType())) |