From: Joost VandeVondele Date: Fri, 22 Aug 2014 10:14:50 +0000 (+0000) Subject: re PR fortran/61234 (Warn for use-stmt without explicit only-list.) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7e114fadf1ac83f36b1b84c60045ba016c4f37fa;p=gcc.git re PR fortran/61234 (Warn for use-stmt without explicit only-list.) 2014-08-22 Joost VandeVondele * gfortran.dg/use_without_only_1.f90: New test. 2014-08-22 Joost VandeVondele 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. From-SVN: r214311 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fcb4a7bb698..1ced6fa187d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2014-08-22 Joost VandeVondele + + 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 PR fortran/62214 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index d6fcceea59e..b208a89e29f 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 3d04f191ae8..18d0c9ea37e 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 59f635d0c64..72d0dcf0072 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 bd7da1c37df..3d5e247e196 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 2f4338e175e..d648e949800 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 92b9c9e8c9b..8dd980b8a6f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-08-22 Joost VandeVondele + + * gfortran.dg/use_without_only_1.f90: New test. + 2014-08-22 Igor Zamyatin PR other/62008 @@ -5,7 +9,7 @@ 2014-08-22 Tony Wang - * 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 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 00000000000..8554539b3ea --- /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" } }