| /* { dg-do compile } */ |
| /* { dg-options "-O2 -Wuninitialized" } */ |
| |
| enum demangle_component_type { |
| DEMANGLE_COMPONENT_NAME, |
| DEMANGLE_COMPONENT_REFERENCE |
| }; |
| struct demangle_component { |
| enum demangle_component_type type; |
| } d_print_comp_inner_mod_inner, *d_print_comp_inner_dc; |
| struct d_print_mod { |
| struct d_print_mod *next; |
| }; |
| struct d_print_info { |
| int templates; |
| struct d_print_mod *modifiers; |
| }; |
| void d_print_comp_inner(struct d_print_info *dpi) |
| { |
| int saved_templates, need_template_restore = 0; |
| switch (d_print_comp_inner_dc->type) { |
| case DEMANGLE_COMPONENT_NAME: |
| goto modifier; |
| case DEMANGLE_COMPONENT_REFERENCE: |
| saved_templates = dpi->templates; |
| need_template_restore = 1; |
| modifier: |
| struct d_print_mod dpm; |
| dpm.next = dpi->modifiers; |
| d_print_comp_inner_mod_inner = *d_print_comp_inner_dc; |
| d_print_comp_inner(dpi); |
| dpi->modifiers = dpm.next; |
| if (need_template_restore) |
| dpi->templates = saved_templates; /* { dg-bogus "uninitialized" } */ |
| } |
| } |