From 30c3de97a93609ce6cba3ee2f160dedc7d9d77d9 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 12 Apr 2012 17:49:18 +0000 Subject: objective-c numeric literal: type of boolean is that of typedef BOOL if found. // rdar://11231426 llvm-svn: 154595 --- clang/lib/Sema/SemaExpr.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'clang/lib/Sema') diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 1711f356c62..7748b8c8a66 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -11259,6 +11259,18 @@ ExprResult Sema::ActOnObjCBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind) { assert((Kind == tok::kw___objc_yes || Kind == tok::kw___objc_no) && "Unknown Objective-C Boolean value!"); + QualType ObjCBoolLiteralQT = Context.ObjCBuiltinBoolTy; + // signed char is the default type for boolean literals. Use 'BOOL' + // instead, if BOOL typedef is visible in its scope instead. + Decl *TD = + LookupSingleName(TUScope, &Context.Idents.get("BOOL"), + SourceLocation(), LookupOrdinaryName); + if (TypeDecl *BoolTD = dyn_cast_or_null(TD)) { + QualType QT = QualType(BoolTD->getTypeForDecl(), 0); + if (!QT.isNull()) + ObjCBoolLiteralQT = QT; + } + return Owned(new (Context) ObjCBoolLiteralExpr(Kind == tok::kw___objc_yes, - Context.ObjCBuiltinBoolTy, OpLoc)); + ObjCBoolLiteralQT, OpLoc)); } -- cgit v1.2.3