re PR fortran/79886 (ICE in pp_format, at pretty-print.c:681)
authorJakub Jelinek <jakub@redhat.com>
Thu, 16 Mar 2017 16:27:08 +0000 (17:27 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 16 Mar 2017 16:27:08 +0000 (17:27 +0100)
PR fortran/79886
* tree-diagnostic.c (default_tree_printer): No longer static.
* tree-diagnostic.h (default_tree_printer): New prototype.
fortran/
* error.c (gfc_format_decoder): Rename plus argument to set_locus,
remove ATTRIBUTE_UNUSED from all arguments, call default_tree_printer
if not a Fortran specific spec.
* trans-io.c: Include options.h.
(gfc_build_st_parameter): Temporarily disable -Wpadded around layout
of artificial IO data structures.
testsuite/
* gfortran.dg/pr79886.f90: New test.

From-SVN: r246203

gcc/ChangeLog
gcc/fortran/ChangeLog
gcc/fortran/error.c
gcc/fortran/trans-io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr79886.f90 [new file with mode: 0644]
gcc/tree-diagnostic.c
gcc/tree-diagnostic.h

index 4def3a56312409039225873c9f25e5bd01243896..ee94c4f97eb3b32c954fe1be36e8551803427fc6 100644 (file)
@@ -1,3 +1,9 @@
+2017-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/79886
+       * tree-diagnostic.c (default_tree_printer): No longer static.
+       * tree-diagnostic.h (default_tree_printer): New prototype.
+
 2017-03-16  Tamar Christina  <tamar.christina@arm.com>
 
        * config/aarch64/aarch64-simd.md (*aarch64_simd_mov<mode>)
index 8629cab6ccb658668c8ab3adccd3a411242d826e..b617d45ca86b775061b39150950576af9972d846 100644 (file)
@@ -1,3 +1,13 @@
+2017-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/79886
+       * error.c (gfc_format_decoder): Rename plus argument to set_locus,
+       remove ATTRIBUTE_UNUSED from all arguments, call default_tree_printer
+       if not a Fortran specific spec.
+       * trans-io.c: Include options.h.
+       (gfc_build_st_parameter): Temporarily disable -Wpadded around layout
+       of artificial IO data structures.
+
 2017-03-15  David Malcolm  <dmalcolm@redhat.com>
 
        PR fortran/79860
index ccf0be019e2f6f55968450ad61644f5542fef58c..0312499f324ecbbc68c3d5945a43010d6264c01b 100644 (file)
@@ -916,10 +916,8 @@ gfc_notify_std (int std, const char *gmsgid, ...)
    %L  Takes locus argument
 */
 static bool
-gfc_format_decoder (pretty_printer *pp,
-                   text_info *text, const char *spec,
-                   int precision ATTRIBUTE_UNUSED, bool wide ATTRIBUTE_UNUSED,
-                   bool plus ATTRIBUTE_UNUSED, bool hash ATTRIBUTE_UNUSED)
+gfc_format_decoder (pretty_printer *pp, text_info *text, const char *spec,
+                   int precision, bool wide, bool set_locus, bool hash)
 {
   switch (*spec)
     {
@@ -946,7 +944,11 @@ gfc_format_decoder (pretty_printer *pp,
        return true;
       }
     default:
-      return false;
+      /* Fall through info the middle-end decoder, as e.g. stor-layout.c
+        etc. diagnostics can use the FE printer while the FE is still
+        active.  */
+      return default_tree_printer (pp, text, spec, precision, wide,
+                                  set_locus, hash);
     }
 }
 
index fbbad46de672a4801105b7817f424c1136069342..36e84be83c1ba869acd07cc8fd6da75a869db5e5 100644 (file)
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "trans-array.h"
 #include "trans-types.h"
 #include "trans-const.h"
+#include "options.h"
 
 /* Members of the ioparm structure.  */
 
@@ -219,7 +220,12 @@ gfc_build_st_parameter (enum ioparam_type ptype, tree *types)
          gcc_unreachable ();
        }
 
+  /* -Wpadded warnings on these artificially created structures are not
+     helpful; suppress them. */
+  int save_warn_padded = warn_padded;
+  warn_padded = 0;
   gfc_finish_type (t);
+  warn_padded = save_warn_padded;
   st_parameter[ptype].type = t;
 }
 
index 3ca7b5fc48397450ed1de9863156a11c29fd7414..2fbdeb581ad122bf1746dc0ccc6cbfd9cb75511a 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/79886
+       * gfortran.dg/pr79886.f90: New test.
+
 2017-03-15  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        PR target/79038
diff --git a/gcc/testsuite/gfortran.dg/pr79886.f90 b/gcc/testsuite/gfortran.dg/pr79886.f90
new file mode 100644 (file)
index 0000000..a62cd18
--- /dev/null
@@ -0,0 +1,17 @@
+! PR fortran/79886
+! { dg-do compile }
+! { dg-options "-Wpadded" }
+
+subroutine pr79886
+  type :: foo
+    integer (kind=1) :: a
+    integer (kind=8) :: b      ! { dg-warning "padding struct to align" }
+    integer (kind=1) :: c
+    integer (kind=8) :: d      ! { dg-warning "padding struct to align" }
+  end type
+  type (foo) :: f
+  f%a = 1
+  f%b = 2
+  f%c = 3
+  f%d = 4
+end subroutine
index 7edea0e69a7f6952d868138d07688d096b066673..4f211ed42b3565701ca74055f4c6c54e6878922f 100644 (file)
@@ -243,7 +243,7 @@ virt_loc_aware_diagnostic_finalizer (diagnostic_context *context,
 }
 
 /* Default tree printer.   Handles declarations only.  */
-static bool
+bool
 default_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
                      int precision, bool wide, bool set_locus, bool hash)
 {
index 01109445197631200b7e3f97f596326c52301763..e95183f92f7e260a401047b04e2a06111bbcad84 100644 (file)
@@ -54,4 +54,7 @@ void virt_loc_aware_diagnostic_finalizer (diagnostic_context *,
                                          diagnostic_info *);
 
 void tree_diagnostics_defaults (diagnostic_context *context);
+bool default_tree_printer (pretty_printer *, text_info *, const char *,
+                          int, bool, bool, bool);
+
 #endif /* ! GCC_TREE_DIAGNOSTIC_H */