Skip to content

Commit 8221201

Browse files
Steve KarglJerry DeLisle
Steve Kargl
authored and
Jerry DeLisle
committed
Fortran: namelist-object-name renaming.
PR fortran/105847 gcc/fortran/ChangeLog: * trans-io.cc (transfer_namelist_element): When building the namelist object name, if the use rename attribute is set, use the local name specified in the use statement. gcc/testsuite/ChangeLog: * gfortran.dg/pr105847.f90: New test.
1 parent 430c772 commit 8221201

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

gcc/fortran/trans-io.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -1692,8 +1692,10 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name,
16921692
gcc_assert (sym || c);
16931693

16941694
/* Build the namelist object name. */
1695-
1696-
string = gfc_build_cstring_const (var_name);
1695+
if (sym && !sym->attr.use_only && sym->attr.use_rename)
1696+
string = gfc_build_cstring_const (sym->ns->use_stmts->rename->local_name);
1697+
else
1698+
string = gfc_build_cstring_const (var_name);
16971699
string = gfc_build_addr_expr (pchar_type_node, string);
16981700

16991701
/* Build ts, as and data address using symbol or component. */
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
! { dg-do run }
2+
module m
3+
integer :: name_in_module = 123
4+
end module
5+
6+
program foo
7+
8+
use m, name_in_program => name_in_module
9+
namelist /nl/ name_in_program
10+
11+
if (name_in_program /= 123) stop 1
12+
13+
open(unit=10, file='fort.10', status='replace')
14+
write(10,nl)
15+
close(10)
16+
17+
name_in_program = 42
18+
if (name_in_program /= 42) stop 2
19+
20+
open(unit=10, file='fort.10', status='old')
21+
read(10,nl)
22+
if (name_in_program /= 123) stop 3
23+
close(10)
24+
25+
call bar
26+
27+
contains
28+
29+
subroutine bar
30+
integer name_in_program
31+
namelist /nl/ name_in_program
32+
name_in_program = 0
33+
open(unit=10, file='fort.10', status='old')
34+
read(10,nl)
35+
if (name_in_program /= 123) stop 4
36+
close(10,status='delete')
37+
end subroutine bar
38+
39+
end

0 commit comments

Comments
 (0)