squaresLab / genprog-code

GenProg: heuristic, GP-based automatic program repair for C.
92 stars 27 forks source link

Question: how to determine that vstmt/vexpr RVAL contains a function call in GenProg AST #34

Open pdreiter opened 4 years ago

pdreiter commented 4 years ago

I’m stuck and I hope that perhaps that either of you might have some insight on the GenProg code with respect to the AST tree. My goal is to determine the coverage-based call tree statically given a specific coverage point.

So far, I have been able to: 1) fix some of the underlying issues with the cdiff.ml related content (returned data structure in fundec_to_ast/internal_structural_signature/map_union) 2) reuse/extend the basic cdiff functionality to get the parent/child relationship of the AST tree 3) correlate the cdiff numbering scheme to the sid scheme used in the covVisitor.

However, when reviewing the results, it looks like when the RVAL is a function call, this parent->child relationship isn’t caught.

I’ve been reviewing the cil.ml code and it looks like I could potentially analyze the RVAL in an overridden vexpr method to see if its of type TFun, but I thought I would check with you, the expert(s), to get your thoughts. I see something like the visitCilExpr (line 5121 of cil.ml) that is similar to what I’m thinking, but I’m a bit lost.