| ! Copyright 2009-2023 Free Software Foundation, Inc. | 
 | !  | 
 | ! This program is free software; you can redistribute it and/or modify | 
 | ! it under the terms of the GNU General Public License as published by | 
 | ! the Free Software Foundation; either version 3 of the License, or | 
 | ! (at your option) any later version. | 
 | !  | 
 | ! This program is distributed in the hope that it will be useful, | 
 | ! but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | ! GNU General Public License for more details. | 
 | !  | 
 | ! You should have received a copy of the GNU General Public License | 
 | ! along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
 |  | 
 | module mod1 | 
 |         integer :: var_i = 1 | 
 |         integer :: var_const | 
 |         parameter (var_const = 20) | 
 | end module mod1 | 
 |  | 
 | module mod2 | 
 |         integer :: var_i = 2 | 
 | end module mod2 | 
 |  | 
 | module mod3 | 
 |         integer :: mod2 = 3 | 
 |         integer :: mod1 = 3 | 
 |         integer :: var_i = 3 | 
 | end module mod3 | 
 |  | 
 | module modmany | 
 |         integer :: var_a = 10, var_b = 11, var_c = 12, var_i = 14 | 
 | end module modmany | 
 |  | 
 | module moduse | 
 |         integer :: var_x = 30, var_y = 31 | 
 | end module moduse | 
 |  | 
 |         subroutine sub1 | 
 |         use mod1 | 
 |         if (var_i .ne. 1) call abort | 
 |         var_i = 1                         ! i-is-1 | 
 |         end | 
 |  | 
 |         subroutine sub2 | 
 |         use mod2 | 
 |         if (var_i .ne. 2) call abort | 
 |         var_i = 2                         ! i-is-2 | 
 |         end | 
 |  | 
 |         subroutine sub3 | 
 |         use mod3 | 
 |         if (var_i .ne. 3) call abort | 
 |         var_i = 3                         ! i-is-3 | 
 |         END | 
 |  | 
 |         program module | 
 |  | 
 |         use modmany, only: var_b, var_d => var_c, var_i | 
 | 	use moduse, var_z => var_y | 
 |  | 
 |         call sub1 | 
 |         call sub2 | 
 |         call sub3 | 
 |  | 
 |         if (var_b .ne. 11) call abort | 
 |         if (var_d .ne. 12) call abort | 
 |         if (var_i .ne. 14) call abort | 
 |         if (var_x .ne. 30) call abort | 
 |         if (var_z .ne. 31) call abort | 
 |         var_b = 11                         ! a-b-c-d | 
 | end |