@r1@ expression E1, E2; identifier fld; identifier f; parameter list ARGS; @@ f(ARGS) { E1->fld = E2; } @generated@ expression r1.E1, r1.E2; identifier r1.fld; identifier r1.f; expression list r1.ARGS; @@ - E1->fld = E2; + f(ARGS); // -------------------------------------------------------------- @r2@ constant C; local idexpression i; expression E1,E2; identifier f,fld; parameter list ARGS; @@ f(ARGS) { ( return C; // a trivial result | return ERR_PTR(C); // a trivial result | return i; // a trivial result | return E1->fld; // the case of interest | return E2; // anything else ) } @generated@ expression r2.E1,E2; identifier r2.f,r2.fld; expression list r2.ARGS; @@ ( E1->fld = E2 | - E1->fld + f(ARGS) ) @generated@ expression r2.E2; identifier r2.f; expression list r2.ARGS; @@ - (E2) + f(ARGS) // -------------------------------------------------------------- @r3@ identifier f,f1; expression list E; parameter list ARGS; @@ f(ARGS) { ( BUG(); | f1(E); ) } @generated@ expression list r3.E; identifier r3.f1, r3.f; expression list r3.ARGS; @@ - f1(E); + f(ARGS);