← Back to team overview

maria-developers team mailing list archive

Re: Rev 2747: Gcov support improvements in file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/

 

Sergey Petrunya <psergey@xxxxxxxxxxxx> writes:

> At file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/
>
> ------------------------------------------------------------
> revno: 2747
> revision-id: psergey@xxxxxxxxxxxx-20090825150255-46i5gvl2ctd0jcm2
> parent: psergey@xxxxxxxxxxxx-20090825145915-rxwmfczgqe69r5ju
> committer: Sergey Petrunya <psergey@xxxxxxxxxxxx>
> branch nick: maria-5.1-table-elim-r11-gcov
> timestamp: Tue 2009-08-25 18:02:55 +0300
> message:
>   Gcov support improvements
>   - add process-gcov-annotations.pl script that processes .gcov files 
>     according to purecov annotations in source code
>   - add --gcov-src-dir=subdir option to mysql-test-run so that one can
>     do gcov processing only for source files in a certain directory.

Nice additions!

> === modified file 'mysql-test/lib/mtr_gcov.pl'
> --- a/mysql-test/lib/mtr_gcov.pl	2009-04-25 09:04:38 +0000
> +++ b/mysql-test/lib/mtr_gcov.pl	2009-08-25 15:02:55 +0000

> @@ -62,6 +64,7 @@
>  	$dir_reported= 1;
>        }
>        system("$gcov $f 2>>$start_dir/$gcov_err >>$start_dir/$gcov_msg");
> +      system("perl $basedir/mysql-test/lib/process-purecov-annotations.pl $f.gcov");

Better do something like this:

    system("perl", "$basedir/mysql-test/lib/process-purecov-annotations.pl", "$f.gcov");

as it is robust to spaces and other shell metachars in the data.

> === added file 'mysql-test/lib/process-purecov-annotations.pl'
> --- a/mysql-test/lib/process-purecov-annotations.pl	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/lib/process-purecov-annotations.pl	2009-08-25 15:02:55 +0000

> +    # Besides purecov annotations, also remove uncovered code mark from cases
> +    # like the following:
> +    # 
> +    #     -:  211:*/
> +    #     -:  212:class Field_value : public Value_dep
> +    # #####:  213:{
> +    #     -:  214:public:
> +    #
> +    # I have no idea why would gcov think there is uncovered code there

Maybe generated default constructor, destructor, or the like that was not run?

> +    #
> +    my @arr= split(/:/, $line);
> +    if ($skipping || $line =~ /purecov: *(inspected|deadcode)/ || 
> +        $arr[2] =~ m/^{ */)

Note that m/^{ */ matches the same lines as m/^{/. Maybe you intended to use
m/^{ *$/ to require the line to be empty except for a starting brace? Or else
just use m/^{/.

> +    {
> +      # Change '####' to '-'.
> +      $arr[0] =~ s/#####/    -/g;
> +      $line= join(":", @arr);
> +    }
> +    print OUT $line;
> +  }
> +  close(IN);
> +  close(OUT);
> +  system("cat $out_file_name > $in_file_name");
> +  system("rm $out_file_name");

    system("mv", "-f", $out_file_name, $in_file_name);

(or cp / rm with multi-argument system()).

> === modified file 'mysql-test/mysql-test-run.pl'
> --- a/mysql-test/mysql-test-run.pl	2009-06-22 08:06:35 +0000
> +++ b/mysql-test/mysql-test-run.pl	2009-08-25 15:02:55 +0000
> @@ -169,6 +169,7 @@
>  our $opt_mem= $ENV{'MTR_MEM'};
>  
>  our $opt_gcov;
> +our $opt_gcov_src_dir;

Don't you need to initialise to empty string '' to avoid a warning with
undefined value? (Or maybe getopt handles it?).

 - Kristian.



Follow ups

References