summaryrefslogtreecommitdiffstats
path: root/development/csmith/compiler_test.diff
diff options
context:
space:
mode:
Diffstat (limited to 'development/csmith/compiler_test.diff')
-rw-r--r--development/csmith/compiler_test.diff320
1 files changed, 320 insertions, 0 deletions
diff --git a/development/csmith/compiler_test.diff b/development/csmith/compiler_test.diff
new file mode 100644
index 0000000000..5351e2f4c3
--- /dev/null
+++ b/development/csmith/compiler_test.diff
@@ -0,0 +1,320 @@
+diff -Naur csmith-csmith-2.3.0/scripts/compiler_test.pl csmith-csmith-2.3.0.patched/scripts/compiler_test.pl
+--- csmith-csmith-2.3.0/scripts/compiler_test.pl 2017-06-21 16:50:24.000000000 -0400
++++ csmith-csmith-2.3.0.patched/scripts/compiler_test.pl 2023-06-10 17:08:54.342868470 -0400
+@@ -29,7 +29,7 @@
+
+ #################################################################
+
+-use strict;
++use strict;
+ use File::stat;
+
+ #################################################################
+@@ -39,7 +39,7 @@
+ my $MIN_PROGRAM_SIZE = 8000;
+
+ # kill Csmith after this many seconds
+-my $CSMITH_TIMEOUT = 90;
++my $CSMITH_TIMEOUT = 90;
+
+ # kill a compiler after this many seconds
+ my $COMPILER_TIMEOUT = 120;
+@@ -48,7 +48,7 @@
+ my $PROG_TIMEOUT = 8;
+
+ # extra options here
+-my $CSMITH_USER_OPTIONS = " --bitfields --packed-struct";
++my $CSMITH_USER_OPTIONS = " --bitfields --packed-struct";
+
+ ################# end user-configurable stuff ###################
+ #################################################################
+@@ -56,7 +56,7 @@
+ #################################################################
+ # TODO
+ #
+-# - make it easy to plugin an emulator for testing embedded compilers
++# - make it easy to plugin an emulator for testing embedded compilers
+ # - automatically fire up a reducer when a bug is found
+ # - support "reference compilers" that supply checksums but that we're
+ # not testing
+@@ -66,14 +66,13 @@
+
+ my $RUN_PROGRAM = 0;
+
+-my $CSMITH_HOME = $ENV{"CSMITH_HOME"};
+-my $good = 0;
++my $good = 0;
+ my $crash_bug = 0;
+ my $wrongcode_bug = 0;
+ my $csmith_bug = 0;
+
+-my $HEADER = "-I$CSMITH_HOME/runtime";
+-my $CYGWIN_HEADER = "-I`cygpath -d ${CSMITH_HOME}/runtime`";
++my $HEADER = "-I/usr/include/csmith";
++my $CYGWIN_HEADER = "-I`cygpath -d /usr/include/csmith`";
+ my $COMPILE_OPTIONS = "";
+ my @COMPILERS;
+
+@@ -81,11 +80,11 @@
+ my ($fn, $match) = @_;
+ open INF, "<$fn" or die;
+ while (my $line = <INF>) {
+- $line =~ s/\r?\n?$//; # get rid of LF/CR
++ $line =~ s/\r?\n?$//; # get rid of LF/CR
+ if ($line =~ /$match/) {
+ close INF;
+ return $1;
+- }
++ }
+ }
+ close INF;
+ return "";
+@@ -100,14 +99,14 @@
+
+ # properly parse the return value from system()
+ sub runit ($$$) {
+- my ($cmd, $timeout, $out) = @_;
++ my ($cmd, $timeout, $out) = @_;
+ my $res;
+ if ($RUN_PROGRAM) {
+ $res = system "timeout $timeout $cmd > $out 2>&1";
+ } else {
+ $res = system "$cmd > $out 2>&1";
+ }
+- my $success = 0;
++ my $success = 0;
+ if ($? == -1) {
+ print "can't execute $cmd\n";
+ }
+@@ -129,36 +128,36 @@
+ }
+
+ # compile a program and execute
+-# return code 0: normal;
+-# 1: compiler crashes;
+-# 2: compiler hangs;
+-# 3: executable crashes;
++# return code 0: normal;
++# 1: compiler crashes;
++# 2: compiler hangs;
++# 3: executable crashes;
+ # 4: executable hangs
+ sub compile_and_run($$$$) {
+- my ($compiler, $src_file, $exe, $out) = @_;
+- my $command = "$compiler $src_file $COMPILE_OPTIONS $HEADER -o $exe";
++ my ($compiler, $src_file, $exe, $out) = @_;
++ my $command = "$compiler $src_file $COMPILE_OPTIONS $HEADER -o $exe";
+
+ my @a = split(" ", $compiler);
+ # special treatment of MS compiler: convert header path to unix-style
+ if ($a[0] =~ /cl$/) {
+- $command = "$compiler $src_file $COMPILE_OPTIONS $CYGWIN_HEADER -o $exe";
+- }
++ $command = "$compiler $src_file $COMPILE_OPTIONS $CYGWIN_HEADER -o $exe";
++ }
+
+ # compile random program
+- my ($res, $exit_value) = runit($command, $COMPILER_TIMEOUT, "compiler.out");
++ my ($res, $exit_value) = runit($command, $COMPILER_TIMEOUT, "compiler.out");
+ # print "after run compiler: $res, $exit_value\n";
+ if (($res == 0) || (!(-e $exe))) {
+ # exit code 124 means time out
+- return ($exit_value == 124 ? 2 : 1);
++ return ($exit_value == 124 ? 2 : 1);
+ }
+
+- # run random program
++ # run random program
+ if ($RUN_PROGRAM) {
+ ($res, $exit_value) = runit("./$exe", $PROG_TIMEOUT, $out);
+ # print "after run program: $res, $exit_value\n";
+ if (($res == 0) || (!(-e $out))) {
+ # exit code 124 means time out
+- return ($exit_value == 124 ? 4 : 3);
++ return ($exit_value == 124 ? 4 : 3);
+ }
+ }
+ return 0;
+@@ -169,35 +168,35 @@
+ # -1: hangs (not interesting)
+ # 0: normal, but found no compiler error (not interesting)
+ # 1: found compiler crash error(s)
+-# 2: found compiler wrong code error(s)
++# 2: found compiler wrong code error(s)
+ sub evaluate_program ($) {
+- my ($test_file) = @_;
++ my ($test_file) = @_;
+ my @checksums;
+- my @tested_compilers;
++ my @tested_compilers;
+ my $interesting = 0;
+- my $i = 0;
+- foreach my $compiler (@COMPILERS) {
++ my $i = 0;
++ foreach my $compiler (@COMPILERS) {
+ my $out = "out$i.log";
+ my $exe = "a.out$i";
+- $i++;
++ $i++;
+ my $res = compile_and_run($compiler, $test_file, $exe, $out);
+
+ if ($res) {
+- if ($res == 1 || $res == 2) {
+- write_bug_desc_to_file($test_file,
+- "Compiler error! Can't compile with $compiler $COMPILE_OPTIONS $HEADER");
++ if ($res == 1 || $res == 2) {
++ write_bug_desc_to_file($test_file,
++ "Compiler error! Can't compile with $compiler $COMPILE_OPTIONS $HEADER");
+ $interesting = 1;
+ }
+- elsif ($res == 3) {
+- write_bug_desc_to_file($test_file, "random program crashed!");
++ elsif ($res == 3) {
++ write_bug_desc_to_file($test_file, "random program crashed!");
+ # random program crashes, a likely wrong-code bug, but
+ # can't rule out the probablity of a Csmith bug
+- $interesting = -2;
++ $interesting = -2;
+ last;
+ } else {
+- print "random program hangs!\n";
++ print "random program hangs!\n";
+ # program hangs, not interesting
+- $interesting = -1;
++ $interesting = -1;
+ last;
+ }
+ }
+@@ -205,23 +204,23 @@
+ if ($RUN_PROGRAM) {
+ die "cannot find $out.\n" if (!(-e $out));
+ my $sum = read_value_from_file($out, "checksum = (.*)");
+- $interesting = 2 if
+- (scalar(@checksums) > 0 && $sum ne $checksums[0]);
++ $interesting = 2 if
++ (scalar(@checksums) > 0 && $sum ne $checksums[0]);
+ push @checksums, $sum;
+ push @tested_compilers, "$compiler $COMPILE_OPTIONS";
+- }
++ }
+ }
+- }
++ }
+ if ($interesting >= 1) {
+- if ($interesting == 2) {
+- write_bug_desc_to_file ($test_file,
+- "Found checksum difference between compiler implementations");
++ if ($interesting == 2) {
++ write_bug_desc_to_file ($test_file,
++ "Found checksum difference between compiler implementations");
+ for (my $i=0; $i < scalar (@checksums); $i++) {
+- write_bug_desc_to_file ($test_file,
++ write_bug_desc_to_file ($test_file,
+ "$tested_compilers[$i]: $checksums[$i]");
+ }
+ }
+- write_bug_desc_to_file($test_file,
++ write_bug_desc_to_file($test_file,
+ "please refer to http://embed.cs.utah.edu/csmith/using.html on how to report a bug");
+ }
+ system "rm -f out*.log a.out* test*.obj compiler.out csmith.out";
+@@ -237,30 +236,30 @@
+ # run Csmith until generate a big enough program
+ while (1) {
+ unlink $cfile;
+- my $cmd = "$CSMITH_HOME/src/csmith $CSMITH_USER_OPTIONS --output $cfile";
+- my ($res, $exitcode) = runit($cmd, $CSMITH_TIMEOUT, "csmith.out");
++ my $cmd = "csmith $CSMITH_USER_OPTIONS --output $cfile";
++ my ($res, $exitcode) = runit($cmd, $CSMITH_TIMEOUT, "csmith.out");
+ # print "after run csmith: $res, $exitcode\n";
+-
+- $seed = read_value_from_file($cfile, "Seed:\\s+([0-9]+)");
+- die "Random program $cfile has no seed information!\n" if (!$seed);
++
++ $seed = read_value_from_file($cfile, "Seed:\\s+([0-9]+)");
++ die "Random program $cfile has no seed information!\n" if (!$seed);
+
+ if ($res == 0) {
+ print "CSMITH BUG FOUND: number $csmith_bug\n";
+ $csmith_bug++;
+- system "cp $cfile csmith_bug_${csmith_bug}.c";
+- next;
++ system "cp $cfile csmith_bug_${csmith_bug}.c";
++ next;
+ }
+- else {
++ else {
+ $filesize = stat("$cfile")->size;
+- # print "$cfile is $filesize bytes\n";
++ # print "$cfile is $filesize bytes\n";
+ last if ($filesize >= $MIN_PROGRAM_SIZE);
+ }
+ }
+
+ print "seed= $seed, size= $filesize\n";
+-
++
+ # test if the random program is interesting
+- my $ret = evaluate_program($cfile);
++ my $ret = evaluate_program($cfile);
+ if ($ret >= 0) {
+ $good++;
+ print "GOOD PROGRAM: number $good\n";
+@@ -273,27 +272,21 @@
+ print "LIKELY WRONG CODE ERROR FOUND: number $wrongcode_bug\n";
+ $wrongcode_bug++;
+ system "cp $cfile wrong${wrongcode_bug}.c";
+- }
+- } else {
++ }
++ } else {
+ print "BAD PROGRAM: doesn't count towards goal.\n";
+- }
++ }
+ unlink $cfile;
+ return $ret;
+ }
+
+ sub usage () {
+- print "usage: compiler_test.pl <test_case_count>(0 for unlimited) <config-file>\n";
++ print "usage: compiler_test <test_case_count>(0 for unlimited) <config-file>\n";
+ exit -1;
+ }
+
+ ########################### main ##################################
+
+-if (!(-f "$CSMITH_HOME/runtime/csmith.h")) {
+- print "Please point the environment variable CSMITH_HOME to the top-level\n";
+- print "directory of your Csmith tree before running this script.\n";
+- exit(-1);
+-}
+-
+ my $nargs = scalar(@ARGV);
+
+ if ($nargs == 2) {
+@@ -323,12 +316,12 @@
+ open INF, "<$infile" or die "Cannot read configuration file ${infile}.\n";
+ while (my $line = <INF>) {
+ chomp $line;
+- if ($line && !($line =~ /^\s*#/)) {
+- my $res = system ("echo \"int main() { return 0;}\" > foo.c ; $line foo.c > /dev/null 2>&1");
++ if ($line && !($line =~ /^\s*#/)) {
++ my $res = system ("echo \"int main() { return 0;}\" > foo.c ; $line foo.c > /dev/null 2>&1");
+ unlink "foo.c", "a.out";
+- die "cannot execute compiler $line\n" if ($res);
++ die "cannot execute compiler $line\n" if ($res);
+ push @COMPILERS, $line;
+- }
++ }
+ }
+ close INF;
+
+@@ -339,7 +332,7 @@
+ $i++;
+ }
+ print "\n";
+-}
++}
+
+ print "Total csmith errors found: $csmith_bug\n";
+ print "Total crash errors found: $crash_bug\n";