From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4430 invoked by alias); 9 Aug 2007 22:19:52 -0000 Received: (qmail 4380 invoked by uid 22791); 9 Aug 2007 22:19:51 -0000 X-Spam-Check-By: sourceware.org Received: from nf-out-0910.google.com (HELO nf-out-0910.google.com) (64.233.182.187) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 09 Aug 2007 22:19:44 +0000 Received: by nf-out-0910.google.com with SMTP id h3so171391nfh for ; Thu, 09 Aug 2007 15:19:41 -0700 (PDT) Received: by 10.86.70.8 with SMTP id s8mr1484836fga.1186697981618; Thu, 09 Aug 2007 15:19:41 -0700 (PDT) Received: from ?144.82.208.57? ( [144.82.208.57]) by mx.google.com with ESMTPS id k9sm2818999nfh.2007.08.09.15.19.38 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 09 Aug 2007 15:19:39 -0700 (PDT) Mime-Version: 1.0 (Apple Message framework v752.3) To: GNU Fortran , gcc-patches list Message-Id: Content-Type: multipart/mixed; boundary=Apple-Mail-4-84859618 From: FX Coudert Subject: [gfortran,patch] Add -fmodule-private option (PR 31629) Date: Thu, 09 Aug 2007 22:19:00 -0000 X-Mailer: Apple Mail (2.752.3) Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-08/txt/msg00607.txt.bz2 --Apple-Mail-4-84859618 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Content-length: 531 The attached simple patch adds a -fmodule-private option to make module entities private as default, i.e. when you USE a module and compile with this option, you cannot refer to any variable that wasn't explicitly declared as PUBLIC. This is a tool and help for some people's coding style. It's very simple as the code was already factored nicely, so it's in fact a one-liner (plus option-handling stuff, documentation and testcase). Bootstrapped and regtested on x86_64-linux, OK to commit? FX :ADDPATCH fortran: --Apple-Mail-4-84859618 Content-Transfer-Encoding: 7bit Content-Type: application/octet-stream; x-unix-mode=0644; name=module_private.ChangeLog Content-Disposition: attachment; filename=module_private.ChangeLog Content-length: 588 2007-08-10 Francois-Xavier Coudert 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-10 Francois-Xavier Coudert PR fortran/31629 * gfortran.dg/module_private_1.f90: New test. --Apple-Mail-4-84859618 Content-Transfer-Encoding: 7bit Content-Type: application/octet-stream; x-unix-mode=0644; name=module_private.diff Content-Disposition: attachment; filename=module_private.diff Content-length: 3791 Index: lang.opt =================================================================== --- lang.opt (revision 127224) +++ lang.opt (working copy) @@ -212,6 +212,10 @@ fmax-stack-var-size= Fortran RejectNegative Joined UInteger -fmax-stack-var-size= 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: gfortran.h =================================================================== --- gfortran.h (revision 127224) +++ gfortran.h (working copy) @@ -1865,6 +1865,7 @@ typedef struct int flag_d_lines; int flag_openmp; int flag_sign_zero; + int flag_module_private; int fpe; Index: invoke.texi =================================================================== --- invoke.texi (revision 127228) +++ invoke.texi (working copy) @@ -121,7 +121,7 @@ by type. Explanations are in the follow -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 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: module.c =================================================================== --- module.c (revision 127224) +++ module.c (working copy) @@ -3714,7 +3714,10 @@ gfc_check_access (gfc_access specific_ac 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: options.c =================================================================== --- options.c (revision 127224) +++ options.c (working copy) @@ -93,6 +93,7 @@ gfc_init_options (unsigned int argc ATTR 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 c 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: gcc/testsuite/gfortran.dg/module_private_1.f90 =================================================================== --- gcc/testsuite/gfortran.dg/module_private_1.f90 (revision 0) +++ gcc/testsuite/gfortran.dg/module_private_1.f90 (revision 0) @@ -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 --Apple-Mail-4-84859618--