aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/interface.cc
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2024-03-22 18:17:15 +0100
committerHarald Anlauf <anlauf@gmx.de>2024-03-22 22:00:53 +0100
commitc083a453dbe51853e26e02edd8b9346fb8618292 (patch)
tree1c0bef4d470bc4f14c366c9548d024c4bb8569f8 /gcc/fortran/interface.cc
parent65b7d1862e11784a0ce67ab758e06dd8aa65b181 (diff)
downloadgcc-c083a453dbe51853e26e02edd8b9346fb8618292.zip
gcc-c083a453dbe51853e26e02edd8b9346fb8618292.tar.gz
gcc-c083a453dbe51853e26e02edd8b9346fb8618292.tar.bz2
Fortran: no size check passing NULL() without MOLD argument [PR55978]
gcc/fortran/ChangeLog: PR fortran/55978 * interface.cc (gfc_compare_actual_formal): Skip size check for NULL() actual without MOLD argument. gcc/testsuite/ChangeLog: PR fortran/55978 * gfortran.dg/null_actual_5.f90: New test.
Diffstat (limited to 'gcc/fortran/interface.cc')
-rw-r--r--gcc/fortran/interface.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc
index 64b9055..7b86a33 100644
--- a/gcc/fortran/interface.cc
+++ b/gcc/fortran/interface.cc
@@ -3439,6 +3439,10 @@ gfc_compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
if (f->sym->ts.type == BT_CLASS)
goto skip_size_check;
+ /* Skip size check for NULL() actual without MOLD argument. */
+ if (a->expr->expr_type == EXPR_NULL && a->expr->ts.type == BT_UNKNOWN)
+ goto skip_size_check;
+
actual_size = get_expr_storage_size (a->expr);
formal_size = get_sym_storage_size (f->sym);
if (actual_size != 0 && actual_size < formal_size