<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64899>64899</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] Incorrect value of lower_bound in C descriptor for nonallocatable nonpointer object
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kkwli
</td>
</tr>
</table>
<pre>
The value of `lower_bound` is incorrect for nonallocatable nonpointer object.
## C source
```c
#include <stdio.h>
#include "ISO_Fortran_binding.h"
void getbounds(CFI_cdesc_t *p)
{
printf("%s: attribute=", __func__);
switch (p->attribute) {
case CFI_attribute_pointer:
printf("pointer\n");
break;
case CFI_attribute_allocatable:
printf("allocatable\n");
break;
default:
printf("other\n");
}
for (int i=0; i<p->rank; i++) {
printf("%s: dim[%d].lower_bound=%ld extent=%ld sm=%ld\n", __func__,
i, p->dim[i].lower_bound, p->dim[i].extent, p->dim[i].sm);
}
}
```
## Fortran source
```fortran
interface
subroutine foo(x) bind(c)
real :: x(:)
end
end interface
real :: z(7)
call foo(z)
end
subroutine foo(x) bind(c)
interface
subroutine getbounds(p) bind(c)
real :: p(:)
end
end interface
real :: x(:)
call getbounds(x)
end
```
## Output
```
getbounds: attribute=other
getbounds: dim[0].lower_bound=1 extent=7 sm=4
```
The value of `lower_bound` should be 0 according to the standard:
> For a C descriptor of a nonallocatable nonpointer object, the value of the `lower_bound` member of each element of the `dim` member of the descriptor is zero.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVc1uszoTvhqzGTUCOySwYJEmjdTVu_i-PTK2CT51bGSbtqdXf2QghCREfSNEBs94nmf-bOqcPGkhCpS-ovQQ0c43xhYfH19KRpXh_xb_bwR8UtUJMDWgTazMl7BlZTrN0SYG6UBqZqwVzENtLGijqVKGUU8rJcJna6T2woKp_hHMr1B8QPFufGOCMIE9ONNZJsbFTTw8bDKSmqmOC0Bk7zyXZtUg8vaoxfj9f3_Ko7HeUl1WUnOpT6sGYTwH_TSSw0n4PgaHcLY_vpeMC8dKDwjvWoTz0X77OgjQWql9jXAWfOHUIbID6r2VVecFIod-eQ9lWXealWXwQC57wX1JzxpAOGtfEHm77sM5XCGAUScgcJkMyjF1iOwuRnBD5aJP97pnMEcFqKygH7OVBYBZqZ6CzG0WgO5RuKhpp_xTd8Y3Txij7eEihk5COJPag0TkECPyGoR9n0BL9cewgF_75yaNsFgsLs-hxXHKUXpYzZs4FC9VHEB8e6H99O3OF3EiOy_w_oo3_mQw6AkOYPIeaUE9Yi5o3PlJcq7CZU5uZmns_uWJqgflsNq3Tk0vRgCuq6zpvNQCamMQzr5DasMYIZyxaSoArKAKQoHJDr5DnsluphWaD6LQHO5A5jt_EM62ffF6FaNKjbg_k7fJ1_D-a4b3sc02zie_fbL9NsT2IcRZkL34gPdLivpY50S-FyJeLO-fzredX7S4-rs7nIaJe7QZui1-HIhkNgxbGCZhvYj5y-3gGtMpDpWAGChjxoYDGbwB3whwnmpOLZ9OCkTeQvsChT2E49jK1hsbPNNfr5UwQn5OJnw8EjqLcyV6l4KyBoQSZ6H9zD7k5MYurM_ISAc_wppVxAvCc5LTSBTJJsfbBG83SdQUfJsyylhGknUaZyShdUY2aUJqnlb1GotIFjjGJM4wTkia42SVU1JtaE4Exbxepwlax-JMpVop9XleGXuKpHOdKDbrLM8jRSuhXH9fY1wrqk_haEoPkS2C_UvVnRxax0o6764evPSqv-SHHekB3qdbe0rZLFcg9W0R_uZqjzqrisb71vXdfkT4eJK-6aoVM2eEj4HN-PfSWjOU7dgH5xA-9vH9FwAA__--Loev">