[cfe-commits] r55767 - in /cfe/trunk: include/clang/AST/ASTContext.h include/clang/Basic/DiagnosticKinds.def lib/AST/ASTContext.cpp lib/Sema/Sema.h lib/Sema/SemaExpr.cpp

Mike Stump mrs at apple.com
Thu Sep 4 16:58:24 PDT 2008

On Sep 4, 2008, at 12:14 PM, Eli Friedman wrote:
>> +    /// BlockVoidPointer - The assignment is between a closure  
>> pointer and
>> +    /// void*, we accept for now.
> I don't see any good reason to accept this; it'll just destroy the  
> block pointer.

void * is the canonical opaque type, and block pointers can be pushed  
into and pulled out of a void * per the usual C rules.

> Just to double-check, the comparison is roughly equivalent to memcmp  
> for block pointers?

Yes, I think so.

> The code as-is won't work correctly for cases like

> "int a(int(^b)(void)){return b  == (void*)0}".

gcc does this:

$ cat t.c
int a(int(^b)(void)) {return b  == (void*)0; }
mrs $ gcc -S t.c -fblocks -fomit-frame-pointer -O9
mrs $ cat t.s
	.align 4,0x90
.globl _a
	xorl	%eax, %eax
	cmpl	$0, 4(%esp)
	sete	%al

clang should do something similar when done.

More information about the cfe-commits mailing list