yuejia / Milu

A higher order mutation testing tool
Other
58 stars 29 forks source link

[Bug Report] Milu prints additional ";" between *if* and *else* statements #5

Open FanWuUCL opened 8 years ago

FanWuUCL commented 8 years ago

Bug description: When Milu generates mutants, in some special cases, Milu will insert an additional ";" symbol between paired if and else statements, causing the mutants failed being compiled.

How to recreate the bug:

  1. Write the following code to a file, say "bug.c":

    include

static void func( int new_state ) { int* arr = 0; if ( new_state==0 ) arr = (int ) malloc( 8 ); else arr = (int ) malloc( 16 ); }

void main(int argc, char\ argv){ func(0); }

  1. Run Milu to generate mutants on "bug.c", with the default set of operators, but add option "--debug=src": $ path\to\milu --debug=src bug.c
  2. The output will be the original code being parsed and printed without any modification:

    include

static void func ( int new_state ) { int * arr = 0 ; if ( new_state == 0 ) arr = ( int * ) malloc ( 8 ) ; ; else arr = ( int * ) malloc ( 16 ) ; ;

}

; void main ( int argc , char * * argv ) { func ( 0 ) ; }

  1. There is a redundant ";" symbol between the if and the else statement. If you compile this output, the compiler will complain about 'else' without a previous 'if'.

\ Temporary Solution for users:* Put brackets around the if-statement block like this: if ( new_state==0 ) { arr = (int ) malloc( 8 ); } else arr = (int *) malloc( 16 );