aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/gfortran.h1
-rw-r--r--gcc/fortran/invoke.texi9
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/module.c3
-rw-r--r--gcc/fortran/options.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/use_without_only_1.f9022
8 files changed, 57 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fcb4a7b..1ced6fa 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2014-08-22 Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch>
+
+ PR fortran/61234
+ * lang.opt (Wuse-without-only): New flag.
+ * gfortran.h (gfc_option_t): Add it.
+ * invoke.texi: Document it.
+ * module.c (gfc_use_module): Warn if needed.
+ * options.c (gfc_init_options,gfc_handle_option): Init accordingly.
+
2014-08-21 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/62214
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index d6fccee..b208a89 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -2450,6 +2450,7 @@ typedef struct
int warn_tabs;
int warn_underflow;
int warn_intrinsic_shadow;
+ int warn_use_without_only;
int warn_intrinsics_std;
int warn_character_truncation;
int warn_array_temp;
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 3d04f19..18d0c9e 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -142,7 +142,7 @@ and warnings}.
@gccoptlist{-Waliasing -Wall -Wampersand -Warray-bounds
-Wc-binding-type -Wcharacter-truncation @gol
-Wconversion -Wfunction-elimination -Wimplicit-interface @gol
--Wimplicit-procedure -Wintrinsic-shadow -Wintrinsics-std @gol
+-Wimplicit-procedure -Wintrinsic-shadow -Wuse-without-only -Wintrinsics-std @gol
-Wline-truncation -Wno-align-commons -Wno-tabs -Wreal-q-constant @gol
-Wsurprising -Wunderflow -Wunused-parameter -Wrealloc-lhs -Wrealloc-lhs-all @gol
-Wtarget-lifetime -fmax-errors=@var{n} -fsyntax-only -pedantic -pedantic-errors
@@ -896,6 +896,13 @@ intrinsic; in this case, an explicit interface or @code{EXTERNAL} or
@code{INTRINSIC} declaration might be needed to get calls later resolved to
the desired intrinsic/procedure. This option is implied by @option{-Wall}.
+@item -Wuse-without-only
+@opindex @code{Wuse-without-only}
+@cindex warnings, use statements
+@cindex intrinsic
+Warn if a @code{USE} statement has no @code{ONLY} qualifier and
+thus implicitly imports all public entities of the used module.
+
@item -Wunused-dummy-argument
@opindex @code{Wunused-dummy-argument}
@cindex warnings, unused dummy argument
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 59f635d..72d0dcf 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -257,6 +257,10 @@ Wintrinsics-std
Fortran Warning
Warn on intrinsics not part of the selected standard
+Wuse-without-only
+Fortran Warning
+Warn about USE statements that have no ONLY qualifier
+
Wopenmp-simd
Fortran
; Documented in C
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index bd7da1c..3d5e247 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -6741,6 +6741,9 @@ gfc_use_module (gfc_use_list *module)
only_flag = module->only_flag;
current_intmod = INTMOD_NONE;
+ if (!only_flag && gfc_option.warn_use_without_only)
+ gfc_warning_now ("USE statement at %C has no ONLY qualifier");
+
filename = XALLOCAVEC (char, strlen (module_name) + strlen (MODULE_EXTENSION)
+ 1);
strcpy (filename, module_name);
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 2f4338e..d648e94 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -107,6 +107,7 @@ gfc_init_options (unsigned int decoded_options_count,
gfc_option.warn_tabs = 1;
gfc_option.warn_underflow = 1;
gfc_option.warn_intrinsic_shadow = 0;
+ gfc_option.warn_use_without_only = 0;
gfc_option.warn_intrinsics_std = 0;
gfc_option.warn_align_commons = 1;
gfc_option.warn_real_q_constant = 0;
@@ -728,6 +729,10 @@ gfc_handle_option (size_t scode, const char *arg, int value,
gfc_option.warn_intrinsic_shadow = value;
break;
+ case OPT_Wuse_without_only:
+ gfc_option.warn_use_without_only = value;
+ break;
+
case OPT_Walign_commons:
gfc_option.warn_align_commons = value;
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 92b9c9e..8dd980b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2014-08-22 Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch>
+
+ * gfortran.dg/use_without_only_1.f90: New test.
+
2014-08-22 Igor Zamyatin <igor.zamyatin@intel.com>
PR other/62008
@@ -5,7 +9,7 @@
2014-08-22 Tony Wang <tony.wang@arm.com>
- * g++.dg/tls/thread_local6.C: Skip this test case when target uses
+ * g++.dg/tls/thread_local6.C: Skip this test case when target uses
dejagnu wrapper.
2014-08-21 Thomas Koenig <tkoenig@gcc.gnu.org>
diff --git a/gcc/testsuite/gfortran.dg/use_without_only_1.f90 b/gcc/testsuite/gfortran.dg/use_without_only_1.f90
new file mode 100644
index 0000000..8554539
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_without_only_1.f90
@@ -0,0 +1,22 @@
+! PR fortran/61234 Warn for use-stmt without explicit only-list.
+! { dg-do compile }
+! { dg-options "-Wuse-without-only" }
+MODULE foo
+ INTEGER :: bar
+END MODULE
+
+MODULE testmod
+ USE foo ! { dg-warning "has no ONLY qualifier" }
+ IMPLICIT NONE
+CONTAINS
+ SUBROUTINE S1
+ USE foo ! { dg-warning "has no ONLY qualifier" }
+ END SUBROUTINE S1
+ SUBROUTINE S2
+ USE foo, ONLY: bar
+ END SUBROUTINE
+ SUBROUTINE S3
+ USE ISO_C_BINDING ! { dg-warning "has no ONLY qualifier" }
+ END SUBROUTINE S3
+END MODULE
+! { dg-final { cleanup-modules "foo testmod" } }