-
-
Notifications
You must be signed in to change notification settings - Fork 934
Closed
Description
Bug report
The following creates an internal error at level 7 and above, iff strict rules are enabled.
<?php
function test(string $x): void {
$tmp = json_decode($x, false);
if (!isset($tmp->foo) || !isset($tmp->bar)) {
}
}The error does not appear if the string given to json_decode() is provided as a constant. It also disappear if the two isset checks are combined into a single one.
Stack trace:
## phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Type/IntersectionType.php(462)
#0 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Type/IntersectionType.php(449): PHPStan\Type\IntersectionType->getUnresolvedInstancePropertyPrototype()
#1 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Properties/AccessPropertiesCheck.php(200): PHPStan\Type\IntersectionType->getInstanceProperty()
#2 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Properties/AccessPropertiesCheck.php(115): PHPStan\Rules\Properties\AccessPropertiesCheck->pickProperty()
#3 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Properties/AccessPropertiesCheck.php(84): PHPStan\Rules\Properties\AccessPropertiesCheck->processSingleProperty()
#4 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Properties/AccessPropertiesRule.php(28): PHPStan\Rules\Properties\AccessPropertiesCheck->check()
#5 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(129): PHPStan\Rules\Properties\AccessPropertiesRule->processNode()
#6 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(638): PHPStan\Analyser\FileAnalyser->{closure:PHPStan\Analyser\FileAnalyser::analyseFile():102}()
#7 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(3532):
PHPStan\Analyser\NodeScopeResolver::{closure:PHPStan\Analyser\NodeScopeResolver::processStmtNode():637}()
#8 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(1981): PHPStan\Analyser\NodeScopeResolver->callNodeCallbackWithExpression()
#9 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(2732): PHPStan\Analyser\NodeScopeResolver->processExprNode()
#10 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(2681): PHPStan\Analyser\NodeScopeResolver->processExprNode()
#11 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(2581): PHPStan\Analyser\NodeScopeResolver->processExprNode()
#12 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(944): PHPStan\Analyser\NodeScopeResolver->processExprNode()
#13 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(520): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
#14 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(637): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
#15 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(468): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
#16 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(203): PHPStan\Analyser\NodeScopeResolver->processNodes()
#17 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(149): PHPStan\Analyser\FileAnalyser->analyseFile()
#18 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111):
PHPStan\Command\WorkerCommand::{closure:PHPStan\Command\WorkerCommand::runWorker():126}()
#19 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(117): _PHPStan_109b3c977\Evenement\EventEmitter->emit()
#20 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): _PHPStan_109b3c977\Clue\React\NDJson\Decoder->handleData()
#21 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_109b3c977\Evenement\EventEmitter->emit()
#22 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111):
_PHPStan_109b3c977\React\Stream\Util::{closure:_PHPStan_109b3c977\React\Stream\Util::forwardEvents():61}()
#23 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(168): _PHPStan_109b3c977\Evenement\EventEmitter->emit()
#24 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201): _PHPStan_109b3c977\React\Stream\DuplexResourceStream->handleData()
#25 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173): _PHPStan_109b3c977\React\EventLoop\StreamSelectLoop->waitForStreamActivity()
#26 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(105): _PHPStan_109b3c977\React\EventLoop\StreamSelectLoop->run()
#27 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259): PHPStan\Command\WorkerCommand->execute()
#28 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(868): _PHPStan_109b3c977\Symfony\Component\Console\Command\Command->run()
#29 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261): _PHPStan_109b3c977\Symfony\Component\Console\Application->doRunCommand()
#30 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157): _PHPStan_109b3c977\Symfony\Component\Console\Application->doRun()
#31 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(96): _PHPStan_109b3c977\Symfony\Component\Console\Application->run()
#32 phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(97): {closure:phar:///home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan:14}()
#33 /home/bsteinbrink/src/dummy/vendor/phpstan/phpstan/phpstan(8): require('...')
#34 /home/bsteinbrink/src/dummy/vendor/bin/phpstan(119): include('...')
#35 {main}
Code snippet that reproduces the problem
https://phpstan.org/r/d92d5005-caed-4506-b5d2-5bcf0d76ec96
Expected output
PHPStan should not crash
Did PHPStan help you today? Did it make you happy in any way?
No response
Metadata
Metadata
Assignees
Labels
No labels