On Fri, Jul 6, 2018 at 3:30 PM Tom de Vries <tdevr...@suse.de> wrote: > > Hi, > > this patch fixes a sigsegv when using -fdump-tree-all-enumerate_locals, by > handling cfun->cfg == NULL conservatively in dump_enumerated_decls. > > OK for trunk?
Ok for the tree-dfa.c part. Richard. > Thanks, > - Tom > > Fix sigsegv on -fdump-tree-all-enumerate_locals > > 2018-07-06 Tom de Vries <tdevr...@suse.de> > > * tree-dfa.c (dump_enumerated_decls): Handle cfun->cfg == NULL. > > * gcc.misc-tests/options.exp (check_for_all_options): Clean up dump > files. > (get_dump_flags): New proc. > (toplevel): Test all dump flags. > > --- > gcc/testsuite/gcc.misc-tests/options.exp | 38 > ++++++++++++++++++++++++++++++++ > gcc/tree-dfa.c | 3 +++ > 2 files changed, 41 insertions(+) > > diff --git a/gcc/testsuite/gcc.misc-tests/options.exp > b/gcc/testsuite/gcc.misc-tests/options.exp > index 693b40df1fd..faeae705c08 100644 > --- a/gcc/testsuite/gcc.misc-tests/options.exp > +++ b/gcc/testsuite/gcc.misc-tests/options.exp > @@ -52,6 +52,10 @@ proc check_for_all_options {language gcc_options > compiler_pattern as_pattern ld_ > } > set gcc_output [gcc_target_compile $filename.c $filename.x executable > $gcc_options] > remote_file build delete $filename.c $filename.x $filename.gcno > + set dumpfiles [glob -nocomplain $filename.c.*] > + foreach dumpfile $dumpfiles { > + remote_file build delete $dumpfile > + } > > if {![regexp -- "/${compiler}(\\.exe)? -quiet.*$compiler_pattern" > $gcc_output]} { > fail "$test (compiler options)" > @@ -70,4 +74,38 @@ proc check_for_all_options {language gcc_options > compiler_pattern as_pattern ld_ > > check_for_all_options c {--coverage} {-fprofile-arcs -ftest-coverage} {} > {-lgcov} > > +proc get_dump_flags {} { > + set res [list] > + > + global srcdir > + set file "$srcdir/../dumpfile.c" > + > + set a [open $file] > + set lines [split [read $a] "\n"] > + close $a > + > + set domatch 0 > + foreach line $lines { > + if { [regexp "dump_options.* =" $line] } { > + set domatch 1 > + } elseif { [regexp "^\};" $line] } { > + set domatch 0 > + } > + if { $domatch } { > + if { [regexp "\"(.*)\"" $line match submatch] } { > + lappend res $submatch > + } > + } > + } > + > + return $res > +} > + > +foreach flag [get_dump_flags] { > + check_for_all_options c -fdump-tree-all-$flag {} {} {} > + check_for_all_options c -fdump-ipa-all-$flag {} {} {} > + check_for_all_options c -fdump-rtl-all-$flag {} {} {} > + check_for_all_options c -fdump-lang-all-$flag {} {} {} > +} > + > gcc_parallel_test_enable 1 > diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c > index 00aa75f47ab..ee2ff2958db 100644 > --- a/gcc/tree-dfa.c > +++ b/gcc/tree-dfa.c > @@ -992,6 +992,9 @@ dump_enumerated_decls_push (tree *tp, int *walk_subtrees, > void *data) > void > dump_enumerated_decls (FILE *file, dump_flags_t flags) > { > + if (!cfun->cfg) > + return; > + > basic_block bb; > struct walk_stmt_info wi; > auto_vec<numbered_tree, 40> decl_list;