Message ID | 20180706133026.7ue6songbxnx3i3m@delia |
---|---|
State | New |
Headers | show |
Series | Fix sigsegv on -fdump-tree-all-enumerate_locals | expand |
On Fri, Jul 6, 2018 at 3:30 PM Tom de Vries <tdevries@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 <tdevries@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;
On 07/06/2018 08:41 AM, Richard Biener wrote: > On Fri, Jul 6, 2018 at 3:30 PM Tom de Vries <tdevries@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. OK on the testsuite part. jeff
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;