File tree Expand file tree Collapse file tree 3 files changed +46
-5
lines changed
tests/PHPStan/Rules/Properties Expand file tree Collapse file tree 3 files changed +46
-5
lines changed Original file line number Diff line number Diff line change @@ -5609,11 +5609,24 @@ private function processAssignVar(
56095609 } else {
56105610 $ varForSetOffsetValue = $ var ->var ;
56115611 }
5612- $ assignedPropertyExpr = new SetOffsetValueTypeExpr (
5613- $ varForSetOffsetValue ,
5614- $ var ->dim ,
5615- $ assignedPropertyExpr ,
5616- );
5612+
5613+ if (
5614+ $ var === $ originalVar
5615+ && $ var ->dim !== null
5616+ && $ scope ->hasExpressionType ($ var )->yes ()
5617+ ) {
5618+ $ assignedPropertyExpr = new SetExistingOffsetValueTypeExpr (
5619+ $ varForSetOffsetValue ,
5620+ $ var ->dim ,
5621+ $ assignedPropertyExpr ,
5622+ );
5623+ } else {
5624+ $ assignedPropertyExpr = new SetOffsetValueTypeExpr (
5625+ $ varForSetOffsetValue ,
5626+ $ var ->dim ,
5627+ $ assignedPropertyExpr ,
5628+ );
5629+ }
56175630 $ dimFetchStack [] = $ var ;
56185631 $ var = $ var ->var ;
56195632 }
Original file line number Diff line number Diff line change @@ -935,4 +935,11 @@ public function testBug11777(): void
935935 $ this ->analyse ([__DIR__ . '/data/bug-11777.php ' ], []);
936936 }
937937
938+ public function testBug13035 (): void
939+ {
940+ $ this ->checkExplicitMixed = true ;
941+ $ this ->checkImplicitMixed = true ;
942+ $ this ->analyse ([__DIR__ . '/data/bug-13035.php ' ], []);
943+ }
944+
938945}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Bug13035 ;
4+
5+ use function PHPStan \debugScope ;
6+ use function PHPStan \Testing \assertType ;
7+
8+ class HelloWorld
9+ {
10+ /**
11+ * @var list<int>
12+ */
13+ public array $ list = [];
14+
15+ public function bug (int $ offset ): void
16+ {
17+ if (isset ($ this ->list [$ offset ])) {
18+ $ this ->list [$ offset ] = 123 ;
19+ }
20+ }
21+ }
You can’t perform that action at this time.
0 commit comments