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.
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
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 ) ;
}
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 );
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:
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); }
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 ) ; }
\ 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 );