Hi,

with UBSAN instrumented compiler, compiling the testcase
gfortran.dg/altreturn_5.f90 at -O3 fails with:

  /home/worker/buildworker/ubsan/build/gcc/fortran/interface.cc:4717:27: 
runtime error: member access within null pointer of type 'struct gfc_expr'

This patch adds the necessary guard to avoid passing an invalid LOC to
gfc_value_set_and_used even when the EXPR parameter is NULL and the
function will just return.  I have left the NULL check in
gfc_value_set_and_used intact so that the behavior of the function is
consistent with gfc_value_used_expr (and possibly other functions) but
it seems like it could be removed.

Bootstrapped and tested on x86_64-linux, I have also verified the UBSAN
failure is gone with this patch.

OK for master?

Thanks,

Martin


gcc/fortran/ChangeLog:

2026-06-16  Martin Jambor  <[email protected]>

        PR fortran/125860
        * interface.cc (gfc_procedure_use): Check a-> expr is not NULL before
        calling gfc_value_set_and_used.
---
 gcc/fortran/interface.cc | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc
index ad688569812..58308aec9da 100644
--- a/gcc/fortran/interface.cc
+++ b/gcc/fortran/interface.cc
@@ -4714,8 +4714,9 @@ gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist 
**ap, locus *where)
 
       if (implicit)
        for (a = *ap; a; a = a->next)
-         gfc_value_set_and_used (a->expr, &a->expr->where, VALUE_ARG,
-                                 VALUE_MAYBE_USED);
+         if (a->expr)
+           gfc_value_set_and_used (a->expr, &a->expr->where, VALUE_ARG,
+                                   VALUE_MAYBE_USED);
 
       return true;
     }
-- 
2.54.0

Reply via email to