On 13/03/2008, Chris Lattner <[EMAIL PROTECTED]> wrote:
>
> There is no right answer, and this topic has been the subject of much
>  debate on the GCC list in the past.  I really don't care to debate the
>  merits of one approach vs the other with you, I just answered your
>  question about what clang does.

Of course. I didn't want to get into a debate. I was just trying to
figure out how clang addressed the problem of false positives (or
alternatively the problem of users complaining about them). Thanks for
taking the time to elaborate.

>  Amusingly, GCC 4.0 emitted a false positive about this example despite
>  using the techniques you discuss, and no GCC emits any of these
>  warnings at -O0 (which is a very common mode used when doing a
>  majority of development for some people).

Oh, we certainly do worse than that. See PR 179. I hope you didn't
interpret my comments as criticism of LLVM. Certainly all approaches
have its drawbacks and the one in GCC have a lot of drawbacks plus
deficiencies.

> I have no opinion about the approach that you take in GCC.  In
>  practice, we have been able to do this analysis very quickly and get
>  good results, and will continue to refine them as clang continues to
>  mature.

Hum, that is very interesting because doing these warnings in the
middle-end causes so many false positives/negatives anyway that
perhaps a limited static analysis in the front-end achieves better
results. And the only argument then would be the overhead of the
static analysis. If that is not an issue either, then it seems a very
attractive approach indeed.

Do you use the static analysis for other things (other warnings, early
optimizations/folding)? There are many other warnings that would be
noticeably enhanced by some dataflow in the front-end.

>  I personally think that it is a major problem that GCC doesn't produce
>  these diagnostics unless optimizations are enabled, and I continue to
>  think that having diagnostics change depending on what optimization
>  level is enabled is bad.

I think everybody agrees on both. Yet the alternatives to these issues
right now in GCC are building SSA at -O0 and moving the warnings
earlier in the pipeline, respectively. The former results in
slower/bigger -O0 compiler. Both would generate much more false
positives, and there have been a few patches proposing moving them
even later to avoid some false positives.

I guess the static analysis in the front-end was discarded because of
compile-time concerns, but if you don't see that (and clang seems to
be much faster than GCC), then it may be worth reconsidering it.

Cheers,

Manuel.

Reply via email to