SVF-tools / Test-Suite

PTABen: Micro-benchmark Suite for Pointer Analysis
72 stars 38 forks source link

Two MAYALIAS in `cs_tests/recur8.c` should be NOALIAS? #26

Open taquangtrung opened 3 years ago

taquangtrung commented 3 years ago

Hi,

For the two MAYALIAS in this test case, I think they should be NOALIAS?

This is because c and &b are aliases, and b, z1, z2 are variables declared differently, hence &b, &z1, &z2 cannot be aliases?

Could you advise if my understanding is correct?

// cs_tests/recur8.c

#include "aliascheck.h"
int z1,z2;
void foo(int **p);
void bar(int **a){
    int *c, b;
    *a = &b;
    c = *a;
    MUSTALIAS(c,&b);
    MAYALIAS(c,&z1);   // it should be no-alias if strong updates are enabled
    MAYALIAS(c,&z2);
    foo(a);
}

void foo(int** p){
    p = malloc(10);
    *p = &z2;
    bar(p);
}

int main(){
    int **x, *y;
    x = &y;
    y = &z1;
    foo(x);
}
yuleisui commented 3 years ago

Ideally, yes. but again, this is a conservative case, since heap strong updates are not enabled by the underlying analysis.

taquangtrung commented 3 years ago

Hi again,

I'm working on a flow-sensitive analysis technique. For this program, it is non-terminating due to the recursive call of foo and bar, and my analysis tool doesn't terminate as well. Could you advise if this test case can be fixed? E.g., by adding a base case to the recursive call?

Thank you!

yuleisui commented 3 years ago

Just done by adding a termination condition: e62267203ddcddbe8e1f4a5a6b866eff8f9e68c9