| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-dom1-details -fno-short-enums" } */ |
| |
| extern void abort (void) __attribute__ ((__noreturn__)); |
| union tree_node; |
| typedef union tree_node *tree; |
| enum tree_code |
| { |
| VAR_DECL, |
| SSA_NAME, |
| MAX_TREE_CODES |
| }; |
| extern unsigned char tree_contains_struct[MAX_TREE_CODES][64]; |
| struct tree_base |
| { |
| enum tree_code code:16; |
| }; |
| enum tree_node_structure_enum |
| { |
| TS_DECL_COMMON |
| }; |
| struct tree_ssa_name |
| { |
| tree var; |
| }; |
| union tree_node |
| { |
| struct tree_base base; |
| struct tree_ssa_name ssa_name; |
| }; |
| long |
| expand_one_var (tree var, unsigned char toplevel, unsigned char really_expand) |
| { |
| tree origvar = var; |
| var = var->ssa_name.var; |
| if (((enum tree_code) (origvar)->base.code) == SSA_NAME |
| && !((var->base.code != VAR_DECL))) |
| abort (); |
| if ((var->base.code) != VAR_DECL && ((origvar)->base.code) != SSA_NAME) |
| ; |
| else if (tree_contains_struct[(var->base.code)][(TS_DECL_COMMON)] != 1) |
| abort (); |
| } |
| /* We should thread the jump, through an intermediate block. */ |
| /* { dg-final { scan-tree-dump-times "Threaded" 2 "dom1"} } */ |
| /* { dg-final { scan-tree-dump-times "one or more intermediate" 1 "dom1"} } */ |
| /* { dg-final { cleanup-tree-dump "dom1" } } */ |
| |