expression mutator: functions with side effects

I'm looking at a case in which a mutated expression calls a function with side-effects twice, causing the values in the execution to be different.

Checking fail: 
/home/gj/metamorphicCL/metamorphiccl/python/mmc_generate.py /home/gj/ocl/gcctestsuite/generic-c99/gcc.dg_atomic-op-4.c -o /home/gj/tmp/gcc.dg_atomic-op-4 --num-variants 2 --seed 221478 --percentageDead 15 --percentageExpr 10 --percentageGoto 20 --percentageSwitch 30 
#### 
/home/gj/metamorphicCL/metamorphiccl/python/mmc_check.py --dir /home/gj/tmp/gcc.dg_atomic-op-4 --cc gcc

Original function:

void test_sub_fetch()
{
    v = res = 20;
    count = 0;
    if (__atomic_sub_fetch(&v, count + 1, 0) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, 1, 1) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, count + 1, 2) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, 1, 3) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, count + 1, 4) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, count + 1, 5) != --res) {
        abort();
    }
}

Mutated and reduced function:

void test_sub_fetch()
{
    v = res = 20;
    count = 0;
    if (__atomic_sub_fetch(&v, count + 1,
            0) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, 1, 1) != --res) {
        abort();
    }

    if (__IDENTITY_ROOT(
            __atomic_sub_fetch(&v, count + 1, 2), (long long)((long long)((long long)(__IDENTITY_div_one((long long)((long long)((long long)((__atomic_sub_fetch(&v, count + 1, 2))))), (long long)(__ONE_ternary_guard_zero((long long)((long long)(((long long)(0)))), (long long)(0), (long long)((long long)(((long long)(__ONE_or_one_second((long long)((__atomic_sub_fetch(&v, count + 1, 2))), (long long)(((long long)(1))))))))))))))) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, 1, 3) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, count + 1, 4) != --res) {
        abort();
    }

    if (__atomic_sub_fetch(&v, count + 1, 5) != --res) {
        abort();
    }
}