| @@ -3480,7 +3480,7 @@ static void post_type(CType *type, AttributeDef *ad) · 3479 unmodified lines |
| 3480 | | 3480 | |
| 3481 | vla_runtime_type_size(type, &align); | 3481 | vla_runtime_type_size(type, &align); |
| 3482 | gen_op('*'); | 3482 | gen_op('*'); |
| 3483 | vset(&int_type, VT_LOCAL|VT_LVAL, loc); | 3483 | vset(&int_type, VT_LOCAL|VT_LVAL, n); |
| 3484 | vswap(); | 3484 | vswap(); |
| 3485 | vstore(); | 3485 | vstore(); |
| 3486 | } | 3486 | } |
| @@ -4809,7 +4809,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, · 1322 unmodified lines |
| 4809 | gsym_addr(b, d); | 4809 | gsym_addr(b, d); |
| 4810 | } else if (tok == '{') { | 4810 | } else if (tok == '{') { |
| 4811 | Sym *llabel; | 4811 | Sym *llabel; |
| 4812 | int block_vla_sp_loc, *saved_vla_sp_loc, saved_vla_flags; | 4812 | int block_vla_sp_loc, *saved_vla_sp_loc, saved_vla_flags, *orig_vla_sp_loc; |
| 4813 | | 4813 | |
| 4814 | next(); | 4814 | next(); |
| 4815 | /* record local declaration stack position */ | 4815 | /* record local declaration stack position */ |
| @@ -4822,7 +4822,8 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, · 6 unmodified lines |
| 4822 | /* save VLA state */ | 4822 | /* save VLA state */ |
| 4823 | block_vla_sp_loc = *(saved_vla_sp_loc = vla_sp_loc); | 4823 | block_vla_sp_loc = *(saved_vla_sp_loc = vla_sp_loc); |
| 4824 | if (saved_vla_sp_loc != &vla_sp_root_loc) | 4824 | if (saved_vla_sp_loc != &vla_sp_root_loc) |
| 4825 | vla_sp_loc = &block_vla_sp_loc; | 4825 | vla_sp_loc = &block_vla_sp_loc; |
| | 4826 | orig_vla_sp_loc = vla_sp_loc; |
| 4826 | | 4827 | |
| 4827 | saved_vla_flags = vla_flags; | 4828 | saved_vla_flags = vla_flags; |
| 4828 | vla_flags |= VLA_NEED_NEW_FRAME; | 4829 | vla_flags |= VLA_NEED_NEW_FRAME; |
| @@ -4878,10 +4879,10 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, · 49 unmodified lines |
| 4878 | /* Pop VLA frames and restore stack pointer if required */ | 4879 | /* Pop VLA frames and restore stack pointer if required */ |
| 4879 | if (saved_vla_sp_loc != &vla_sp_root_loc) | 4880 | if (saved_vla_sp_loc != &vla_sp_root_loc) |
| 4880 | *saved_vla_sp_loc = block_vla_sp_loc; | 4881 | *saved_vla_sp_loc = block_vla_sp_loc; |
| 4881 | if (vla_sp_loc != (saved_vla_sp_loc == &vla_sp_root_loc ? &vla_sp_root_loc : &block_vla_sp_loc)) { | 4882 | if (vla_sp_loc != orig_vla_sp_loc) { |
| 4882 | vla_sp_loc = saved_vla_sp_loc; | 4883 | gen_vla_sp_restore(*saved_vla_sp_loc); |
| 4883 | gen_vla_sp_restore(*vla_sp_loc); | | |
| 4884 | } | 4884 | } |
| | 4885 | vla_sp_loc = saved_vla_sp_loc; |
| 4885 | vla_flags = (vla_flags & ~VLA_SCOPE_FLAGS) | (saved_vla_flags & VLA_SCOPE_FLAGS); | 4886 | vla_flags = (vla_flags & ~VLA_SCOPE_FLAGS) | (saved_vla_flags & VLA_SCOPE_FLAGS); |
| 4886 | | 4887 | |
| 4887 | next(); | 4888 | next(); |
| @@ -5482,6 +5483,8 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c, · 594 unmodified lines |
| 5482 | | 5483 | |
| 5483 | vla_runtime_type_size(type, &a); | 5484 | vla_runtime_type_size(type, &a); |
| 5484 | gen_vla_alloc(type, a); | 5485 | gen_vla_alloc(type, a); |
| | 5486 | vla_flags = VLA_IN_SCOPE; |
| | 5487 | vla_sp_save(); |
| 5485 | vset(type, VT_LOCAL|VT_LVAL, c); | 5488 | vset(type, VT_LOCAL|VT_LVAL, c); |
| 5486 | vswap(); | 5489 | vswap(); |
| 5487 | vstore(); | 5490 | vstore(); |