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? 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;