From c96d4963eb2eb99f9fac36687194489ecfac7b9c Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Sat, 15 Aug 2009 21:55:26 +0000 Subject: Implement __is_empty. Patch by Sean Hunt. llvm-svn: 79143 --- clang/lib/AST/ExprCXX.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'clang/lib/AST/ExprCXX.cpp') diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 454dc14b6c8..006f69890ab 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -223,6 +223,12 @@ bool UnaryTypeTraitExpr::EvaluateTrait(ASTContext& C) const { if (const RecordType *RT = QueriedType->getAs()) return cast(RT->getDecl())->isAbstract(); return false; + case UTT_IsEmpty: + if (const RecordType *Record = QueriedType->getAs()) { + return !Record->getDecl()->isUnion() + && cast(Record->getDecl())->isEmpty(); + } + return false; case UTT_HasTrivialConstructor: // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: // If __is_pod (type) is true then the trait is true, else if type is -- cgit v1.2.3