]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: Fix NULL pointer issue.
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 21 Aug 2025 21:31:16 +0000 (14:31 -0700)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 21 Aug 2025 21:36:49 +0000 (14:36 -0700)
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.

gcc/fortran/module.cc
gcc/testsuite/gfortran.dg/pr121627.f90 [new file with mode: 0644]

index 070b3164ea3aa4990a247bc5de2d2580d2867492..e05b08bd14ed523d698faf926fcc1d4fbf0180dc 100644 (file)
@@ -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 (file)
index 0000000..c3ce218
--- /dev/null
@@ -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