Dear all,
I am using C-reduce to reduce some C testcases produced by yarpgen,
that result in miscompilations, i.e., my target compiler (clang based)
produces two binaries, respectively with "O0" and "O3", that, when
executed, output a different result of the checksum.
I have written an interestingness test that looks quite complete to
me. Basically, I started with the one suggested on the C-reduce
webpage (https://embed.cs.utah.edu/creduce/using/wrong1/test1.sh) and
then added a compilation stage with asan, ubsan and msan (for both the
"O0" and "O3" optimization levels). I also have tried by enabling the
flag "-Werror=uninitialized", even if it could be redundant, as I have
msan.
The command line that I use then is simply:
creduce ./test_interestingness.sh driver.c func.c init.h
where driver.c, func.c and init.h are the files generated by yarpgen.
That said, the problem I face is that when C-reduce ends its job I
obtain two reduced driver.c and func.c files where the test() function
invocation is messed up. Usually in the driver.c it is declared with
the following signature:
void test()
and then invoked in the driver.c itself with a certain number N of
parameters. Surprisingly, at least for me, in the func.c file, the
same test() function is invoked with a number M of parameters where N
!= M.
I have to underline that I am testing the arm backend of the compiler
and thus, the elf binaries I obtain need to run on an Aarch64
emulator, while the sanitized versions of the same code
(asan,ubsan,msan) run on x86. I attach in the current email the
interestingness script and the reduced testcases I obtain. If you want
to generate the original yarpgen testcases, the yarpgen version is :
yarpgen version 2.0 (build fc8851a on 2022:10:30)
invoked with the --std=c flag and the seed is 2149690884.
Unfortunately I cannot share the target compiler as it is private,
sorry for that. Is there any additional check or flag I can add to my
interestingness test to enforce the fact that the test() function
should be declared and invoked coherently ?
Best Regards,
Alessandro