[cfe-commits] r81602 - in /cfe/trunk: lib/CodeGen/CGBlocks.cpp lib/CodeGen/CGDecl.cpp lib/CodeGen/CGExpr.cpp test/CodeGen/blocks-aligned-byref-variable.c

Mike Stump mrs at apple.com
Sun Sep 13 13:14:51 PDT 2009


On Sep 12, 2009, at 12:54 PM, Chris Lattner wrote:
> On Sep 12, 2009, at 11:58 AM, Mike Stump wrote:
>
>> On Sep 11, 2009, at 7:44 PM, Anders Carlsson wrote:
>>> URL: http://llvm.org/viewvc/llvm-project?rev=81602&view=rev
>>> Log:
>>> Add support for __block variables with alignment greater than
>>> __alignof(void *).
>>
>> Unfortunately, we also need a sema error for alignment larger than  
>> the
>> minimum of the maximal stack alignmint and the alignment of malloc on
>> the system.  For darwin, I think that means 16.  Also, ordinary stack
>> decls that request larger than the maximal stack alignment the system
>> conspires to allow need a sema error as well.  In time, people might
>> include the required alignment in the block and a flag to request  
>> more
>> than the standard align in the blocks runtime, but until then...   
>> I've
>> added a FIXME.
>
> Why?

Why what?  Why do we need an error for going past maximal supported  
alignment, because it won't be honored.  Why warn for going past the  
alignment of malloc, because the runtime will dealign a __block  
variable to just malloc align[1] during a copy of the __block  
variable.  In either case, this isn't what the user wanted.  They  
actually wanted a variable that is aligned to the stated boundary.

> Codegen should just set the right alignment on the alloca.  The LLVM  
> backend will realign the stack as needed.

You say that as if it were true:

void bar(void *);

void foo() {
   int i __attribute__((aligned(1024*1024*512)));
   i = 42;
   bar(&i);
}

clang -S t.c -o -

_foo:
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp

?  16 won't cut it here.  Anyway, __block variables can be allocate by  
other than the llvm stack allocator.  They can be allocated when the  
runtime copies them.


1 - To be verified when one writes the check.



More information about the cfe-commits mailing list