This is the mail archive of the
gdb-prs@sources.redhat.com
mailing list for the GDB project.
breakpoints/937: Problem with optional function's parameters (Fortran)
- From: sana at stl dot sarov dot ru
- To: gdb-gnats at sources dot redhat dot com
- Cc: miwako dot tokugawa at intel dot com
- Date: 16 Jan 2003 11:27:28 -0000
- Subject: breakpoints/937: Problem with optional function's parameters (Fortran)
- Reply-to: sana at stl dot sarov dot ru
>Number: 937
>Category: breakpoints
>Synopsis: Problem with optional function's parameters (Fortran)
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Jan 16 03:28:01 PST 2003
>Closed-Date:
>Last-Modified:
>Originator: sana@stl.sarov.ru
>Release: unknown-1.0
>Organization:
>Environment:
32-bit && 64-bit Linux
>Description:
Fortran allows to use an optional parameters.
It is fragment of debug information dump, which is generated by Intel compiler for function all_optional1:
<1><113>: Abbrev Number: 3 (DW_TAG_subprogram)
DW_AT_decl_line : 37
DW_AT_decl_column : 0
DW_AT_decl_file : 1
DW_AT_sibling : <1db>
DW_AT_accessibility: 1 (public)
DW_AT_name : all_optional1
DW_AT_type : <6b>
DW_AT_prototyped : 0
DW_AT_high_pc : 0x80493ca 134517706
DW_AT_low_pc : 0x8049316 134517526
DW_AT_external : 1
<2><138>: Abbrev Number: 8 (DW_TAG_formal_parameter)
DW_AT_decl_line : 49
DW_AT_decl_column : 0
DW_AT_decl_file : 1
DW_AT_type : <f8>
DW_AT_is_optional : 1
DW_AT_variable_parameter: 1
DW_AT_name : ipar
DW_AT_location : 3 byte block: 75 8 6 (
DW_OP_breg5: 8
DW_OP_deref)
<2><14b>: Abbrev Number: 8 (DW_TAG_formal_parameter)
DW_AT_decl_line : 49
DW_AT_decl_column : 0
DW_AT_decl_file : 1
DW_AT_type : <ed>
DW_AT_is_optional : 1
DW_AT_variable_parameter: 1
DW_AT_name : rpar
DW_AT_location : 3 byte block: 75 c 6 (
DW_OP_breg5: 12
DW_OP_deref)
<2><15e>: Abbrev Number: 8 (DW_TAG_formal_parameter)
DW_AT_decl_line : 49
DW_AT_decl_column : 0
DW_AT_decl_file : 1
DW_AT_type : <df>
DW_AT_is_optional : 1
DW_AT_variable_parameter: 1
DW_AT_name : lpar
DW_AT_location : 3 byte block: 75 10 6 (
DW_OP_breg5: 16
DW_OP_deref)
<2><171>: Abbrev Number: 8 (DW_TAG_formal_parameter)
DW_AT_decl_line : 49
DW_AT_decl_column : 0
DW_AT_decl_file : 1
DW_AT_type : <1db>
DW_AT_is_optional : 1
DW_AT_variable_parameter: 1
DW_AT_name : arr_par
DW_AT_location : 3 byte block: 75 44 6 (
DW_OP_breg5: -60
DW_OP_deref)
When parameters are passed really debugger shows them correct.
When some parameters are absent debugger's output is:
This GDB was configured as "i386-redhat-linux"...
(gdb) b all_optional1
Breakpoint 1 at 0x8049368: file attr_04.f, line 44.
(gdb) r
Starting program: /home1/sana/trackers/GDB/tr23206/attr_04.exe
Breakpoint 1, all_optional1 (ipar=1, rpar=2, lpar=.FALSE., arr_par=())
at attr_04.f:44
44 l_ipar = present(ipar)
Current language: auto; currently fortran
(gdb) c
Continuing.
Breakpoint 1, all_optional1 (ipar=Cannot access memory at address 0xffffffff
) at attr_04.f:44
44 l_ipar = present(ipar)
(gdb) c
Continuing.
Breakpoint 1, all_optional1 (ipar=1, rpar=Cannot access memory at address 0xffffffff
) at attr_04.f:44
44 l_ipar = present(ipar)
(gdb) c
Continuing.
Breakpoint 1, all_optional1 (ipar=1, rpar=Cannot access memory at address 0xffffffff
) at attr_04.f:44
44 l_ipar = present(ipar)
(gdb)
It does not look like nice and correct.
>How-To-Repeat:
Regression test is:
program attribute_optional
implicit logical (l)
integer arr(1,3)
data arr/3*5/
interface
subroutine all_optional1 (ipar, rpar, lpar, arr_par)
integer,optional::ipar
real,optional::rpar
logical,optional::lpar
integer,optional::arr_par(1,3)
end subroutine
subroutine all_optional2 (ipar, rpar, lpar, arr_par)
integer,optional::ipar
real,optional::rpar
logical,optional::lpar
integer,optional::arr_par(1,3)
end subroutine
end interface
i = 1
r = 2.0
l = .false.
call all_optional1(i,r,l,arr)
call all_optional1()
call all_optional1(i, arr_par=arr)
call all_optional1(lpar=l, ipar=i)
call all_optional2(i,r,l,arr)
call all_optional2()
call all_optional2(i, arr_par=arr)
call all_optional2(lpar=l, ipar=i)
end
subroutine all_optional1 (ipar, rpar, lpar, arr_par)
implicit logical (l)
integer,optional::ipar
real,optional::rpar
logical,optional::lpar
integer,optional::arr_par(1,3)
l_ipar = present(ipar)
l_rpar = present(rpar)
l_lpar = present(lpar)
l_ipar = present(ipar)
l_rpar = present(rpar)
l_lpar = present(lpar)
l_arr_par = present(arr_par)
end
subroutine all_optional2 (ipar, rpar, lpar, arr_par)
implicit logical (l)
integer ipar
real rpar
logical lpar
integer arr_par(1,3)
optional::ipar,rpar,arr_par
optional::lpar
l_ipar = present(ipar)
l_rpar = present(rpar)
l_lpar = present(lpar)
l_arr_par = present(arr_par)
end
Intel compiler should be used fo rreproducing of situation.
G77 does not support this feature at all.
Command line is 'ifc -g attr_04.f'
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="attr_04.f"
Content-Disposition: inline; filename="attr_04.f"
program attribute_optional
implicit logical (l)
integer arr(1,3)
data arr/3*5/
interface
subroutine all_optional1 (ipar, rpar, lpar, arr_par)
integer,optional::ipar
real,optional::rpar
logical,optional::lpar
integer,optional::arr_par(1,3)
end subroutine
subroutine all_optional2 (ipar, rpar, lpar, arr_par)
integer,optional::ipar
real,optional::rpar
logical,optional::lpar
integer,optional::arr_par(1,3)
end subroutine
end interface
i = 1
r = 2.0
l = .false.
call all_optional1(i,r,l,arr)
call all_optional1()
call all_optional1(i, arr_par=arr)
call all_optional1(lpar=l, ipar=i)
call all_optional2(i,r,l,arr)
call all_optional2()
call all_optional2(i, arr_par=arr)
call all_optional2(lpar=l, ipar=i)
end
subroutine all_optional1 (ipar, rpar, lpar, arr_par)
implicit logical (l)
integer,optional::ipar
real,optional::rpar
logical,optional::lpar
integer,optional::arr_par(1,3)
l_ipar = present(ipar)
l_rpar = present(rpar)
l_lpar = present(lpar)
l_arr_par = present(arr_par)
end
subroutine all_optional2 (ipar, rpar, lpar, arr_par)
implicit logical (l)
integer ipar
real rpar
logical lpar
integer arr_par(1,3)
optional::ipar,rpar,arr_par
optional::lpar
l_ipar = present(ipar)
l_rpar = present(rpar)
l_lpar = present(lpar)
l_arr_par = present(arr_par)
end