loadpre6.c

来自「用于进行gcc测试」· C语言 代码 · 共 78 行

C
78
字号
/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-pre-stats" } */#include <stddef.h>union tree_node;typedef union tree_node *tree;struct tree_common{  tree chain;};struct tree_list{  struct tree_common common;  tree value;};union tree_node{  struct tree_common common;  struct tree_list list;};extern void abort (void) __attribute__((noreturn));void __attribute__((noinline))foo (void){  abort ();}/* There are some reloaded loads of *cell, and cell->common.chain on various   branches.  */void __attribute__((noinline))remove_useless_vars (tree *unexpanded_var_list, int dump_file){  tree var, *cell;  int c = 0;  for (cell = unexpanded_var_list; *cell; )    {      var = (*cell)->list.value;      if (var)        {          if (dump_file)            foo ();          *cell = ((*cell)->common.chain);          continue;        }      cell = &((*cell)->common.chain);    }}extern void *malloc (__SIZE_TYPE__) __attribute__ ((malloc));intmain (void){  int i;  tree unexpanded_var_list, last = (tree) 0;  for (i = 0; i < 2; i++)    {      unexpanded_var_list = malloc (sizeof (struct tree_list));      unexpanded_var_list->list.value = (tree) (ptrdiff_t) (i & 1);      unexpanded_var_list->common.chain = last;      last = unexpanded_var_list;    }  remove_useless_vars (&unexpanded_var_list, 0);  return 0;}/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" } } *//* { dg-final { cleanup-tree-dump "pre" } } */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?