diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2007-04-24 20:52:16 +0000 |
---|---|---|
committer | Simon Martin <simartin@gcc.gnu.org> | 2007-04-24 20:52:16 +0000 |
commit | 438d798f1231f01c92211c76df1cc3b4cf6904a4 (patch) | |
tree | 8114578ec066c8fc958ebd7608cf29fdaca0d26e /gcc | |
parent | 4df28528f69a4400fed72d69792fc043d1ebd826 (diff) | |
download | gcc-438d798f1231f01c92211c76df1cc3b4cf6904a4.zip gcc-438d798f1231f01c92211c76df1cc3b4cf6904a4.tar.gz gcc-438d798f1231f01c92211c76df1cc3b4cf6904a4.tar.bz2 |
re PR middle-end/25923 ([gfortran] garbled diagnostics with -O -Wuninitialized)
2007-04-24 Simon Martin <simartin@users.sourceforge.net>
PR diagnostic/25923
* tree-pass.h (TDF_DIAGNOSTIC): New dump control to specify that a
diagnostic message is being built.
* tree-pretty-print.c (dump_generic_node): Only write the formatted text
into BUFFER's stream if we are not building a diagnostic message.
* toplev.c (default_tree_printer): Pass TDF_DIAGNOSTIC to
dump_generic_node.
* Makefile.in (toplev.o): Depend on tree-pass.h.
From-SVN: r124121
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/Makefile.in | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr25923.f90 | 24 | ||||
-rw-r--r-- | gcc/toplev.c | 3 | ||||
-rw-r--r-- | gcc/tree-pass.h | 3 | ||||
-rw-r--r-- | gcc/tree-pretty-print.c | 10 |
7 files changed, 53 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8871826..e744b9f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2007-04-24 Simon Martin <simartin@users.sourceforge.net> + + PR diagnostic/25923 + * tree-pass.h (TDF_DIAGNOSTIC): New dump control to specify that a + diagnostic message is being built. + * tree-pretty-print.c (dump_generic_node): Only write the formatted text + into BUFFER's stream if we are not building a diagnostic message. + * toplev.c (default_tree_printer): Pass TDF_DIAGNOSTIC to + dump_generic_node. + * Makefile.in (toplev.o): Depend on tree-pass.h. + 2007-04-24 Ian Lance Taylor <iant@google.com> PR tree-optimization/31602 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 0be0d75f..13d93b0 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2227,7 +2227,7 @@ toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ value-prof.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \ langhooks.h insn-flags.h $(CFGLAYOUT_H) $(CFGLOOP_H) hosthooks.h \ $(CGRAPH_H) $(COVERAGE_H) alloc-pool.h $(GGC_H) $(INTEGRATE_H) \ - $(CPPLIB_H) opts.h params.def tree-mudflap.h $(REAL_H) + $(CPPLIB_H) opts.h params.def tree-mudflap.h $(REAL_H) tree-pass.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) \ -DTARGET_NAME=\"$(target_noncanonical)\" \ -c $(srcdir)/toplev.c $(OUTPUT_OPTION) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6a69bff..e0cb3dd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-24 Simon Martin <simartin@users.sourceforge.net> + + PR diagnostic/25923 + * gfortran.dg/pr25923.f90: New test. + 2007-04-24 Ian Lance Taylor <iant@google.com> PR tree-optimization/31602 diff --git a/gcc/testsuite/gfortran.dg/pr25923.f90 b/gcc/testsuite/gfortran.dg/pr25923.f90 new file mode 100644 index 0000000..5a2ee29 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr25923.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! { dg-options "-O -Wuninitialized" } + +module foo +implicit none + + type bar + integer :: yr + end type + +contains + + function baz(arg) result(res) ! { dg-warning "res.yr' may be" } + type(bar), intent(in) :: arg + type(bar) :: res + logical, external:: some_func + if (.not. some_func(arg)) then + call fatal('arg not valid') + else + res = arg + end if + end function baz + +end module foo diff --git a/gcc/toplev.c b/gcc/toplev.c index 8a471d8..1600596 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -82,6 +82,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "value-prof.h" #include "alloc-pool.h" #include "tree-mudflap.h" +#include "tree-pass.h" #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) #include "dwarf2out.h" @@ -1567,7 +1568,7 @@ default_tree_printer (pretty_printer * pp, text_info *text, const char *spec, pp_string (pp, n); } else - dump_generic_node (pp, t, 0, 0, 0); + dump_generic_node (pp, t, 0, TDF_DIAGNOSTIC, 0); return true; } diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 1b92f8c..c22e15e 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -71,6 +71,9 @@ enum tree_dump_index #define TDF_MEMSYMS (1 << 14) /* display memory symbols in expr. Implies TDF_VOPS. */ +#define TDF_DIAGNOSTIC (1 << 15) /* A dump to be put in a diagnostic + message. */ + extern char *get_dump_file_name (enum tree_dump_index); extern int dump_enabled_p (enum tree_dump_index); extern int dump_initialized_p (enum tree_dump_index); diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index ab637a8..32f8ac0 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -431,8 +431,8 @@ dump_symbols (pretty_printer *buffer, bitmap syms, int flags) /* Dump the node NODE on the pretty_printer BUFFER, SPC spaces of indent. - FLAGS specifies details to show in the dump (see TDF_* in tree.h). If - IS_STMT is true, the object printed is considered to be a statement + FLAGS specifies details to show in the dump (see TDF_* in tree-pass.h). + If IS_STMT is true, the object printed is considered to be a statement and it is terminated by ';' if appropriate. */ int @@ -2055,7 +2055,11 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, if (is_stmt && is_expr) pp_semicolon (buffer); - pp_write_text_to_stream (buffer); + + /* If we're building a diagnostic, the formatted text will be written + into BUFFER's stream by the caller; otherwise, write it now. */ + if (!(flags & TDF_DIAGNOSTIC)) + pp_write_text_to_stream (buffer); return spc; } |