Re: Bogus reports from coverage.postgresql.org

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Bogus reports from coverage.postgresql.org
Дата
Msg-id 17442.1521129632@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Bogus reports from coverage.postgresql.org  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-www
I wrote:
> ... I have a question in
> to the lcov mailing list at sourceforge to see if anyone wants to offer
> a more informed opinion, though.

And the authoritative answer is: the bug is in gcc/gcov.  The
branch_coverage switch implies passing "-a" to gcov, and if you do
that (with "make coverage GCOVFLAGS=-a" in our infrastructure),
you get output like this (tested with gcc 7.3.1):

        -:  485:                                                           clause,
        -:  486:                                                           weak);
        -:  487:            }
    #####:  488:            break;
    $$$$$:  488-block  0
        -:  489:    }
        -:  490:
        -:  491:    /* can't get here */
     5134:  492:    elog(ERROR, "predicate_classify returned a bogus value");
    $$$$$:  492-block  0
call    0 never executed
call    1 never executed
call    2 never executed
     5134:  492-block  1
        -:  493:    return false;
        -:  494:}

which is clearly claiming that the second basic block in line 492 gets
executed.

With gcc 8.0.1 I instead get:

        -:  485:                                                           clause,
        -:  486:                                                           weak);
        -:  487:            }
    #####:  488:            break;
    %%%%%:  488-block  0
        -:  489:    }
        -:  490:
        -:  491:    /* can't get here */
    #####:  492:    elog(ERROR, "predicate_classify returned a bogus value");
    %%%%%:  492-block  0
call    0 never executed
call    1 never executed
call    2 never executed
        -:  493:    return false;
        -:  494:}

The fact that they changed the gcov data format at the same time hints
that it may be unfixable without such a change, though I've not tried to
excavate in their changelog for more info.  It could also just be a code
generation change, seeing that 8.0.1 is not claiming there are 2 basic
blocks anymore.  (Hm, I wonder whether our "pg_unreachable" stuff confuses
the earlier releases.)

            regards, tom lane


В списке pgsql-www по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: Bogus reports from coverage.postgresql.org
Следующее
От: Christophe Pettus
Дата:
Сообщение: Updating our entry on the professional services page