diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d7f64de60ad..24c45c74584 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-07-16 Gabriel Dos Reis + + PR c++/11531 + * diagnostic.c (diagnostic_report_diagnostic): Don't ICE if we're + not recursing on hard error. + (diagnostic_for_decl): Likewise. + * diagnostic.def: Rearrange. + 2003-07-15 J"orn Rennecke * dwarf2out.c (expand_builtin_init_dwarf_reg_sizes): diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ff600753258..1d25e8615ef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-07-16 Gabriel Dos Reis + + PR c++/11531 + * typeck.c (check_return_expr): Fix thinko in diagnostic. + 2003-07-15 Kriang Lerdsuwanakij PR c++/10108 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 8e1e0df8b78..b0bb1ac9e40 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -6123,7 +6123,7 @@ check_return_expr (tree retval) that's supposed to return a value. */ if (!retval && fn_returns_value_p) { - pedwarn ("return-statement with no value, in function returning `%D'", + pedwarn ("return-statement with no value, in function returning '%T'", valtype); /* Clear this, so finish_function won't say that we reach the end of a non-void function (which we don't, we gave a @@ -6140,8 +6140,8 @@ check_return_expr (tree retval) its side-effects. */ finish_expr_stmt (retval); else - pedwarn ("return-statement with a value, in function returning `%D'", - retval); + pedwarn ("return-statement with a value, in function " + "returning 'void'"); current_function_returns_null = 1; diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index c9bef1a7e4a..34756112d68 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -1020,7 +1020,7 @@ void diagnostic_report_diagnostic (diagnostic_context *context, diagnostic_info *diagnostic) { - if (context->lock++) + if (context->lock++ && diagnostic->kind < DK_SORRY) error_recursion (context); if (diagnostic_count_diagnostic (context, diagnostic)) @@ -1042,7 +1042,7 @@ static void diagnostic_for_decl (diagnostic_context *context, diagnostic_info *diagnostic, tree decl) { - if (context->lock++) + if (context->lock++ && diagnostic->kind < DK_SORRY) error_recursion (context); if (diagnostic_count_diagnostic (context, diagnostic)) diff --git a/gcc/diagnostic.def b/gcc/diagnostic.def index 83e5d9cae72..6820bb72e9f 100644 --- a/gcc/diagnostic.def +++ b/gcc/diagnostic.def @@ -1,7 +1,7 @@ DEFINE_DIAGNOSTIC_KIND (DK_FATAL, "fatal error: ") DEFINE_DIAGNOSTIC_KIND (DK_ICE, "internal compiler error: ") -DEFINE_DIAGNOSTIC_KIND (DK_SORRY, "sorry, unimplemented: ") DEFINE_DIAGNOSTIC_KIND (DK_ERROR, "error: ") +DEFINE_DIAGNOSTIC_KIND (DK_SORRY, "sorry, unimplemented: ") DEFINE_DIAGNOSTIC_KIND (DK_WARNING, "warning: ") DEFINE_DIAGNOSTIC_KIND (DK_ANACHRONISM, "anachronism: ") DEFINE_DIAGNOSTIC_KIND (DK_NOTE, "note: ") diff --git a/gcc/testsuite/g++.dg/other/crash-1.C b/gcc/testsuite/g++.dg/other/crash-1.C new file mode 100644 index 00000000000..e9a2d79f422 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/crash-1.C @@ -0,0 +1,3 @@ + +void f() { return 0; } // { dg-error "return-statement" } +