Skip to content

Commit d9587b6

Browse files
committed
Single function arithmetic programs
1 parent cff6c52 commit d9587b6

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

difftest/src/main.rs

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(byte_slice_trim_ascii)]
2+
#![feature(iter_intersperse)]
23

34
use core::panic;
45
use std::{collections::HashMap, path::PathBuf, str::FromStr};
@@ -9,6 +10,7 @@ use difftest::{
910
backend::{Backend, Cranelift, Miri, LLVM},
1011
run_diff_test,
1112
};
13+
use log::{info, error};
1214

1315
fn main() {
1416
env_logger::init();
@@ -46,5 +48,19 @@ fn main() {
4648

4749
backends.insert("llvm", Box::new(LLVM {}));
4850

49-
run_diff_test(&source, &backends);
51+
info!(
52+
"Difftesting {} with {}",
53+
source.as_os_str().to_string_lossy(),
54+
backends
55+
.keys()
56+
.copied()
57+
.intersperse(", ")
58+
.collect::<String>()
59+
);
60+
let results = run_diff_test(&source, &backends);
61+
if results.len() == 1 {
62+
info!("{} is all the same", source.as_os_str().to_string_lossy());
63+
} else {
64+
error!("{} didn't pass: {:?}", source.as_os_str().to_string_lossy(), results);
65+
}
5066
}

fuzz.sh

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash
2+
mkdir -p out
3+
for seed in {0..10}; do
4+
target/release/fuzz $seed > out/$seed.rs
5+
target/release/difftest out/$seed.rs
6+
done

fuzz/src/generation.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ trait GenerateStatement {
339339
impl GenerateStatement for GenerationCtx {
340340
fn generate_assign(&mut self) -> Result<Statement> {
341341
let lhs_choices = PlaceSelector::new().maybe_uninit().into_iter(&self.pt);
342-
342+
343343
self.make_choice(lhs_choices, |lhs| {
344344
debug!(
345345
"generating an assignment statement with lhs ty {}",
@@ -551,10 +551,11 @@ impl GenerationCtx {
551551

552552
self.enter_new_fn(&arg_tys, Ty::I32);
553553

554-
let statement_count = self.rng.get_mut().gen_range(0..=16);
555-
debug!("generating a bb with {statement_count} statements");
554+
let ret_node = self.pt.get_node(&Place::RETURN_SLOT).unwrap();
555+
while !self.pt.is_place_init(ret_node) {
556+
self.choose_statement();
557+
}
556558

557-
(0..statement_count).for_each(|_| self.choose_statement());
558559
self.choose_terminator();
559560
self.program
560561
}

fuzz/src/main.rs

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ mod ty;
1010
use std::env::args;
1111

1212
use crate::generation::GenerationCtx;
13+
use log::info;
1314
use mir::{serialize::Serialize, syntax::*};
1415
use petgraph::dot::Dot;
1516
use rand::{rngs::SmallRng, SeedableRng};
@@ -43,6 +44,7 @@ fn main() {
4344
// println!("{dot:?}");
4445

4546
let seed: u64 = args().skip(1).next().unwrap().parse().unwrap();
47+
info!("Generating a program with seed {seed}");
4648
let genctxt = GenerationCtx::new(seed);
4749
let program = genctxt.generate();
4850
println!("{}", program.serialize());

0 commit comments

Comments
 (0)