MantisBT

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001192XdebugUsage problems (Wrong Results)public2015-10-23 13:392015-11-05 15:08
ReporterGisleburt 
Assigned Toderick 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusclosedResolutionfixed 
PlatformVirtual BoxOSUbuntuOS Version14.04
Product Version2.3.2 
Target VersionFixed in Version2.4.0beta1 
Summary0001192: Dead code analysis does not work for generators with 'return;'
DescriptionThere 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**

![image](https://cloud.githubusercontent.com/assets/2369524/10692576/60f768b8-798a-11e5-9c09-04f574f785f7.png [^])

**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 InformationThis bug also reported at https://github.com/sebastianbergmann/php-code-coverage/issues/392 [^]
TagsNo tags attached.
Operating System
PHP Version5.6.10-5.6.14
Attached Filespng file icon 2015-10-23 13_31_24-Code Coverage for _www_test_test.php.png [^] (15,617 bytes) 2015-10-23 13:39

- Relationships

-  Notes
(0003195)
derick (administrator)
2015-10-25 10:40

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.
(0003196)
derick (administrator)
2015-10-26 20:39

Fixed for 2.3.4 and 3.0.0-dev.

- Issue History
Date Modified Username Field Change
2015-10-23 13:39 Gisleburt New Issue
2015-10-23 13: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 13:36 derick Category Usage problems => Usage problems (Crashes)
2016-07-31 13:38 derick Category Usage problems (Crashes) => Usage problems (Wrong Results)


Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker