PR pretty-print/67567 do not pass NULL as a string
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Fri, 25 Sep 2015 14:24:11 +0000 (14:24 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Fri, 25 Sep 2015 14:24:11 +0000 (14:24 +0000)
Fortran passes NULL where a non-null string is expected by the pretty-printer,
which causes a sanitizer warning. This could have been found earlier by using
gcc_checking_assert. Even if the assertion is false, the result is just an
incomplete diagnostic, thus it seems more user-friendly to assert only when
checking. I do not have any idea how to properly fix the Fortran bug, thus this
patch simply works-around it.

gcc/fortran/ChangeLog:

2015-09-25  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR pretty-print/67567
* resolve.c (resolve_fl_procedure): Work-around when iface->module
== NULL.

gcc/ChangeLog:

2015-09-25  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR pretty-print/67567
* pretty-print.c (pp_string): Add gcc_checking_assert.
* pretty-print.h (output_buffer_append_r): Likewise.

From-SVN: r228131

gcc/ChangeLog
gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/pretty-print.c
gcc/pretty-print.h

index 1fe4e933737e8b6ba1fc40bd7d70fb4bb832fb50..7c39c519ec25c7e15d6da93c1484adbad12af012 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-25  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR pretty-print/67567
+       * pretty-print.c (pp_string): Add gcc_checking_assert.
+       * pretty-print.h (output_buffer_append_r): Likewise.
+
 2015-09-25  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/67675
index 2b818213b695a44fd6cf439bebfbb84ada02f14c..8e33a1d231c5fb1ab1828c37e52cdba7bac595eb 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-25  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR pretty-print/67567
+       * resolve.c (resolve_fl_procedure): Work-around when iface->module
+       == NULL.
+
 2015-09-21  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        * resolve.c (nonscalar_typebound_assign): Fix typos in comment.
index 7363e0643b92fbdf2124ce845be540952e0bb184..59cf03402fe26fc4a6400fa8fc4fd6df52fdcf21 100644 (file)
@@ -11743,7 +11743,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
        {
          gfc_error ("Mismatch in PURE attribute between MODULE "
                     "PROCEDURE at %L and its interface in %s",
-                    &sym->declared_at, iface->module);
+                    &sym->declared_at, 
+                    /* FIXME: PR fortran/67567: iface->module should
+                       not be NULL !  */
+                    iface->module ? iface->module : "");
          return false;
        }
 
@@ -11759,7 +11762,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
        {
          gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
                     "PROCEDURE at %L and its interface in %s",
-                    &sym->declared_at, iface->module);
+                    &sym->declared_at, 
+                    /* FIXME: PR fortran/67567: iface->module should
+                       not be NULL !  */
+                    iface->module ? iface->module : "");
          return false;
        }
 
@@ -11768,7 +11774,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
        {
          gfc_error ("%s between the MODULE PROCEDURE declaration "
                     "in module %s and the declaration at %L in "
-                    "SUBMODULE %s", errmsg, iface->module,
+                    "SUBMODULE %s", errmsg, 
+                    /* FIXME: PR fortran/67567: iface->module should
+                       not be NULL !  */
+                    iface->module ? iface->module : "",
                     &sym->declared_at, sym->ns->proc_name->name);
          return false;
        }
index fdc7b4da34f79ea6b975b76da27f3966f1445bef..5889015d40004164cd6eb29c288989e321bdb959 100644 (file)
@@ -905,7 +905,8 @@ pp_character (pretty_printer *pp, int c)
 void
 pp_string (pretty_printer *pp, const char *str)
 {
-  pp_maybe_wrap_text (pp, str, str + (str ? strlen (str) : 0));
+  gcc_checking_assert (str);
+  pp_maybe_wrap_text (pp, str, str + strlen (str));
 }
 
 /* Maybe print out a whitespace if needed.  */
index 36d4e37a0d2e1e5dbe29bc4152df50653f6ad422..2654b0fcbecbbd6ea63c91fdef2c1ba9151cf67e 100644 (file)
@@ -139,6 +139,7 @@ output_buffer_formatted_text (output_buffer *buff)
 static inline void
 output_buffer_append_r (output_buffer *buff, const char *start, int length)
 {
+  gcc_checking_assert (start);
   obstack_grow (buff->obstack, start, length);
   buff->line_length += length;
 }