On Mon, 23 Nov 2015, Martin Li?ka wrote:
> On 11/21/2015 05:26 AM, Hans-Peter Nilsson wrote:
> > On Thu, 19 Nov 2015, Martin Li?ka wrote:
> >> Hello.
> >>
> >> In last two weeks I've removed couple of memory leaks, mainly tight to 
> >> middle-end.
> >> Currently, a user of the GCC compiler can pass 
> >> '--enable-checking=valgrind' configure option
> >> that will run all commands within valgrind environment, but as the 
> >> valgrind runs just with '-q' option,
> >> the result is not very helpful.

I disagree.  Bugs due to uninitialized memory are diagnosed and
pin-pointed, as intended.  If that has regressed, that's a bug.

> >> I would like to start with another approach, where we can run all tests in 
> >> test-suite
> >> within the valgrind sandbox and return an exit code if there's an error 
> >> seen by the tool.

That's exactly what --enable-checking=valgrind does (well, is
supposed to do.  (Leaks not being diagnosed as errors.)

> >> That unfortunately leads to many latent (maybe false positives, FE issues, 
> >> ...) that can
> >> be efficiently ignored by valgrind suppressions file (the file is part of 
> >> suggested patch).

How can you be sure about the false positives?

It sounds like you're papering over bugs, perhaps bit-rot due to
missing annotations?

> >> The first version of the valgrind.supp can survive running compilation of 
> >> tramp3d with -O2
> >> and majority of tests in test-suite can successfully finish. Most of 
> >> memory leaks
> >> mentioned in the file can be eventually fixed.

Then better not suppress them.  If they aren't visible with
valgrind -q perhaps due to being leaks rather than use of
uninitialized memory, then make that a separate mode.

> > I didn't quite understand the need for the suppression files.
> > Is it like Markus said, only because valgrind annotations are
> > not on by default?  Then let's change it so that's the default
> > during DEV-PHASE = experimental (the development phase) or
> > prerelease.  I really thought that was the case by now.
> > (The suppression files are IMHO a useful addition to contrib/
> > either way.)
>
> Hi.
>
> Well, the original motivation was to basically to fill up the file with all 
> common
> errors (known issues) and to fix all newly introduced issues. That can 
> minimize
> the number of errors reported by the tool.

There *are* lots of bugs seen with valgrind -q and those should
be fixed, not suppressed.  If you want a suppression mode, make
that separate.

> However, as I run complete test-suite for all default languages, I've seen:
>
> == Statistics ==
> Total number of errors: 249615
> Number of different errors: 5848
>
> Where two errors are different if they produce either different message or 
> back-backtrace.
> For complete list of errors (sorted by # of occurrences), download:
>
> https://docs.google.com/uc?authuser=0&id=0B0pisUJ80pO1MENrWXBzak5naFk&export=download
>
> >
> >> As I noticed in results log files, most of remaining issues are connected 
> >> to gcc.c and
> >> lto-wrapper.c files. gcc.c heavily manipulates with strings and it would 
> >> probably require
> >> usage of a string pool, that can easily eventually removed (just in case 
> >> of --enable-valgrind-annotations).
> >> The second source file tends to produce memory leaks because of fork/exec 
> >> constructs. However both
> >> can be improved during next stage1.
> >>
> >> Apart from aforementioned issues, the compiler does not contain so many 
> >> issues and I think it's
> >> doable to prune them and rely on reported valgrind errors.
> >>
> >> Patch touches many .exp files, but basically does just couple of 
> >> modifications:
> >>
> >> 1) gcc-defs.exp introduces new global variable run_under_valgrind
> >> 2) new procedure dg-run-valgrind distinguishes between just passing 
> >> options to 'gd-test',
> >>    or runs 'dg-test' with additional flags that enable valgrind (using 
> >> -wrapper)
> >> 3) new procedure dg-runtest-valgrind does the similar
> >> 4) many changes in corresponding *.exp files that utilize these procedures
> >>
> >> The patch should be definitely part of next stage1, but I would appreciate 
> >> any thoughts
> >> about the described approach?
> >
> > IIRC you can replace the actual dg-runtest proc with your own
> > (implementing a wrapper).  Grep aroung, I think we do that
> > already.  That's certainly preferable instead of touching all
> > callers.
>
> You are right, the suggested patch was over-kill, wrapper should be fine for 
> that.
> Currently I've been playing with a bit different approach (suggested by 
> Markus),
> where I would like to enable valgrind in gcc.c using an environmental 
> variable.
>
> Question is if it should replace existing ENABLE_VALGRIND_CHECKING and how to
> integrate it with a valgrind suppressions file?

My answer is "no": by default nothing should be suppressed with
--enable-checking=valgrind and the effect should be that
annotations are active and valgrind -q is the wrapper.  Add a
suppression mode for your needs.

brgds, H-P

Reply via email to