From: Harald Anlauf Date: Thu, 4 Jun 2020 19:00:33 +0000 (+0200) Subject: PR fortran/95500 - Segfault compiling extra interface on intrinsic X-Git-Tag: releases/gcc-9.4.0~910 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa0d6c132c8fd7deb118f8309aa9dfe41a88e840;p=thirdparty%2Fgcc.git PR fortran/95500 - Segfault compiling extra interface on intrinsic Converting an expression so that it can be passed by reference could result in a NULL pointer dereference. 2020-06-04 Steven G. Kargl Harald Anlauf gcc/fortran/ PR fortran/95500 * trans-expr.c (gfc_conv_expr_reference): Do not dereference NULL pointer. gcc/testsuite/ PR fortran/95500 * gfortran.dg/pr95500.f90: New test. (cherry picked from commit 8c727bdf4acf28c8315b119a1c8f6d6af745c2af) --- diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index fe10d52dd164..b34e8c6020b3 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -8558,6 +8558,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr, bool add_clobber) if (expr->expr_type == EXPR_FUNCTION && ((expr->value.function.esym + && expr->value.function.esym->result && expr->value.function.esym->result->attr.pointer && !expr->value.function.esym->result->attr.dimension) || (!expr->value.function.esym && !expr->ref diff --git a/gcc/testsuite/gfortran.dg/pr95500.f90 b/gcc/testsuite/gfortran.dg/pr95500.f90 new file mode 100644 index 000000000000..e9eb7c65c864 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95500.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! PR fortran/95500 - ICE compiling extra interface on intrinsic + +program test_intrinsic + implicit none + intrinsic :: alog + intrinsic :: dlog + real (4), parameter :: one = 1 + + interface ln + procedure :: alog, dlog + end interface ln + + write (*,*) 'ln 1', ln (one) +end program test_intrinsic