PR pretty-print/67567 do not pass NULL as a string

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
parent f700c7ca
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> 2015-09-25 Oleg Endo <olegendo@gcc.gnu.org>
PR target/67675 PR target/67675
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> 2015-09-21 Steven G. Kargl <kargl@gcc.gnu.org>
* resolve.c (nonscalar_typebound_assign): Fix typos in comment. * resolve.c (nonscalar_typebound_assign): Fix typos in comment.
......
...@@ -11743,7 +11743,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) ...@@ -11743,7 +11743,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
{ {
gfc_error ("Mismatch in PURE attribute between MODULE " gfc_error ("Mismatch in PURE attribute between MODULE "
"PROCEDURE at %L and its interface in %s", "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; return false;
} }
...@@ -11759,7 +11762,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) ...@@ -11759,7 +11762,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
{ {
gfc_error ("Mismatch in RECURSIVE attribute between MODULE " gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
"PROCEDURE at %L and its interface in %s", "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; return false;
} }
...@@ -11768,7 +11774,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) ...@@ -11768,7 +11774,10 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
{ {
gfc_error ("%s between the MODULE PROCEDURE declaration " gfc_error ("%s between the MODULE PROCEDURE declaration "
"in module %s and the declaration at %L in " "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); &sym->declared_at, sym->ns->proc_name->name);
return false; return false;
} }
......
...@@ -905,7 +905,8 @@ pp_character (pretty_printer *pp, int c) ...@@ -905,7 +905,8 @@ pp_character (pretty_printer *pp, int c)
void void
pp_string (pretty_printer *pp, const char *str) 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. */ /* Maybe print out a whitespace if needed. */
......
...@@ -139,6 +139,7 @@ output_buffer_formatted_text (output_buffer *buff) ...@@ -139,6 +139,7 @@ output_buffer_formatted_text (output_buffer *buff)
static inline void static inline void
output_buffer_append_r (output_buffer *buff, const char *start, int length) output_buffer_append_r (output_buffer *buff, const char *start, int length)
{ {
gcc_checking_assert (start);
obstack_grow (buff->obstack, start, length); obstack_grow (buff->obstack, start, length);
buff->line_length += length; buff->line_length += length;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment