aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>2007-08-12 20:19:59 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2007-08-12 20:19:59 +0000
commit654b60732e6a604471862085f0037fd05df86887 (patch)
tree412c4a82e24e651226e265eae27b203315512a79 /gcc
parent5cda5098057c002cf332708f0e5b53bb35d49d76 (diff)
downloadgcc-654b60732e6a604471862085f0037fd05df86887.zip
gcc-654b60732e6a604471862085f0037fd05df86887.tar.gz
gcc-654b60732e6a604471862085f0037fd05df86887.tar.bz2
re PR fortran/31629 (option to make module entities PRIVATE by default)
PR fortran/31629 * lang.opt (-fmodule-private): New option. * gfortran.h (gfc_option_t): Add flag_module_private member. * invoke.texi (-fmodule-private): Document the new option. * module.c (gfc_check_access): Allow the -fmodule-private option to modify the default behaviour. * options.c (gfc_init_options): Initialize flag_module_private. (gfc_handle_option): Handle -fmodule-private. * gfortran.dg/module_private_1.f90: New test. From-SVN: r127381
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog11
-rw-r--r--gcc/fortran/gfortran.h1
-rw-r--r--gcc/fortran/invoke.texi10
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/module.c5
-rw-r--r--gcc/fortran/options.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/module_private_1.f9020
8 files changed, 59 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ecb7569..9e82b0f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,16 @@
2007-08-12 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+ PR fortran/31629
+ * lang.opt (-fmodule-private): New option.
+ * gfortran.h (gfc_option_t): Add flag_module_private member.
+ * invoke.texi (-fmodule-private): Document the new option.
+ * module.c (gfc_check_access): Allow the -fmodule-private option
+ to modify the default behaviour.
+ * options.c (gfc_init_options): Initialize flag_module_private.
+ (gfc_handle_option): Handle -fmodule-private.
+
+2007-08-12 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
PR fortran/29600
* intrinsic.c (add_functions): Add KIND arguments to COUNT,
IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, SCAN, SIZE, UBOUND
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index dd1647d..704ff7e 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1865,6 +1865,7 @@ typedef struct
int flag_d_lines;
int flag_openmp;
int flag_sign_zero;
+ int flag_module_private;
int fpe;
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index b1d790a..3f27528 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -121,7 +121,7 @@ by type. Explanations are in the following sections.
-ffixed-line-length-@var{n} -ffixed-line-length-none @gol
-ffree-line-length-@var{n} -ffree-line-length-none @gol
-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol
--fcray-pointer -fopenmp -frange-check -fno-backslash }
+-fcray-pointer -fopenmp -frange-check -fno-backslash -fmodule-private}
@item Error and Warning Options
@xref{Error and Warning Options,,Options to request or suppress errors
@@ -238,6 +238,14 @@ Allow @samp{$} as a valid character in a symbol name.
Change the interpretation of backslashes in string literals from
``C-style'' escape characters to a single backslash character.
+@item -fmodule-private
+@opindex @code{fmodule-private}
+@cindex module entities
+@cindex private
+Set the default accessibility of module entities to @code{PRIVATE}.
+Use-associated entities will not be accessible unless they are explicitly
+declared as @code{PUBLIC}.
+
@item -ffixed-line-length-@var{n}
@opindex @code{ffixed-line-length-}@var{n}
@cindex file format, fixed
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index bb99a82..3072051 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -212,6 +212,10 @@ fmax-stack-var-size=
Fortran RejectNegative Joined UInteger
-fmax-stack-var-size=<n> Size in bytes of the largest array that will be put on the stack
+fmodule-private
+Fortran
+Set default accessibility of module entities to PRIVATE.
+
fopenmp
Fortran
Enable OpenMP
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index baba5c7..9ef0f40 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3714,7 +3714,10 @@ gfc_check_access (gfc_access specific_access, gfc_access default_access)
if (specific_access == ACCESS_PRIVATE)
return FALSE;
- return default_access != ACCESS_PRIVATE;
+ if (gfc_option.flag_module_private)
+ return default_access == ACCESS_PUBLIC;
+ else
+ return default_access != ACCESS_PRIVATE;
}
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index ad639ee..0bea67d 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -93,6 +93,7 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED,
gfc_option.flag_preprocessed = 0;
gfc_option.flag_automatic = 1;
gfc_option.flag_backslash = 1;
+ gfc_option.flag_module_private = 0;
gfc_option.flag_backtrace = 0;
gfc_option.flag_allow_leading_underscore = 0;
gfc_option.flag_dump_core = 0;
@@ -575,6 +576,10 @@ gfc_handle_option (size_t scode, const char *arg, int value)
gfc_option.flag_max_stack_var_size = value;
break;
+ case OPT_fmodule_private:
+ gfc_option.flag_module_private = value;
+ break;
+
case OPT_frange_check:
gfc_option.flag_range_check = value;
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b2ae17c..33fb738 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2007-08-12 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+ PR fortran/31629
+ * gcc/testsuite/gfortran.dg/module_private_1.f90: New test.
+
+2007-08-12 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
PR fortran/29600
* gfortran.dg/intrinsics_kind_argument_1.f90: New test.
* gfortran.dg/pure_dummy_length_1.f90: Adapt to new error wording.
diff --git a/gcc/testsuite/gfortran.dg/module_private_1.f90 b/gcc/testsuite/gfortran.dg/module_private_1.f90
new file mode 100644
index 0000000..66bc564
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/module_private_1.f90
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! { dg-options "-fmodule-private" }
+module bar
+ implicit none
+ public :: i
+ integer :: i
+end module bar
+
+module foo
+ implicit none
+ integer :: j
+end module foo
+
+program main
+ use bar, only : i
+ use foo, only : j ! { dg-error "not found in module" }
+ i = 1
+ j = 1
+ print *, i, j
+end program main