diff --git a/.aztec-sync-commit b/.aztec-sync-commit index a4c0dea29a2..03f9d78d780 100644 --- a/.aztec-sync-commit +++ b/.aztec-sync-commit @@ -1 +1 @@ -57f3c9bdc99103862a165bc235efdc8ef01b4e92 +cf5b667c9566019853a5dc2a7f16ed024ab9182b diff --git a/acvm-repo/brillig/src/opcodes.rs b/acvm-repo/brillig/src/opcodes.rs index f2ba04a4d59..2054a34d459 100644 --- a/acvm-repo/brillig/src/opcodes.rs +++ b/acvm-repo/brillig/src/opcodes.rs @@ -171,7 +171,7 @@ pub enum ValueOrArray { pub enum BrilligOpcode { /// Takes the fields in addresses `lhs` and `rhs` /// Performs the specified binary operation - /// and stores the value in the `result` address. + /// and stores the value in the `result` address. BinaryFieldOp { destination: MemoryAddress, op: BinaryFieldOp, @@ -180,7 +180,7 @@ pub enum BrilligOpcode { }, /// Takes the `bit_size` size integers in addresses `lhs` and `rhs` /// Performs the specified binary operation - /// and stores the value in the `result` address. + /// and stores the value in the `result` address. BinaryIntOp { destination: MemoryAddress, op: BinaryIntOp, diff --git a/compiler/noirc_driver/src/contract.rs b/compiler/noirc_driver/src/contract.rs index 11fc1bb637a..6253f3e1814 100644 --- a/compiler/noirc_driver/src/contract.rs +++ b/compiler/noirc_driver/src/contract.rs @@ -57,4 +57,7 @@ pub struct ContractFunction { /// Names of the functions in the program. These are used for more informative debugging and benchmarking. pub names: Vec, + + /// Names of the unconstrained functions in the program. + pub brillig_names: Vec, } diff --git a/compiler/noirc_driver/src/lib.rs b/compiler/noirc_driver/src/lib.rs index f95c9de7c2c..b7bb07ad64a 100644 --- a/compiler/noirc_driver/src/lib.rs +++ b/compiler/noirc_driver/src/lib.rs @@ -484,6 +484,7 @@ fn compile_contract_inner( debug: function.debug, is_unconstrained: modifiers.is_unconstrained, names: function.names, + brillig_names: function.brillig_names, }); } diff --git a/test_programs/execution_success/sha256_var_witness_const_regression/Nargo.toml b/test_programs/execution_success/sha256_var_witness_const_regression/Nargo.toml new file mode 100644 index 00000000000..e8f3e6bbe64 --- /dev/null +++ b/test_programs/execution_success/sha256_var_witness_const_regression/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "sha256_var_witness_const_regression" +type = "bin" +authors = [""] +compiler_version = ">=0.33.0" + +[dependencies] \ No newline at end of file diff --git a/test_programs/execution_success/sha256_var_witness_const_regression/Prover.toml b/test_programs/execution_success/sha256_var_witness_const_regression/Prover.toml new file mode 100644 index 00000000000..7b91051c1a0 --- /dev/null +++ b/test_programs/execution_success/sha256_var_witness_const_regression/Prover.toml @@ -0,0 +1,2 @@ +input = [0, 0] +toggle = false \ No newline at end of file diff --git a/test_programs/execution_success/sha256_var_witness_const_regression/src/main.nr b/test_programs/execution_success/sha256_var_witness_const_regression/src/main.nr new file mode 100644 index 00000000000..97c4435d41d --- /dev/null +++ b/test_programs/execution_success/sha256_var_witness_const_regression/src/main.nr @@ -0,0 +1,9 @@ +fn main(input: [u8; 2], toggle: bool) { + let size: Field = 1 + toggle as Field; + assert(!toggle); + + let variable_sha = std::sha256::sha256_var(input, size as u64); + let constant_sha = std::sha256::sha256_var(input, 1); + + assert_eq(variable_sha, constant_sha); +} diff --git a/tooling/nargo_cli/src/cli/compile_cmd.rs b/tooling/nargo_cli/src/cli/compile_cmd.rs index 21cf9751a8b..85faf574a0a 100644 --- a/tooling/nargo_cli/src/cli/compile_cmd.rs +++ b/tooling/nargo_cli/src/cli/compile_cmd.rs @@ -181,30 +181,30 @@ fn compile_programs( .map(|p| p.into()) }; - let program_results: Vec> = binary_packages - .par_iter() - .map(|package| { - let (program, warnings) = compile_program( - file_manager, - parsed_files, - workspace, - package, - compile_options, - load_cached_program(package), - )?; - - let target_width = - get_target_width(package.expression_width, compile_options.expression_width); - let program = nargo::ops::transform_program(program, target_width); + let compile_package = |package| { + let (program, warnings) = compile_program( + file_manager, + parsed_files, + workspace, + package, + compile_options, + load_cached_program(package), + )?; + + let target_width = + get_target_width(package.expression_width, compile_options.expression_width); + let program = nargo::ops::transform_program(program, target_width); + + save_program_to_file(&program.into(), &package.name, workspace.target_directory_path()); + + Ok(((), warnings)) + }; - save_program_to_file( - &program.clone().into(), - &package.name, - workspace.target_directory_path(), - ); - Ok(((), warnings)) - }) - .collect(); + // Configure a thread pool with a larger stack size to prevent overflowing stack in large programs. + // Default is 2MB. + let pool = rayon::ThreadPoolBuilder::new().stack_size(4 * 1024 * 1024).build().unwrap(); + let program_results: Vec> = + pool.install(|| binary_packages.par_iter().map(compile_package).collect()); // Collate any warnings/errors which were encountered during compilation. collect_errors(program_results).map(|(_, warnings)| ((), warnings)) diff --git a/tooling/nargo_cli/src/cli/test_cmd.rs b/tooling/nargo_cli/src/cli/test_cmd.rs index 2b0c0fd58db..751d49e6427 100644 --- a/tooling/nargo_cli/src/cli/test_cmd.rs +++ b/tooling/nargo_cli/src/cli/test_cmd.rs @@ -81,23 +81,28 @@ pub(crate) fn run(args: TestCommand, config: NargoConfig) -> Result<(), CliError None => FunctionNameMatch::Anything, }; - let test_reports: Vec> = workspace - .into_iter() - .par_bridge() - .map(|package| { - run_tests::( - &workspace_file_manager, - &parsed_files, - package, - pattern, - args.show_output, - args.oracle_resolver.as_deref(), - Some(workspace.root_dir.clone()), - Some(package.name.to_string()), - &args.compile_options, - ) - }) - .collect::>()?; + // Configure a thread pool with a larger stack size to prevent overflowing stack in large programs. + // Default is 2MB. + let pool = rayon::ThreadPoolBuilder::new().stack_size(4 * 1024 * 1024).build().unwrap(); + let test_reports: Vec> = pool.install(|| { + workspace + .into_iter() + .par_bridge() + .map(|package| { + run_tests::( + &workspace_file_manager, + &parsed_files, + package, + pattern, + args.show_output, + args.oracle_resolver.as_deref(), + Some(workspace.root_dir.clone()), + Some(package.name.to_string()), + &args.compile_options, + ) + }) + .collect::>() + })?; let test_report: Vec<(String, TestStatus)> = test_reports.into_iter().flatten().collect(); if test_report.is_empty() { diff --git a/tooling/noirc_artifacts/src/contract.rs b/tooling/noirc_artifacts/src/contract.rs index 1afc7977aec..2b78b647037 100644 --- a/tooling/noirc_artifacts/src/contract.rs +++ b/tooling/noirc_artifacts/src/contract.rs @@ -72,6 +72,8 @@ pub struct ContractFunctionArtifact { deserialize_with = "ProgramDebugInfo::deserialize_compressed_base64_json" )] pub debug_symbols: ProgramDebugInfo, + + pub brillig_names: Vec, } impl From for ContractFunctionArtifact { @@ -82,6 +84,7 @@ impl From for ContractFunctionArtifact { custom_attributes: func.custom_attributes, abi: func.abi, bytecode: func.bytecode, + brillig_names: func.brillig_names, debug_symbols: ProgramDebugInfo { debug_infos: func.debug }, } }