View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001192 | Xdebug | Uncategorized | public | 2015-10-23 12:39 | 2015-11-05 15:08 |
Reporter | Gisleburt | Assigned To | derick | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Platform | Virtual Box | OS | Ubuntu | OS Version | 14.04 |
Product Version | 2.3.2 | ||||
Fixed in Version | 2.4.0beta1 | ||||
Summary | 0001192: Dead code analysis does not work for generators with 'return;' | ||||
Description | There seems to be an issue where code that should be marked as "Dead Code", is marked as "Uncovered" when using an early return in a generator. | ||||
Steps To Reproduce | **composer.json** ``` { "require": { "phpunit/phpunit": "5.0.8" } } ``` **test.php** ``` <?php require 'vendor/autoload.php'; function gen(&$output, $branch = false) { yield; if($branch) { $output = 'branched'; return; } // This line is never covered. $output = 'did not branch'; } class GenTest extends \PHPUnit_Framework_TestCase { public function testGen() { $output = ''; $gen = gen($output); while($gen->valid()) { $gen->next(); } $this->assertSame( 'did not branch', $output ); $output = ''; $gen = gen($output, true); while($gen->valid()) { $gen->next(); } $this->assertSame( 'branched', $output ); } } ``` **Reproduce** ``` $ vendor/bin/phpunit --coverage-html reports --whitelist test.php test.php ``` **Result**  **Version** ``` $ php --version PHP 5.6.14-1+deb.sury.org~trusty+1 (cli) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans $ composer show -i doctrine/instantiator 1.0.5 A small, lightweight utility to instantiate objects in PHP without invoking their constructors myclabs/deep-copy 1.4.0 Create deep copies (clones) of your objects phpdocumentor/reflection-docblock 2.0.4 phpspec/prophecy v1.5.0 Highly opinionated mocking framework for PHP 5.3+ phpunit/php-code-coverage 3.0.1 Library that provides collection, processing, and rendering functionality for PHP code coverage information. phpunit/php-file-iterator 1.4.1 FilterIterator implementation that filters files based on a list of suffixes. phpunit/php-text-template 1.2.1 Simple template engine. phpunit/php-timer 1.0.7 Utility class for timing phpunit/php-token-stream 1.4.8 Wrapper around PHP's tokenizer extension. phpunit/phpunit 5.0.8 The PHP Unit Testing framework. phpunit/phpunit-mock-objects 3.0.3 Mock Object library for PHPUnit sebastian/comparator 1.2.0 Provides the functionality to compare PHP values for equality sebastian/diff 1.3.0 Diff implementation sebastian/environment 1.3.2 Provides functionality to handle HHVM/PHP environments sebastian/exporter 1.2.1 Provides the functionality to export PHP variables for visualization sebastian/global-state 1.1.1 Snapshotting of global state sebastian/recursion-context 1.0.1 Provides functionality to recursively process PHP variables sebastian/resource-operations 1.0.0 Provides a list of PHP built-in functions that operate on resources sebastian/version 1.0.6 Library that helps with managing the version number of Git-hosted PHP projects symfony/yaml v2.7.5 Symfony Yaml Component ``` | ||||
Additional Information | This bug also reported at https://github.com/sebastianbergmann/php-code-coverage/issues/392 | ||||
Tags | No tags attached. | ||||
Operating System | |||||
PHP Version | 5.6.10-5.6.14 | ||||
|
|
|
This seems to be because Xdebug (and VLD) don't see the "GENERATOR_RETURN" opcode as a jump (to exit) opcode. Fix on the way. |
|
Fixed for 2.3.4 and 3.0.0-dev. |
Date Modified | Username | Field | Change |
---|---|---|---|
2015-10-23 12:39 | Gisleburt | New Issue | |
2015-10-23 12:39 | Gisleburt | File Added: 2015-10-23 13_31_24-Code Coverage for _www_test_test.php.png | |
2015-10-25 10:40 | derick | Note Added: 0003195 | |
2015-10-25 10:40 | derick | Assigned To | => derick |
2015-10-25 10:40 | derick | Status | new => confirmed |
2015-10-26 20:39 | derick | Note Added: 0003196 | |
2015-10-26 20:39 | derick | Status | confirmed => closed |
2015-10-26 20:39 | derick | Resolution | open => fixed |
2015-10-26 20:39 | derick | Fixed in Version | => 2.3.4 |
2015-10-26 20:40 | derick | Summary | Coverage of early return in generators => Dead code analysis does not work for generators with 'return;' |
2015-11-05 15:08 | derick | Fixed in Version | 2.3.4 => 2.4.0beta1 |
2016-07-31 12:36 | derick | Category | Usage problems => Usage problems (Crashes) |
2016-07-31 12:38 | derick | Category | Usage problems (Crashes) => Usage problems (Wrong Results) |
2020-03-12 16:35 | derick | Category | Usage problems (Wrong Results) => Variable Display |
2020-03-12 16:38 | derick | Category | Variable Display => Uncategorized |