modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/pr39845.c (about)

     1  
     2  /* { dg-options "-fno-short-enums" {target short_enums} } */
     3  typedef union tree_node *tree;
     4  enum tree_code { EXCESS_PRECISION_EXPR };
     5  enum built_in_function { BUILT_IN_ACOS, BUILT_IN_FPCLASSIFY, BUILT_IN_ISFINITE };
     6  struct tree_base {
     7      __extension__ enum tree_code code : 16;
     8      unsigned side_effects_flag : 1;
     9  };
    10  struct tree_exp {
    11      tree     operands[1];
    12  };
    13  struct tree_function_decl {
    14      __extension__ enum built_in_function function_code : 11;
    15      unsigned static_ctor_flag : 1;
    16  };
    17  union tree_node {
    18      struct tree_base base;
    19      struct tree_function_decl function_decl;
    20      struct tree_exp exp;
    21  };
    22  static tree
    23  convert_arguments (tree fundecl)
    24  {
    25    tree val = (void *)0;
    26    unsigned int parmnum;
    27    unsigned char type_generic_remove_excess_precision = 0;
    28    switch (((fundecl)->function_decl.function_code))
    29      {
    30        case BUILT_IN_ISFINITE:
    31        case BUILT_IN_FPCLASSIFY:
    32  	  type_generic_remove_excess_precision = 1;
    33      }
    34    for (parmnum = 0;; ++parmnum)
    35      if (((enum tree_code) (val)->base.code) == EXCESS_PRECISION_EXPR
    36  	&& !type_generic_remove_excess_precision)
    37        val = ((val)->exp.operands[0]);
    38    return val;
    39  }
    40  tree
    41  build_function_call_vec (tree function)
    42  {
    43    return convert_arguments (function);
    44  }
    45