From 2a5720d10a9db38817b7bfce1522a9fde0a501e1 Mon Sep 17 00:00:00 2001 From: grandizzy Date: Mon, 18 Nov 2024 09:06:14 +0200 Subject: [PATCH 1/3] fix: set inliner to None in with_via_ir_minimum_optimization --- crates/artifacts/solc/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/artifacts/solc/src/lib.rs b/crates/artifacts/solc/src/lib.rs index b3c92595a..e54a45481 100644 --- a/crates/artifacts/solc/src/lib.rs +++ b/crates/artifacts/solc/src/lib.rs @@ -467,7 +467,8 @@ impl Settings { self.via_ir = Some(true); self.optimizer.details = Some(OptimizerDetails { peephole: Some(false), - inliner: Some(false), + // Set to None as it is only supported for solc starting from 0.8.5. + inliner: None, jumpdest_remover: Some(false), order_literals: Some(false), deduplicate: Some(false), From db74ff491ae1e0efeb3572210aa13a2b771f3fd3 Mon Sep 17 00:00:00 2001 From: grandizzy Date: Mon, 18 Nov 2024 11:26:15 +0200 Subject: [PATCH 2/3] Sanitize inliner solc setting --- crates/artifacts/solc/src/lib.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/artifacts/solc/src/lib.rs b/crates/artifacts/solc/src/lib.rs index e54a45481..2665f0423 100644 --- a/crates/artifacts/solc/src/lib.rs +++ b/crates/artifacts/solc/src/lib.rs @@ -314,6 +314,14 @@ impl Settings { self.via_ir = None; } + const V0_8_5: Version = Version::new(0, 8, 5); + if *version < V0_8_5 { + // introduced in 0.8.5 + if let Some(optimizer_details) = &mut self.optimizer.details { + optimizer_details.inliner = None; + } + } + const V0_8_7: Version = Version::new(0, 8, 7); if *version < V0_8_7 { // lower the disable version from 0.8.10 to 0.8.7, due to `divModNoSlacks`, @@ -467,8 +475,7 @@ impl Settings { self.via_ir = Some(true); self.optimizer.details = Some(OptimizerDetails { peephole: Some(false), - // Set to None as it is only supported for solc starting from 0.8.5. - inliner: None, + inliner: Some(false), jumpdest_remover: Some(false), order_literals: Some(false), deduplicate: Some(false), From 59dc0235acf01027c0efd9816d0e0e9a15581ca2 Mon Sep 17 00:00:00 2001 From: grandizzy Date: Mon, 18 Nov 2024 11:39:09 +0200 Subject: [PATCH 3/3] Sanitized inliner --- crates/artifacts/solc/src/lib.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/crates/artifacts/solc/src/lib.rs b/crates/artifacts/solc/src/lib.rs index 2665f0423..218689c0f 100644 --- a/crates/artifacts/solc/src/lib.rs +++ b/crates/artifacts/solc/src/lib.rs @@ -2229,4 +2229,20 @@ mod tests { let content = fs::read_to_string(path).unwrap(); let _output: CompilerOutput = serde_json::from_str(&content).unwrap(); } + + // + #[test] + fn can_sanitize_optimizer_inliner() { + let version: Version = "0.8.4".parse().unwrap(); + let settings = Settings::default().with_via_ir_minimum_optimization(); + + let input = + SolcInput { language: SolcLanguage::Solidity, sources: Default::default(), settings }; + + let i = input.clone().sanitized(&version); + assert!(i.settings.optimizer.details.unwrap().inliner.is_none()); + + let i = input.sanitized(&Version::new(0, 8, 5)); + assert_eq!(i.settings.optimizer.details.unwrap().inliner, Some(false)); + } }