From dd6e790090a36983077589754a10f8b3165c81ac Mon Sep 17 00:00:00 2001 From: Afonso Bordado Date: Tue, 9 Aug 2022 17:03:38 +0100 Subject: [PATCH] cranelift: Fuzz Argument Extensions in clif-fuzzer (#4589) --- cranelift/fuzzgen/src/function_generator.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/cranelift/fuzzgen/src/function_generator.rs b/cranelift/fuzzgen/src/function_generator.rs index e0eb43602d..60823e306e 100644 --- a/cranelift/fuzzgen/src/function_generator.rs +++ b/cranelift/fuzzgen/src/function_generator.rs @@ -1,4 +1,4 @@ -use crate::codegen::ir::ValueList; +use crate::codegen::ir::{ArgumentExtension, ArgumentPurpose, ValueList}; use crate::config::Config; use anyhow::Result; use arbitrary::{Arbitrary, Unstructured}; @@ -287,9 +287,21 @@ where } fn generate_abi_param(&mut self) -> Result { - // TODO: Generate more advanced abi params (structs/purposes/extensions/etc...) - let ty = self.generate_type()?; - Ok(AbiParam::new(ty)) + let value_type = self.generate_type()?; + // TODO: There are more argument purposes to be explored... + let purpose = ArgumentPurpose::Normal; + let extension = match self.u.int_in_range(0..=2)? { + 2 => ArgumentExtension::Sext, + 1 => ArgumentExtension::Uext, + _ => ArgumentExtension::None, + }; + + Ok(AbiParam { + value_type, + purpose, + extension, + legalized_to_pointer: false, + }) } fn generate_signature(&mut self) -> Result {