diff --git a/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php b/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php index a77bd07ab44..bfa38f42d59 100644 --- a/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php +++ b/tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php @@ -2838,6 +2838,22 @@ public function testBug4090(): void $this->analyse([__DIR__ . '/../../Analyser/nsrt/bug-4090.php'], []); } + public function testBug2940(): void + { + $this->analyse([__DIR__ . '/data/bug-2940.php'], [ + [ + 'Parameter #1 $input of function Bug2940\foo expects array{foo2: string, foo1: string, foobarbar1?: string, foobarbar2?: int, foobarbar3?: string, foobarbar4: string, foobarbar6?: string, foobarbar7: int}, array{xx: 3} given.', + 25, + "Array does not have offset 'foo2'.", + ], + [ + 'Parameter #1 $input of function Bug2940\foo2 expects array{foo2: string, foo1: string, foobarbar1?: string, foobarbar2?: int, foobarbar3?: string, foobarbar4: string, foobarbar6?: string, foobarbar7: int, ...}, array{xx: 3} given.', + 73, + "Array does not have offset 'foo2'.", + ], + ]); + } + public function testBug11533(): void { $this->analyse([__DIR__ . '/data/bug-11533.php'], []); diff --git a/tests/PHPStan/Rules/Functions/data/bug-2940.php b/tests/PHPStan/Rules/Functions/data/bug-2940.php new file mode 100644 index 00000000000..9da4ab62e83 --- /dev/null +++ b/tests/PHPStan/Rules/Functions/data/bug-2940.php @@ -0,0 +1,74 @@ +3]); +} + +/** + * @param array{ + * foo2: string, + * foo1: string, + * foobarbar1?: string, + * foobarbar2?: int, + * foobarbar3?: string, + * foobarbar4: string, + * foobarbar6?: string, + * foobarbar7?: string, + * foobarbar8?: string, + * foobarbar9?: string, + * foobarbar10?: string, + * foobarbar11?: string, + * foobarbar12?: string, + * foobarbar13?: string, + * foobarbar14?: string, + * foobarbar15?: string, + * foobarbar16?: string, + * foobarbar17?: string, + * foobarbar18?: string, + * foobarbar19?: string, + * foobarbar20?: string, + * foobarbar21?: string, + * foobarbar22?: string, + * foobarbar23?: string, + * foobarbar24?: string, + * foobarbar25?: string, + * foobarbar26?: string, + * foobarbar27?: string, + * foobarbar28?: string, + * foobarbar29?: string, + * foobarbar30?: string, + * foobarbar31?: string, + * foobarbar7: int + * } $input + */ +function foo2(array $input) +{ + //stuff +} + + +function bar2() +{ + foo2(['xx'=>3]); +}