[cfe-commits] r56764 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/Sema/block-return.c
Steve Naroff
snaroff at apple.com
Sat Sep 27 18:11:11 PDT 2008
Author: snaroff
Date: Sat Sep 27 20:11:11 2008
New Revision: 56764
URL: http://llvm.org/viewvc/llvm-project?rev=56764&view=rev
Log:
Fix <rdar://problem/6252216> compare block to NULL.
Modified:
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/test/Sema/block-return.c
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=56764&r1=56763&r2=56764&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Sat Sep 27 20:11:11 2008
@@ -2034,6 +2034,17 @@
ImpCastExprToType(rex, lType); // promote the pointer to pointer
return Context.IntTy;
}
+ // Allow block pointers to be compared with null pointer constants.
+ if ((lType->isBlockPointerType() && rType->isPointerType()) ||
+ (lType->isPointerType() && rType->isBlockPointerType())) {
+ if (!LHSIsNull && !RHSIsNull) {
+ Diag(loc, diag::err_typecheck_comparison_of_distinct_blocks,
+ lType.getAsString(), rType.getAsString(),
+ lex->getSourceRange(), rex->getSourceRange());
+ }
+ ImpCastExprToType(rex, lType); // promote the pointer to pointer
+ return Context.IntTy;
+ }
if ((lType->isObjCQualifiedIdType() || rType->isObjCQualifiedIdType())) {
if (ObjCQualifiedIdTypesAreCompatible(lType, rType, true)) {
Modified: cfe/trunk/test/Sema/block-return.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/block-return.c?rev=56764&r1=56763&r2=56764&view=diff
==============================================================================
--- cfe/trunk/test/Sema/block-return.c (original)
+++ cfe/trunk/test/Sema/block-return.c Sat Sep 27 20:11:11 2008
@@ -72,7 +72,10 @@
}
static int funk(char *s) {
- return 1;
+ if (^{} == ((void*)0))
+ return 1;
+ else
+ return 0;
}
void foo4() {
int (^xx)(const char *s) = ^(char *s) { return 1; }; // expected-warning {{incompatible block pointer types initializing 'int (^)(char *)', expected 'int (^)(char const *)'}}
More information about the cfe-commits
mailing list