diff options
author | Manman Ren <manman.ren@gmail.com> | 2016-03-23 16:28:28 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2016-03-23 16:28:28 +0000 |
commit | 6d93ad844a5b81e36d67596ffa055f0f3d00d1f5 (patch) | |
tree | dae539a94d8a2e659224d43c1de4b9582742084d /clang/lib/Sema/SemaDecl.cpp | |
parent | b7d30cbc7ec8fbaf21d005468ae6d26f41e3a329 (diff) | |
download | bcm5719-llvm-6d93ad844a5b81e36d67596ffa055f0f3d00d1f5.tar.gz bcm5719-llvm-6d93ad844a5b81e36d67596ffa055f0f3d00d1f5.zip |
ObjC: Handle boolean fixed type for enum.
Before this commit, we assert failure in ImplicitCastExpr
"unheralded conversion to bool". This commit fixes the assertion by using
the correct cast type when the fixed type is boolean.
This commit also fixes the behavior for Microsoft mode as well, since
Obj-C and Microsoft mode share the same code path.
rdar://24999533
llvm-svn: 264167
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 1abd7d0ae6b..c8a9b9ac807 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -14146,7 +14146,10 @@ EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, } else Diag(IdLoc, diag::err_enumerator_too_large) << EltTy; } else - Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).get(); + Val = ImpCastExprToType(Val, EltTy, + EltTy->isBooleanType() ? + CK_IntegralToBoolean : CK_IntegralCast) + .get(); } else if (getLangOpts().CPlusPlus) { // C++11 [dcl.enum]p5: // If the underlying type is not fixed, the type of each enumerator |