Lines Matching refs:expr
42 static int evaluate_to_int_const_expr(struct expression *expr) in evaluate_to_int_const_expr() argument
44 expr->ctype = &int_ctype; in evaluate_to_int_const_expr()
45 expr->flags |= CEF_SET_ICE; in evaluate_to_int_const_expr()
49 static int evaluate_pure_unop(struct expression *expr) in evaluate_pure_unop() argument
51 struct expression *arg = first_expression(expr->args); in evaluate_pure_unop()
60 expr->flags = flags; in evaluate_pure_unop()
67 static int eval_args(struct expression *expr, int n) in eval_args() argument
74 FOR_EACH_PTR(expr->args, arg) { in eval_args()
89 sym = expr->fn->ctype; in eval_args()
90 expression_error(expr, "%s for %s", msg, show_ident(sym->ident)); in eval_args()
94 static int args_prototype(struct expression *expr) in args_prototype() argument
96 struct symbol *fntype = expr->fn->ctype->ctype.base_type; in args_prototype()
98 return eval_args(expr, n); in args_prototype()
101 static int args_triadic(struct expression *expr) in args_triadic() argument
103 return eval_args(expr, 3); in args_triadic()
106 static int evaluate_choose(struct expression *expr) in evaluate_choose() argument
108 struct expression_list *list = expr->args; in evaluate_choose()
117 *expr = get_expression_value(args[0]) ? *args[1] : *args[2]; in evaluate_choose()
122 static int expand_expect(struct expression *expr, int cost) in expand_expect() argument
124 struct expression *arg = first_ptr_list((struct ptr_list *) expr->args); in expand_expect()
127 *expr = *arg; in expand_expect()
135 static int expand_warning(struct expression *expr, int cost) in expand_warning() argument
138 struct expression_list *arglist = expr->args; in expand_warning()
154 warning(expr->pos, "%*s", string->length-1, string->data); in expand_warning()
170 expr->type = EXPR_VALUE; in expand_warning()
171 expr->value = 1; in expand_warning()
172 expr->taint = 0; in expand_warning()
177 static int expand_constant_p(struct expression *expr, int cost) in expand_constant_p() argument
179 expr->type = EXPR_VALUE; in expand_constant_p()
180 expr->value = !cost; in expand_constant_p()
181 expr->taint = 0; in expand_constant_p()
186 static int expand_safe_p(struct expression *expr, int cost) in expand_safe_p() argument
188 expr->type = EXPR_VALUE; in expand_safe_p()
189 expr->value = (cost < SIDE_EFFECTS); in expand_safe_p()
190 expr->taint = 0; in expand_safe_p()
219 static int expand_bswap(struct expression *expr, int cost) in expand_bswap() argument
228 arg = first_expression(expr->args); in expand_bswap()
230 switch (expr->ctype->bit_size) { in expand_bswap()
231 case 16: expr->value = bswap16(val); break; in expand_bswap()
232 case 32: expr->value = bswap32(val); break; in expand_bswap()
233 case 64: expr->value = bswap64(val); break; in expand_bswap()
238 expr->type = EXPR_VALUE; in expand_bswap()
239 expr->taint = 0; in expand_bswap()
250 static int expand_##name(struct expression *expr, int cost) \
258 arg = first_expression(expr->args); \
269 expr->value = val; \
270 expr->type = EXPR_VALUE; \
271 expr->taint = 0; \
287 static int evaluate_fp_unop(struct expression *expr) in evaluate_fp_unop() argument
291 if (!eval_args(expr, 1)) in evaluate_fp_unop()
294 arg = first_expression(expr->args); in evaluate_fp_unop()
296 expression_error(expr, "non-floating-point argument in call to %s()", in evaluate_fp_unop()
297 show_ident(expr->fn->ctype->ident)); in evaluate_fp_unop()
308 static int expand_isdigit(struct expression *expr, int cost) in expand_isdigit() argument
310 struct expression *arg = first_expression(expr->args); in expand_isdigit()
316 expr->value = (val >= '0') && (val <= '9'); in expand_isdigit()
317 expr->type = EXPR_VALUE; in expand_isdigit()
318 expr->taint = 0; in expand_isdigit()
328 static int evaluate_overflow_gen(struct expression *expr, int ptr) in evaluate_overflow_gen() argument
334 FOR_EACH_PTR(expr->args, arg) { in evaluate_overflow_gen()
362 expr->ctype = &bool_ctype; in evaluate_overflow_gen()
368 expr->ctype = &bad_ctype; in evaluate_overflow_gen()
372 static int evaluate_overflow(struct expression *expr) in evaluate_overflow() argument
374 return evaluate_overflow_gen(expr, 1); in evaluate_overflow()
382 static int evaluate_overflow_p(struct expression *expr) in evaluate_overflow_p() argument
384 return evaluate_overflow_gen(expr, 0); in evaluate_overflow_p()
404 static int evaluate_generic_int_op(struct expression *expr) in evaluate_generic_int_op() argument
406 struct symbol *fntype = expr->fn->ctype->ctype.base_type; in evaluate_generic_int_op()
414 FOR_EACH_PTR(expr->args, arg) { in evaluate_generic_int_op()
441 return evaluate_arguments(types, expr->args); in evaluate_generic_int_op()
446 expr->ctype = &bad_ctype; in evaluate_generic_int_op()
456 static int eval_atomic_common(struct expression *expr) in eval_atomic_common() argument
458 struct symbol *fntype = expr->fn->ctype->ctype.base_type; in eval_atomic_common()
468 FOR_EACH_PTR(expr->args, arg) { in eval_atomic_common()
503 if (!expr->ctype) // set the return type, if needed in eval_atomic_common()
504 expr->ctype = ctype; in eval_atomic_common()
505 return evaluate_arguments(types, expr->args); in eval_atomic_common()
510 expr->ctype = &bad_ctype; in eval_atomic_common()
525 static int expand_object_size(struct expression *expr, int cost) in expand_object_size() argument
527 struct expression *arg = first_expression(expr->args); in expand_object_size()
528 int type = get_expression_value_silent(ptr_list_nth(expr->args, 1)); in expand_object_size()
580 expr->flags |= CEF_SET_ICE; in expand_object_size()
581 expr->type = EXPR_VALUE; in expand_object_size()
582 expr->value = val; in expand_object_size()
583 expr->taint = 0; in expand_object_size()