@@ -142,3 +142,36 @@ function notFalseCheck(mixed $input, bool $allow_null = false): void
142142$ a = x ();
143143notFalseCheck (allow_null: true , input: $ a );
144144assertType ('string|null ' , $ a ); // correct (string|null)
145+
146+ /** @phpstan-assert ($allow_null is false ? string : string|null) $input */
147+ function checkWithVariadics (mixed $ input , bool $ allow_null = false , ...$ more ): void
148+ {
149+ }
150+
151+ $ a = x ();
152+ checkWithVariadics ($ a );
153+ assertType ('string ' , $ a ); // incorrect: should be string but is string|null
154+
155+ $ a = x ();
156+ checkWithVariadics ($ a , false );
157+ assertType ('string ' , $ a ); // correct (string)
158+
159+ $ a = x ();
160+ checkWithVariadics ($ a , allow_null: false );
161+ assertType ('string ' , $ a ); // correct (string)
162+
163+ $ a = x ();
164+ checkWithVariadics (allow_null: false , input: $ a );
165+ assertType ('string ' , $ a ); // correct (string)
166+
167+ $ a = x ();
168+ checkWithVariadics ($ a , true );
169+ assertType ('string|null ' , $ a ); // correct (string|null)
170+
171+ $ a = x ();
172+ checkWithVariadics ($ a , allow_null: true );
173+ assertType ('string|null ' , $ a ); // correct (string|null)
174+
175+ $ a = x ();
176+ checkWithVariadics (allow_null: true , input: $ a );
177+ assertType ('string|null ' , $ a ); // correct (string|null)
0 commit comments