]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/65996 (gfortran ICE with -dH)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 21 Jan 2016 21:08:00 +0000 (21:08 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 21 Jan 2016 21:08:00 +0000 (21:08 +0000)
2016-01-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/65996
* error.c (gfc_error): Save the state of abort_on_error and set
it to false for buffered errors to allow normal processing.
Restore the state before leaving.

2016-01-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/65996
gfortran.dg/pr65996.f90: New test.

From-SVN: r232707

gcc/fortran/ChangeLog
gcc/fortran/error.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr65996.f90 [new file with mode: 0644]

index ee83c2e9f8e5c5ea8942df0bde4850946d652f75..9bd4ecfb19929d32dd802dd1d90efb9d8663a4ae 100644 (file)
@@ -1,3 +1,10 @@
+2016-01-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/65996
+       * error.c (gfc_error): Save the state of abort_on_error and set
+       it to false for buffered errors to allow normal processing.
+       Restore the state before leaving.
+
 2016-01-19  Martin Jambor  <mjambor@suse.cz>
 
        * types.def (BT_FN_VOID_UINT_PTR_INT_PTR): New.
index 457a3b0b4403900830f5638bf73f1764c4aa42aa..7388706d583827d591963e0218493f47e4567a56 100644 (file)
@@ -1226,6 +1226,7 @@ gfc_error (const char *gmsgid, va_list ap)
 {
   va_list argp;
   va_copy (argp, ap);
+  bool saved_abort_on_error = false;
 
   if (warnings_not_errors)
     {
@@ -1250,10 +1251,14 @@ gfc_error (const char *gmsgid, va_list ap)
 
   if (buffered_p)
     {
+      /* To prevent -dH from triggering an abort on a buffered error,
+        save abort_on_error and restore it below.  */
+      saved_abort_on_error = global_dc->abort_on_error;
+      global_dc->abort_on_error = false;
       pp->buffer = pp_error_buffer;
       global_dc->fatal_errors = false;
       /* To prevent -fmax-errors= triggering, we decrease it before
-     report_diagnostic increases it.  */
+        report_diagnostic increases it.  */
       --errorcount;
     }
 
@@ -1264,6 +1269,8 @@ gfc_error (const char *gmsgid, va_list ap)
     {
       pp->buffer = tmp_buffer;
       global_dc->fatal_errors = fatal_errors;
+      global_dc->abort_on_error = saved_abort_on_error;
+
     }
 
   va_end (argp);
index b5db7b6ff9a3eb9dbb71512d70aea693248132d9..dad2c35bc411af95454330ffb2cad1ad0798ec83 100644 (file)
@@ -1,8 +1,13 @@
+2016-01-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/65996
+       gfortran.dg/pr65996.f90: New test.
+
 2016-01-21  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        PR c++/68810
        * g++.dg/cpp0x/constexpr-reinterpret1.C: Fix line number that is                                                                           
-       expected to generate an error.                                                                                                             
+       expected to generate an error.
 
 2016-01-21  Bernd Schmidt  <bschmidt@redhat.com>
 
diff --git a/gcc/testsuite/gfortran.dg/pr65996.f90 b/gcc/testsuite/gfortran.dg/pr65996.f90
new file mode 100644 (file)
index 0000000..754a3bc
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-additional-options "-dH" }
+! PR 65996.f90. before patch compiler aborted on this program.
+program foo
+  implicit none
+  character(len=16) :: a,b,c
+  a="XXX"
+  b="&
+    &XXX"
+  c="XXX &
+    & XXX"
+  write(0,*) 'a=',a,' b=',b,' c=',c 
+endprogram foo