Skip to content

Verify regression test#5233

Closed
staabm wants to merge 1 commit intophpstan:2.1.xfrom
staabm:test-test
Closed

Verify regression test#5233
staabm wants to merge 1 commit intophpstan:2.1.xfrom
staabm:test-test

Conversation

@staabm
Copy link
Contributor

@staabm staabm commented Mar 17, 2026

No description provided.

@staabm
Copy link
Contributor Author

staabm commented Mar 17, 2026

@VincentLanglet for some reason the test from #5231 does not fail the same way reported in the origin issue - when the fix is reverted. I am not sure yet why.

locally I get

➜  bug-14305 pwd
/Users/staabm/workspace/phpstan-src/e2e/bug-14305
➜  bug-14305 ../../bin/phpstan --debug
PHP Fatal error:  Uncaught TypeError: PHPStan\Internal\ComposerHelper::getComposerJsonPath(): Argument #1 ($root) must be of type string, false given, called in ../../bin/phpstan on line 29 and defined in ../../src/Internal/ComposerHelper.php:55
Stack trace:
#0 ../../bin/phpstan(29): PHPStan\Internal\ComposerHelper::getComposerJsonPath(false)
#1 ../../bin/phpstan(137): {closure}()
#2 {main}
  thrown in ../../src/Internal/ComposerHelper.php on line 55
Fatal error: Uncaught TypeError: PHPStan\Internal\ComposerHelper::getComposerJsonPath(): Argument #1 ($root) must be of type string, false given, called in ../../bin/phpstan on line 29 and defined in ../../src/Internal/ComposerHelper.php:55
Stack trace:
#0 ../../bin/phpstan(29): PHPStan\Internal\ComposerHelper::getComposerJsonPath(false)
#1 ../../bin/phpstan(137): {closure}()
#2 {main}
  thrown in ../../src/Internal/ComposerHelper.php on line 55

@staabm
Copy link
Contributor Author

staabm commented Mar 17, 2026

most interessting.. when I cp e2e/bug-14305/test.php . and run php bin/phpstan analyze test.php --debug --level=5 I can reproduce the origin reported error and I can even verify the fix on 2.1.x

this does not yet make sense to me

@VincentLanglet
Copy link
Contributor

When I run locally I do get

../../bin/phpstan --debug
Note: Using configuration file /Users/vincentl/Perso/open-source/phpstan-src/e2e/bug-14305/phpstan.neon.
/Users/vincentl/Perso/open-source/phpstan-src/e2e/bug-14305/test.php
Uncaught PHPStan\ShouldNotHappenException: Internal error. in /Users/vincentl/Perso/open-source/phpstan-src/src/Type/Constant/ConstantArrayTypeBuilder.php:185
#0 /Users/vincentl/Perso/open-source/phpstan-src/src/Type/Constant/ConstantArrayType.php(706): PHPStan\Type\Constant\ConstantArrayTypeBuilder->setOffsetValueType(Object(PHPStan\Type\Constant\ConstantIntegerType), Object(PHPStan\Type\MixedType))
#1 /Users/vincentl/Perso/open-source/phpstan-src/src/Rules/Arrays/OffsetAccessAssignmentRule.php(68): PHPStan\Type\Constant\ConstantArrayType->setOffsetValueType(Object(PHPStan\Type\Constant\ConstantBooleanType), Object(PHPStan\Type\MixedType))
#2 /Users/vincentl/Perso/open-source/phpstan-src/src/Rules/RuleLevelHelper.php(272): PHPStan\Rules\Arrays\OffsetAccessAssignmentRule::{closure:PHPStan\Rules\Arrays\OffsetAccessAssignmentRule::processNode():67}(Object(PHPStan\Type\Constant\ConstantBooleanType))
#3 /Users/vincentl/Perso/open-source/phpstan-src/src/Rules/RuleLevelHelper.php(181): PHPStan\Rules\RuleLevelHelper->findTypeToCheckImplementation(Object(PHPStan\Analyser\Fiber\FiberScope), Object(PhpParser\Node\Expr\FuncCall), Object(PHPStan\Type\UnionType), '', Object(Closure), true)
#4 /Users/vincentl/Perso/open-source/phpstan-src/src/Rules/Arrays/OffsetAccessAssignmentRule.php(63): PHPStan\Rules\RuleLevelHelper->findTypeToCheck(Object(PHPStan\Analyser\Fiber\FiberScope), Object(PhpParser\Node\Expr\FuncCall), '', Object(Closure))
#5 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/FileAnalyserCallback.php(119): PHPStan\Rules\Arrays\OffsetAccessAssignmentRule->processNode(Object(PhpParser\Node\Expr\ArrayDimFetch), Object(PHPStan\Analyser\Fiber\FiberScope))
#6 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(925): PHPStan\Analyser\FileAnalyserCallback->__invoke(Object(PhpParser\Node\Expr\ArrayDimFetch), Object(PHPStan\Analyser\Fiber\FiberScope))
#7 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/Fiber/FiberNodeScopeResolver.php(42): PHPStan\Analyser\NodeScopeResolver::{closure:PHPStan\Analyser\NodeScopeResolver::processStmtNode():917}(Object(PhpParser\Node\Expr\ArrayDimFetch), Object(PHPStan\Analyser\Fiber\FiberScope))
#8 [internal function]: PHPStan\Analyser\Fiber\FiberNodeScopeResolver::{closure:PHPStan\Analyser\Fiber\FiberNodeScopeResolver::callNodeCallback():40}()
#9 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/Fiber/FiberNodeScopeResolver.php(70): Fiber->resume(Object(PHPStan\Analyser\MutatingScope))
#10 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/Fiber/FiberNodeScopeResolver.php(134): PHPStan\Analyser\Fiber\FiberNodeScopeResolver->runFiberForNodeCallback(Object(PHPStan\Analyser\ExpressionResultStorage), Object(Fiber), Object(PHPStan\Analyser\Fiber\BeforeScopeForExprRequest))
#11 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/Fiber/FiberNodeScopeResolver.php(54): PHPStan\Analyser\Fiber\FiberNodeScopeResolver->processPendingFibersForRequestedExpr(Object(PHPStan\Analyser\ExpressionResultStorage), Object(PhpParser\Node\Expr\FuncCall), Object(PHPStan\Analyser\MutatingScope))
#12 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(2482): PHPStan\Analyser\Fiber\FiberNodeScopeResolver->storeBeforeScope(Object(PHPStan\Analyser\ExpressionResultStorage), Object(PhpParser\Node\Expr\FuncCall), Object(PHPStan\Analyser\MutatingScope))
#13 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/ExprHandler/AssignHandler.php(368): PHPStan\Analyser\NodeScopeResolver->processExprNode(Object(PhpParser\Node\Stmt\Expression), Object(PhpParser\Node\Expr\FuncCall), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(Closure), Object(PHPStan\Analyser\ExpressionContext))
#14 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/ExprHandler/AssignHandler.php(99): PHPStan\Analyser\ExprHandler\AssignHandler->processAssignVar(Object(PHPStan\Analyser\Fiber\FiberNodeScopeResolver), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PhpParser\Node\Stmt\Expression), Object(PhpParser\Node\Expr\Variable), Object(PhpParser\Node\Scalar\String_), Object(Closure), Object(PHPStan\Analyser\ExpressionContext), Object(Closure), true)
#15 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(2507): PHPStan\Analyser\ExprHandler\AssignHandler->processExpr(Object(PHPStan\Analyser\Fiber\FiberNodeScopeResolver), Object(PhpParser\Node\Stmt\Expression), Object(PhpParser\Node\Expr\Assign), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(Closure), Object(PHPStan\Analyser\ExpressionContext))
#16 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(917): PHPStan\Analyser\NodeScopeResolver->processExprNode(Object(PhpParser\Node\Stmt\Expression), Object(PhpParser\Node\Expr\Assign), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(Closure), Object(PHPStan\Analyser\ExpressionContext))
#17 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(410): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#18 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(368): PHPStan\Analyser\NodeScopeResolver->processStmtNodesInternalWithoutFlushingPendingFibers(Object(PhpParser\Node\Stmt\Foreach_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#19 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(1271): PHPStan\Analyser\NodeScopeResolver->processStmtNodesInternal(Object(PhpParser\Node\Stmt\Foreach_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#20 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(410): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Foreach_), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#21 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(368): PHPStan\Analyser\NodeScopeResolver->processStmtNodesInternalWithoutFlushingPendingFibers(Object(PhpParser\Node\Stmt\Namespace_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#22 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(962): PHPStan\Analyser\NodeScopeResolver->processStmtNodesInternal(Object(PhpParser\Node\Stmt\Namespace_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#23 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/NodeScopeResolver.php(280): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Namespace_), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\ExpressionResultStorage), Object(PHPStan\Analyser\FileAnalyserCallback), Object(PHPStan\Analyser\StatementContext))
#24 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/FileAnalyser.php(119): PHPStan\Analyser\NodeScopeResolver->processNodes(Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Analyser\FileAnalyserCallback))
#25 /Users/vincentl/Perso/open-source/phpstan-src/src/Analyser/Analyser.php(84): PHPStan\Analyser\FileAnalyser->analyseFile('/Users/vincentl...', Array, Object(PHPStan\Rules\LazyRegistry), Object(PHPStan\Collectors\Registry), NULL)
#26 /Users/vincentl/Perso/open-source/phpstan-src/src/Command/AnalyserRunner.php(100): PHPStan\Analyser\Analyser->analyse(Array, Object(Closure), NULL, true, Array)
#27 /Users/vincentl/Perso/open-source/phpstan-src/src/Command/AnalyseApplication.php(289): PHPStan\Command\AnalyserRunner->runAnalyser(Array, Array, Object(Closure), NULL, true, true, '/Users/vincentl...', NULL, NULL, Object(Symfony\Component\Console\Input\ArgvInput))
#28 /Users/vincentl/Perso/open-source/phpstan-src/src/Command/AnalyseApplication.php(89): PHPStan\Command\AnalyseApplication->runAnalyser(Array, Array, true, '/Users/vincentl...', NULL, NULL, Object(PHPStan\Command\Symfony\SymfonyOutput), Object(PHPStan\Command\Symfony\SymfonyOutput), Object(Symfony\Component\Console\Input\ArgvInput))
#29 /Users/vincentl/Perso/open-source/phpstan-src/src/Command/AnalyseCommand.php(344): PHPStan\Command\AnalyseApplication->analyse(Array, true, Object(PHPStan\Command\Symfony\SymfonyOutput), Object(PHPStan\Command\Symfony\SymfonyOutput), false, true, '/Users/vincentl...', Array, NULL, NULL, Object(Symfony\Component\Console\Input\ArgvInput))
#30 /Users/vincentl/Perso/open-source/phpstan-src/vendor/symfony/console/Command/Command.php(298): PHPStan\Command\AnalyseCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /Users/vincentl/Perso/open-source/phpstan-src/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#32 /Users/vincentl/Perso/open-source/phpstan-src/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(PHPStan\Command\AnalyseCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#33 /Users/vincentl/Perso/open-source/phpstan-src/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#34 /Users/vincentl/Perso/open-source/phpstan-src/bin/phpstan(136): Symfony\Component\Console\Application->run()
#35 /Users/vincentl/Perso/open-source/phpstan-src/bin/phpstan(137): {closure:/Users/vincentl/Perso/open-source/phpstan-src/bin/phpstan:14}()
#36 {main}
image

And the fix works for me...

@staabm
Copy link
Contributor Author

staabm commented Mar 17, 2026

And the fix works for me...

the original playground example still runs into a internal error on my end, therefore I am not sure whether its a playground problem or something else.

@staabm
Copy link
Contributor Author

staabm commented Mar 17, 2026

(the playground was not yet up2date, therefore the error was still reproducing. it is now fixed)

@staabm staabm closed this Mar 17, 2026
@staabm staabm deleted the test-test branch March 17, 2026 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants