OSDN Git Service

PR c++/11531
authorgdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 Jul 2003 23:31:52 +0000 (23:31 +0000)
committergdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 Jul 2003 23:31:52 +0000 (23:31 +0000)
        * diagnostic.c (diagnostic_report_diagnostic): Don't ICE if we're
        not recursing on hard error.
        (diagnostic_for_decl): Likewise.
        * diagnostic.def: Rearrange.

cp/
        * typeck.c (check_return_expr): Fix thinko in diagnostic.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69425 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/diagnostic.c
gcc/diagnostic.def
gcc/testsuite/g++.dg/other/crash-1.C [new file with mode: 0644]

index d7f64de..24c45c7 100644 (file)
@@ -1,3 +1,11 @@
+2003-07-16  Gabriel Dos Reis  <gcc@integrable-solutions.net>
+
+       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 <joern.rennecke@superh.com>
 
        * dwarf2out.c (expand_builtin_init_dwarf_reg_sizes):
index ff60075..1d25e86 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-16  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       PR c++/11531
+       * typeck.c (check_return_expr): Fix thinko in diagnostic.
+
 2003-07-15  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
        PR c++/10108
index 8e1e0df..b0bb1ac 100644 (file)
@@ -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;
 
index c9bef1a..3475611 100644 (file)
@@ -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))
index 83e5d9c..6820bb7 100644 (file)
@@ -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 (file)
index 0000000..e9a2d79
--- /dev/null
@@ -0,0 +1,3 @@
+
+void f() { return 0; }          // { dg-error "return-statement" }
+