1 2/* { dg-options "-fno-short-enums" {target short_enums} } */ 3typedef union tree_node *tree; 4enum tree_code { EXCESS_PRECISION_EXPR }; 5enum built_in_function { BUILT_IN_ACOS, BUILT_IN_FPCLASSIFY, BUILT_IN_ISFINITE }; 6struct tree_base { 7 __extension__ enum tree_code code : 16; 8 unsigned side_effects_flag : 1; 9}; 10struct tree_exp { 11 tree operands[1]; 12}; 13struct tree_function_decl { 14 __extension__ enum built_in_function function_code : 11; 15 unsigned static_ctor_flag : 1; 16}; 17union tree_node { 18 struct tree_base base; 19 struct tree_function_decl function_decl; 20 struct tree_exp exp; 21}; 22static tree 23convert_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} 40tree 41build_function_call_vec (tree function) 42{ 43 return convert_arguments (function); 44} 45 46