MCPcopy Create free account
hub / github.com/FuzzAnything/PromptFuzz / is_sizeof_expr_of_var

Function is_sizeof_expr_of_var

src/program/infer/static_infer.rs:587–620  ·  view source on GitHub ↗

Whether this arg is the sizeof of var_name.

(integer_arg: &Node, array_name: &str, visitor: &Visitor)

Source from the content-addressed store, hash-verified

585
586 /// Whether this arg is the sizeof of var_name.
587 pub fn is_sizeof_expr_of_var(integer_arg: &Node, array_name: &str, visitor: &Visitor) -> bool {
588 let integer_arg = strip_prefix(integer_arg);
589 if let Clang::UnaryExprOrTypeTraitExpr(ue) = &integer_arg.kind {
590 if !ue.is_sizeof() {
591 return false;
592 }
593 if let Some(inner_name) = ue.get_dre_child_name(integer_arg) {
594 if inner_name == array_name {
595 return true;
596 }
597 }
598 if let Some(sizeof_ty) = &ue.arg_type {
599 let sizeof_ty_name = sizeof_ty.get_type_name();
600 if let Some(var) = visitor.find_vardecl(array_name) {
601 if let Clang::VarDecl(vd) = &var.kind {
602 let array_ty_name = vd.get_type().get_type_name();
603 if array_ty_name == sizeof_ty_name {
604 return true;
605 }
606 }
607 }
608 }
609 } else if let Clang::BinaryOperator(bo) = &integer_arg.kind {
610 let left = bo.get_lhs(integer_arg);
611 let right = bo.get_rhs(integer_arg);
612 return is_sizeof_expr_of_var(left, array_name, visitor)
613 || is_sizeof_expr_of_var(right, array_name, visitor);
614 } else if let Clang::DeclRefExpr(dre) = &integer_arg.kind {
615 if let Some(init) = dre.get_var_init(visitor) {
616 return is_sizeof_expr_of_var(init, array_name, visitor);
617 }
618 }
619 false
620 }
621
622 fn is_size_of_var(alloc_arg: &Node, integer_arg: &Node, visitor: &Visitor) -> bool {
623 let alloc_arg = strip_prefix(alloc_arg);

Callers 1

infer_constraintsFunction · 0.85

Calls 9

strip_prefixFunction · 0.85
is_sizeofMethod · 0.80
get_dre_child_nameMethod · 0.80
get_type_nameMethod · 0.80
find_vardeclMethod · 0.80
get_typeMethod · 0.80
get_lhsMethod · 0.80
get_rhsMethod · 0.80
get_var_initMethod · 0.80

Tested by

no test coverage detected