Lines Matching refs:expr

34 static char *get_fn_name(struct expression *expr)  in get_fn_name()  argument
36 if (expr->type != EXPR_CALL) in get_fn_name()
38 if (expr->fn->type != EXPR_SYMBOL) in get_fn_name()
40 return expr_to_var(expr->fn); in get_fn_name()
43 static int is_allocation_function(struct expression *expr) in is_allocation_function() argument
48 func = get_fn_name(expr); in is_allocation_function()
126 static int bytes_per_element(struct expression *expr) in bytes_per_element() argument
130 if (!expr) in bytes_per_element()
132 if (expr->type == EXPR_STRING) in bytes_per_element()
134 if (expr->type == EXPR_PREOP && expr->op == '&') { in bytes_per_element()
135 type = get_type(expr->unop); in bytes_per_element()
137 expr = expr->unop; in bytes_per_element()
139 type = get_type(expr); in bytes_per_element()
150 static int bytes_to_elements(struct expression *expr, int bytes) in bytes_to_elements() argument
154 bpe = bytes_per_element(expr); in bytes_to_elements()
160 static int elements_to_bytes(struct expression *expr, int elements) in elements_to_bytes() argument
164 bpe = bytes_per_element(expr); in elements_to_bytes()
168 static int get_initializer_size(struct expression *expr) in get_initializer_size() argument
170 switch (expr->type) { in get_initializer_size()
172 return expr->string->length; in get_initializer_size()
177 FOR_EACH_PTR(expr->expr_list, tmp) { in get_initializer_size()
190 return get_array_size(expr); in get_initializer_size()
209 static struct range_list *size_from_db_type(struct expression *expr) in size_from_db_type() argument
214 name = get_member_name(expr); in size_from_db_type()
215 if (!name && is_static(expr)) { in size_from_db_type()
216 name = expr_to_var(expr); in size_from_db_type()
239 static struct range_list *size_from_db_symbol(struct expression *expr) in size_from_db_symbol() argument
243 if (expr->type != EXPR_SYMBOL) in size_from_db_symbol()
245 sym = expr->symbol; in size_from_db_symbol()
258 static struct range_list *size_from_db(struct expression *expr) in size_from_db() argument
262 rl = size_from_db_symbol(expr); in size_from_db()
265 return size_from_db_type(expr); in size_from_db()
268 static void db_returns_buf_size(struct expression *expr, int param, char *unused, char *math) in db_returns_buf_size() argument
274 if (expr->type != EXPR_ASSIGNMENT) in db_returns_buf_size()
276 call = strip_expr(expr->right); in db_returns_buf_size()
282 set_state_expr(my_size_id, expr->left, alloc_estate_rl(rl)); in db_returns_buf_size()
300 int get_real_array_size(struct expression *expr) in get_real_array_size() argument
302 if (!expr) in get_real_array_size()
304 if (expr->type == EXPR_PREOP && expr->op == '&') in get_real_array_size()
305 expr = expr->unop; in get_real_array_size()
306 if (expr->type == EXPR_BINOP) /* array elements foo[5] */ in get_real_array_size()
308 return get_real_array_size_from_type(get_type(expr)); in get_real_array_size()
311 static int get_size_from_initializer(struct expression *expr) in get_size_from_initializer() argument
313 if (expr->type != EXPR_SYMBOL || !expr->symbol || !expr->symbol->initializer) in get_size_from_initializer()
315 if (expr->symbol->initializer == expr) /* int a = a; */ in get_size_from_initializer()
317 return get_initializer_size(expr->symbol->initializer); in get_size_from_initializer()
320 static struct range_list *get_stored_size_bytes(struct expression *expr) in get_stored_size_bytes() argument
324 state = get_state_expr(my_size_id, expr); in get_stored_size_bytes()
330 static int get_bytes_from_address(struct expression *expr) in get_bytes_from_address() argument
335 if (expr->type != EXPR_PREOP || expr->op != '&') in get_bytes_from_address()
337 type = get_type(expr); in get_bytes_from_address()
351 static struct expression *remove_addr_fluff(struct expression *expr) in remove_addr_fluff() argument
356 expr = strip_expr(expr); in remove_addr_fluff()
359 while (expr && expr->type == EXPR_PREOP && expr->op == '&') { in remove_addr_fluff()
360 tmp = strip_expr(expr->unop); in remove_addr_fluff()
365 expr = strip_expr(tmp->unop); in remove_addr_fluff()
368 if (!expr) in remove_addr_fluff()
372 if (expr->type == EXPR_BINOP && expr->op == '+' && in remove_addr_fluff()
373 get_value(expr->right, &sval) && sval.value == 0) in remove_addr_fluff()
374 return expr->left; in remove_addr_fluff()
376 return expr; in remove_addr_fluff()
424 static int get_stored_size_end_struct_bytes(struct expression *expr) in get_stored_size_end_struct_bytes() argument
430 if (expr->type == EXPR_BINOP) /* array elements foo[5] */ in get_stored_size_end_struct_bytes()
433 if (expr->type == EXPR_PREOP && expr->op == '&') in get_stored_size_end_struct_bytes()
434 expr = strip_parens(expr->unop); in get_stored_size_end_struct_bytes()
436 sym = expr_to_sym(expr); in get_stored_size_end_struct_bytes()
451 if (!is_last_member_of_struct(base_sym, expr->member)) in get_stored_size_end_struct_bytes()
460 return estate_to_size(state) - type_bytes(base_sym) + type_bytes(get_type(expr)); in get_stored_size_end_struct_bytes()
473 struct range_list *get_array_size_bytes_rl(struct expression *expr) in get_array_size_bytes_rl() argument
479 expr = remove_addr_fluff(expr); in get_array_size_bytes_rl()
480 if (!expr) in get_array_size_bytes_rl()
484 if (expr->type == EXPR_STRING) in get_array_size_bytes_rl()
485 return alloc_int_rl(expr->string->length); in get_array_size_bytes_rl()
487 if (expr->type == EXPR_BINOP && expr->op == '+') { in get_array_size_bytes_rl()
492 if (!get_implied_value(expr->right, &offset)) in get_array_size_bytes_rl()
494 type = get_type(expr->left); in get_array_size_bytes_rl()
504 size = get_array_size_bytes(expr->left); in get_array_size_bytes_rl()
511 ret = get_stored_size_bytes(expr); in get_array_size_bytes_rl()
515 size = get_stored_size_end_struct_bytes(expr); in get_array_size_bytes_rl()
520 size = get_real_array_size(expr); in get_array_size_bytes_rl()
522 return alloc_int_rl(elements_to_bytes(expr, size)); in get_array_size_bytes_rl()
525 size = get_size_from_initializer(expr); in get_array_size_bytes_rl()
527 return alloc_int_rl(elements_to_bytes(expr, size)); in get_array_size_bytes_rl()
529 size = get_bytes_from_address(expr); in get_array_size_bytes_rl()
533 ret = size_from_db(expr); in get_array_size_bytes_rl()
542 int get_array_size_bytes(struct expression *expr) in get_array_size_bytes() argument
547 rl = get_array_size_bytes_rl(expr); in get_array_size_bytes()
555 int get_array_size_bytes_max(struct expression *expr) in get_array_size_bytes_max() argument
560 rl = get_array_size_bytes_rl(expr); in get_array_size_bytes_max()
572 int get_array_size_bytes_min(struct expression *expr) in get_array_size_bytes_min() argument
577 rl = get_array_size_bytes_rl(expr); in get_array_size_bytes_min()
594 int get_array_size(struct expression *expr) in get_array_size() argument
596 if (!expr) in get_array_size()
598 return bytes_to_elements(expr, get_array_size_bytes_max(expr)); in get_array_size()
601 static struct expression *strip_ampersands(struct expression *expr) in strip_ampersands() argument
605 if (expr->type != EXPR_PREOP) in strip_ampersands()
606 return expr; in strip_ampersands()
607 if (expr->op != '&') in strip_ampersands()
608 return expr; in strip_ampersands()
609 type = get_type(expr->unop); in strip_ampersands()
611 return expr; in strip_ampersands()
612 return expr->unop; in strip_ampersands()
635 static void store_alloc(struct expression *expr, struct range_list *rl) in store_alloc() argument
645 get_state_expr(my_size_id, expr)) in store_alloc()
646 set_state_expr(my_size_id, expr, alloc_estate_rl(rl)); in store_alloc()
648 type = get_type(expr); in store_alloc()
661 info_record_alloction(expr, rl); in store_alloc()
664 static bool is_array_base(struct expression *expr) in is_array_base() argument
668 type = get_type(expr); in is_array_base()
674 static void match_array_assignment(struct expression *expr) in match_array_assignment() argument
682 if (expr->op != '=') in match_array_assignment()
685 left = strip_expr(expr->left); in match_array_assignment()
686 right = strip_expr(expr->right); in match_array_assignment()
720 static void match_alloc(const char *fn, struct expression *expr, void *_size_arg) in match_alloc() argument
727 right = strip_expr(expr->right); in match_alloc()
731 store_alloc(expr->left, rl); in match_alloc()
734 static void match_calloc(const char *fn, struct expression *expr, void *_param) in match_calloc() argument
741 right = strip_expr(expr->right); in match_calloc()
746 store_alloc(expr->left, rl); in match_calloc()
748 store_alloc(expr->left, size_to_rl(UNKNOWN_SIZE)); in match_calloc()
751 static void match_page(const char *fn, struct expression *expr, void *_unused) in match_page() argument
758 store_alloc(expr->left, alloc_rl(page_size, page_size)); in match_page()
761 static void match_strndup(const char *fn, struct expression *expr, void *unused) in match_strndup() argument
767 fn_expr = strip_expr(expr->right); in match_strndup()
771 store_alloc(expr->left, size_to_rl(size.value)); in match_strndup()
773 store_alloc(expr->left, size_to_rl(UNKNOWN_SIZE)); in match_strndup()
778 static void match_alloc_pages(const char *fn, struct expression *expr, void *_order_arg) in match_alloc_pages() argument
785 right = strip_expr(expr->right); in match_alloc_pages()
796 store_alloc(expr->left, alloc_rl(sval, sval)); in match_alloc_pages()
821 static void match_call(struct expression *expr) in match_call() argument
829 FOR_EACH_PTR(expr->args, arg) { in match_call()
844 sql_insert_caller_info(expr, BUF_SIZE, i, "$", show_rl(rl)); in match_call()
866 static void print_returned_allocations(int return_id, char *return_ranges, struct expression *expr) in print_returned_allocations() argument
873 rl = get_array_size_bytes_rl(expr); in print_returned_allocations()
874 param_math = get_allocation_math(expr); in print_returned_allocations()