[gcc(refs/vendors/ibm/heads/perf)] Ensure sufficient size of variables used for module+submodule names.
Jiu Fu Guo
guojiufu@gcc.gnu.org
Thu Mar 19 06:02:54 GMT 2020
https://gcc.gnu.org/g:f3c276aec26d9e406cc4bbf0e18b1105df63f0ee
commit f3c276aec26d9e406cc4bbf0e18b1105df63f0ee
Author: Andrew Benson <abenson@carnegiescience.edu>
Date: Mon Mar 2 17:28:35 2020 +0000
Ensure sufficient size of variables used for module+submodule names.
PR fortran/93486
* module.c: Increase size of variables used to read module names
when loading interfaces from module files to permit cases where
the name is the concatenation of a module and submodule name.
* gfortran.dg/pr93486.f90: New test.
Diff:
---
gcc/fortran/ChangeLog | 8 ++++++++
gcc/fortran/module.c | 8 ++++++--
gcc/testsuite/gfortran.dg/pr93486.f90 | 30 ++++++++++++++++++++++++++++++
3 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1256b95ae75..e3957fbac4d 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2020-03-02 Andrew Benson <abensonca@gmail.com>
+
+ PR fortran/93486
+ * module.c: Increase size of variables used to read module names
+ when loading interfaces from module files to permit cases where
+ the name is the concatenation of a module and submodule name.
+ * gfortran.dg/pr93486.f90: New test.
+
2020-03-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/92976
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 4487f65eafd..b6a4e87cb1a 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -4568,7 +4568,9 @@ static void
load_operator_interfaces (void)
{
const char *p;
- char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
+ /* "module" must be large enough for the case of submodules in which the name
+ has the form module.submodule */
+ char name[GFC_MAX_SYMBOL_LEN + 1], module[2 * GFC_MAX_SYMBOL_LEN + 2];
gfc_user_op *uop;
pointer_info *pi = NULL;
int n, i;
@@ -4624,7 +4626,9 @@ static void
load_generic_interfaces (void)
{
const char *p;
- char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
+ /* "module" must be large enough for the case of submodules in which the name
+ has the form module.submodule */
+ char name[GFC_MAX_SYMBOL_LEN + 1], module[2 * GFC_MAX_SYMBOL_LEN + 2];
gfc_symbol *sym;
gfc_interface *generic = NULL, *gen = NULL;
int n, i, renamed;
diff --git a/gcc/testsuite/gfortran.dg/pr93486.f90 b/gcc/testsuite/gfortran.dg/pr93486.f90
new file mode 100644
index 00000000000..5037d4087a1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr93486.f90
@@ -0,0 +1,30 @@
+! { dg-do compile }
+! PR fortran/93486
+module ivs
+ interface l
+ module procedure l_
+ end interface l
+contains
+ function l_()
+ end function l_
+end module ivs
+
+module aModeratleyLongModuleName
+ use ivs
+ interface
+ module subroutine cmo()
+ end subroutine cmo
+ end interface
+end module aModeratleyLongModuleName
+
+submodule (aModeratleyLongModuleName) aNameForASubmoduleThatIsVeryLongButWhichIsLegalStill
+contains
+ module procedure cmo
+ end procedure cmo
+end submodule aNameForASubmoduleThatIsVeryLongButWhichIsLegalStill
+
+submodule (aModeratleyLongModuleName:aNameForASubmoduleThatIsVeryLongButWhichIsLegalStill) sb
+end submodule sb
+
+submodule (aModeratleyLongModuleName:sb) sc
+end submodule sc
More information about the Gcc-cvs
mailing list