PR fortran/31629
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 Aug 2007 20:19:59 +0000 (20:19 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 Aug 2007 20:19:59 +0000 (20:19 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127381 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/gfortran.h
gcc/fortran/invoke.texi
gcc/fortran/lang.opt
gcc/fortran/module.c
gcc/fortran/options.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/module_private_1.f90 [new file with mode: 0644]

index ecb7569..9e82b0f 100644 (file)
@@ -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
index dd1647d..704ff7e 100644 (file)
@@ -1865,6 +1865,7 @@ typedef struct
   int flag_d_lines;
   int flag_openmp;
   int flag_sign_zero;
+  int flag_module_private;
 
   int fpe;
 
index b1d790a..3f27528 100644 (file)
@@ -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
index bb99a82..3072051 100644 (file)
@@ -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
index baba5c7..9ef0f40 100644 (file)
@@ -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;
 }
 
 
index ad639ee..0bea67d 100644 (file)
@@ -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;
index b2ae17c..33fb738 100644 (file)
@@ -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 (file)
index 0000000..66bc564
--- /dev/null
@@ -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