Automatic void initialization
    Frits van Bommel 
    fvbommel at REMwOVExCAPSs.nl
       
    Tue Jun  2 07:41:41 PDT 2009
    
    
  
Jarrett Billingsley wrote:
> On Tue, Jun 2, 2009 at 8:10 AM, bearophile <bearophileHUGS at lycos.com> wrote:
>> Walter Bright:
>>> Dead assignment elimination is compiler technology from the 70's !<
>> I'd like to see this technology used for arrays too. So in the following two adjacent lines of code "a" doesn't get initialized to zero before being initialized again to 5:
>>
>> void main() {
>>    auto a = new int[10];
>>    a[] = 5;
>>    printf("%d\n", a[3]);
>> }
> 
> As far as I know, LDC already does this.
It doesn't. The runtime call that allocates the array initializes it (to 0 in 
this case), and then the array assignment overwrites that initialization.
In this case the array doesn't escape the function, so it does get 
stack-allocated by a custom optimization pass (and the initialization is turned 
into an LLVM memset intrinsic), but LLVM still can't "look into" the call that 
does the array assignment to know it will always overwrite the entire array so 
the memset isn't necessary.
    
    
More information about the Digitalmars-d
mailing list