From 8f812293a99809e3e71edccfc7f80bfeab639699 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 23 Dec 2025 04:10:37 +0100 Subject: [PATCH 1/3] [DeadCode] Add test for RemoveDoubleAssignRector with reset before throwing assignment Reproduces https://github.com/rectorphp/rector/issues/9569 --- .../keep_reset_before_throwing_assign.php.inc | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc diff --git a/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc b/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc new file mode 100644 index 00000000000..5427d9727b9 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc @@ -0,0 +1,24 @@ + From d3613286fa78def4dc04a4e8017c8ead7ddc81e0 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 24 Dec 2025 15:46:11 +0700 Subject: [PATCH 2/3] rename fixture --- ....php.inc => skip_reset_before_throwing_assign.php.inc} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/{keep_reset_before_throwing_assign.php.inc => skip_reset_before_throwing_assign.php.inc} (52%) diff --git a/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc b/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/skip_reset_before_throwing_assign.php.inc similarity index 52% rename from rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc rename to rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/skip_reset_before_throwing_assign.php.inc index 5427d9727b9..4f417375531 100644 --- a/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/keep_reset_before_throwing_assign.php.inc +++ b/rules-tests/DeadCode/Rector/Assign/RemoveDoubleAssignRector/Fixture/skip_reset_before_throwing_assign.php.inc @@ -1,14 +1,14 @@ Date: Wed, 24 Dec 2025 15:58:05 +0700 Subject: [PATCH 3/3] [DeadCode] Skip has side effect inside try {} on RemoveDoubleAssignRector --- rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php index 46d15c30a3e..a9181c0417f 100644 --- a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Expression; +use PhpParser\Node\Stmt\TryCatch; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\PhpParser\Enum\NodeGroup; use Rector\PhpParser\Node\BetterNodeFinder; @@ -110,6 +111,11 @@ public function refactor(Node $node): ?Node continue; } + // side effect may throw exception, and may be handled by catch block + if ($node instanceof TryCatch && $this->sideEffectNodeDetector->detectCallExpr($nextAssign->expr)) { + continue; + } + // remove current Stmt if will be overridden in next stmt unset($node->stmts[$key]);