aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2025-08-21 14:31:16 -0700
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2025-08-21 14:36:49 -0700
commit2c1fd2fdb3029fdd3ea3f88fe635f37b3a5fae36 (patch)
tree2f86c5df5b9549861804c639a0eeacc21774c465
parent625af54662b4ff95c40d7b91fbb047ada6b06622 (diff)
downloadgcc-2c1fd2fdb3029fdd3ea3f88fe635f37b3a5fae36.zip
gcc-2c1fd2fdb3029fdd3ea3f88fe635f37b3a5fae36.tar.gz
gcc-2c1fd2fdb3029fdd3ea3f88fe635f37b3a5fae36.tar.bz2
Fortran: Fix NULL pointer issue.
PR fortran/121627 gcc/fortran/ChangeLog: * module.cc (create_int_parameter_array): Avoid NULL pointer dereference and enhance error message. gcc/testsuite/ChangeLog: * gfortran.dg/pr121627.f90: New test.
-rw-r--r--gcc/fortran/module.cc7
-rw-r--r--gcc/testsuite/gfortran.dg/pr121627.f905
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/fortran/module.cc b/gcc/fortran/module.cc
index 070b316..e05b08b 100644
--- a/gcc/fortran/module.cc
+++ b/gcc/fortran/module.cc
@@ -7277,10 +7277,13 @@ create_int_parameter_array (const char *name, int size, gfc_expr *value,
tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
if (tmp_symtree != NULL)
{
- if (strcmp (modname, tmp_symtree->n.sym->module) == 0)
+ if (tmp_symtree->n.sym->module &&
+ strcmp (modname, tmp_symtree->n.sym->module) == 0)
return;
else
- gfc_error ("Symbol %qs already declared", name);
+ gfc_error ("Symbol %qs already declared at %L conflicts with "
+ "symbol in %qs at %C", name,
+ &tmp_symtree->n.sym->declared_at, modname);
}
gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree, false);
diff --git a/gcc/testsuite/gfortran.dg/pr121627.f90 b/gcc/testsuite/gfortran.dg/pr121627.f90
new file mode 100644
index 0000000..c3ce218
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr121627.f90
@@ -0,0 +1,5 @@
+! { dg-do compile }
+program real_kinds ! { dg-error "already declared at" }
+ use iso_fortran_env ! { dg-error "already declared at" }
+ i = real64
+end program real_kinds