Branch: Tag:

2015-02-07

2015-02-07 12:55:19 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler: Clear local variables on pop.

Local variables may get reused after pop, and such code expects
getting clean variables. This also reduces the lifetime for
various locks and similar to the expected range.

Note that this reduces the quality of the generated code somewhat.

1838:    statements end_block    {    unuse_modules(Pike_compiler->num_used_modules - $<number>1); -  pop_local_variables($<number>2); +  $5 = pop_local_variables($<number>2, $5);    Pike_compiler->compiler_frame->last_block_level=$<number>4;    if ($5) COPY_LINE_NUMBER_INFO($5, $3);    free_node ($3);
2983:    $$ = mkcastnode(void_type_string, $$);    COPY_LINE_NUMBER_INFO($$, $3);    free_node ($3); -  pop_local_variables($<number>2); +  $$ = pop_local_variables($<number>2, $$);    Pike_compiler->compiler_frame->last_block_level=$<number>4;    }    ;
3052:    }    COPY_LINE_NUMBER_INFO($$, $3);    free_node ($3); -  pop_local_variables($<number>2); +  $$ = pop_local_variables($<number>2, $$);    Pike_compiler->compiler_frame->last_block_level=$<number>4;    Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;    }
3107:    mknode(F_FOR,$8,mknode(':',$12,$10)));    COPY_LINE_NUMBER_INFO($$, $3);    free_node ($3); -  pop_local_variables($<number>2); +  $$ = pop_local_variables($<number>2, $$);    Pike_compiler->compiler_frame->last_block_level=$<number>4;    Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;    }
3129:    $$=mknode(F_FOR,$6,mknode(':',$8,NULL));    COPY_LINE_NUMBER_INFO($$, $3);    free_node ($3); -  pop_local_variables($<number>2); +  $$ = pop_local_variables($<number>2, $$);    Pike_compiler->compiler_frame->last_block_level=$<number>4;    Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;    }
3154:    $$=mknode(F_SWITCH,$6,$8);    COPY_LINE_NUMBER_INFO($$, $3);    free_node ($3); -  pop_local_variables($<number>2); +  $$ = pop_local_variables($<number>2, $$);    Pike_compiler->compiler_frame->last_block_level=$<number>4;    }    ;
3427:       /* block code */    unuse_modules(Pike_compiler->num_used_modules - $<number>1); -  pop_local_variables($<number>4); +  $5 = pop_local_variables($<number>4, $5);       debug_malloc_touch($5);    $5=mknode(F_COMMA_EXPR,$5,mknode(F_RETURN,mkintnode(0),0));