It's not a perfect solution, but could you try putting the ifth rule last
instead of first?
julia
On Wed, 9 Oct 2013, Nic Volanschi (R&D) wrote:
> Hi,
>
> I've got a problem in a program using a (well, contorted) macro, whose
> real definition is passed via the "--macro-file macros.h" option:
>
> --- macros.h:
> #define TEST(X, Y) \
> if((X) >= (Y))
>
> #define TRNIV1 TEST(NIVTRCUSR, NIVTRC1)
> --- EOF macros.h
>
> I have a whole lot of uses of this macro and it does work fine in most
> programs, it's just that in the following program it prevents some rule
> applications:
>
> --- test.c:
> #include <stdio.h>
> #define NIVTRCUSR 0
> extern short lectObjCU();
> short calculeEPC() {
> short sRet = 0;
> short sNBPT = 0;
> double dMtEnjEngChTmp = 0;
>
> sRet = lectObjCU();
> if (sRet != 0) {
> printf("GENFMG61: Erreur lectObjCU \n");
> }
>
> for(sNBPT = 1; sNBPT < 11; sNBPT++) {
> TRNIV1
> printf("dMtEnjEngChTmp: %lf\n", dMtEnjEngChTmp);
> }
> return sRet;
> }
> --- EOF test.c
>
> The rules I'm trying to apply are:
>
> --- test.cocci:
> @@ statement s1; @@
> if(...)
> +{mwtrace();/*ifth*/
> s1
> +}
>
> @@ statement s1, s2; @@
> if(...)
> +{mwtrace();/*ifelth*/
> s1
> +}
> else
> +{mwtrace();/*ifelel*/
> s2
> +}
>
> @@ statement s1, s2; @@
> if(...) s1 else s2
> +mwtrace();/*endifel*/
>
> @@ statement s1; @@
> for(...;...;...)
> +{mwtrace();/*for*/
> s1
> +}
>
> @@ statement s1; @@
> for(...;...;...) s1
> +mwtrace();/*endfor*/
>
> @@ type T; identifier f; @@
> T f(...) {
> +mwtrace();/*fun*/
> ...
> }
> --- EOF test.cocci
>
> The command I use is:
> spatch --macro-file macros.h --ibm -c test.cocci
> --allow-inconsistent-paths --out-place test.c
>
> As a result, the rules adding /*fun*/, /*for*/ and /*endfor*/ are not
> applied (and replacing the option --macro-file by --macro-file-builtins
> changes nothing).
> I think this is really a combination of factors, because:
> - when I take out the if, or move it after the for, it works
> - when I comment out the "TRNIV1", it works
>
> So is it possible to fix or turn around this problem?
> Cheers,
> Nic.
>
>
> _______________________________________________
> Cocci mailing list
> [email protected]
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci