<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110700>110700</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Iteration variable in OpenMP work-sharing loops is wrong based on DWARF
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jprotze
</td>
</tr>
</table>
<pre>
This issue is related to #107125.
Based on a code like:
```C
#include <omp.h>
#include <stdio.h>
int main(int argc, char **argv) {
const int n = 100 * argc;
double a[n], total=42., c = .3;
#pragma omp parallel for reduction(+ : total)
for (int i = 0; i < n; i++) {
total += a[i] = i * c;
}
printf("total=%lf, expected:%lf, a[50]=%lf\n", total, c * n * (n - 1) / 2, a[50]);
}
```
compiled as:
```
clang -g -fopenmp test-dwarf.c
llvm-dwarfdump
```
Produces something like:
```
0x000000f6: DW_TAG_variable
DW_AT_location (DW_OP_fbreg -52)
DW_AT_name (".omp.iv")
DW_AT_type (0x000001ad "int")
DW_AT_artificial (true)
0x00000108: DW_TAG_variable
DW_AT_location (DW_OP_fbreg -68)
DW_AT_name ("i")
DW_AT_type (0x000001ad "int")
DW_AT_artificial (true)
```
Since `i` points to a location that never changes, it's difficult to find the right value of `i`. From a users perspective, `i` should just point to the location of `.omp.iv`, which seem to represent the local value of i. When trying to print `a[i]` using `a[.omp.iv]`, gdb emits a parsing error, because dot is not a valid character in a symbol name.
At line 11, gdb (focused on the second of four threads) prints these local variables, and i never changes:
```
(gdb) info locals
.omp.iv = 25
.capture_expr. = 100
i = 0
.omp.ub = 49
.omp.stride = 100
.omp.lb = 25
.omp.is_last = 0
total = 0
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVs2O4zYMfhrlQsSQ5Tg_hxySSVP0UOyiXWCOgSzRtnZlyZDkzE6fvpBsJ5nZ2XaNwOMRyY_8SJo09141BnFPyiMpTws-hNa6_dfe2fAPLiorX_dfWuVBeT8gKA8ONQ8oIVggrMjpJmdlBoSeCD2M9yP3KMEa4CCsRNDqG5JiEpI1HX9P0_-sUEboQSKQ4sl2fdaS4rePZD5IZR-l6a5MgI4rQ9g2PnLXCMKeQLTcAWEHwg7cNVfCdkA2x9EEQFjjA0R9A6Q4QU5pVB6ti5uatEOlETgpj4aUp4gbbOCaFKcVy5KbZJ4VNyPCit7xpuNgux567rjWqKG2DhzKQQRlY6iEHYEUhwkuBje5jIoTFZWwKSmO6fEJTHok7Jh-bwjBiARRUpxSxIqUp4SgErVHXmRzmh57p0yoU0BspkZYqetIDr_3KALKWLv5LCKXNCZjViyfDGHsnpsxK-wQU8sOkYyBJeQpYHYG9haF7e6pm6O6tchjnYXteqVRAvf3XvpIXWhuGlg2sKxtj6brIaAPS_nCXZ2JUUfrazeeyKHrP4T57KwcBHrwtsPQKtO86-OPjOh3mq56HYs7Xqfny5fD75crd4pXGqfEn54vhy8XbQWPHTFqErY9PV8-fb7UlcMGliWL6blV-P01QhjeIYwFzOLbo66pGv9rF157TC6nmHMugTCmTHhjPypzF1SthOJ6ijO4AW9Kb7jndBu5f8z6p9H8dyLW219NxJQJ9QGHXyT8U_yHHPyQgLdd8LcyAoGsqSJrCr1VJvg4LjncaIaWBzB4RRcnlWnQx9dCBcI2HqSqayUGHaJRrYyE0CI41bQBrlwPCLae4TM4O9sBh8Gj89Cj8_GlVVeMgHMMvrWDlvB18GGMJyJH0FtAI-LcQWsarV9aJVrwiF1Ud9g79BhtJ0N9j0Zl8NyigeBe45sS7DhZIuY8i2Icg4_S6XB2lkTRXyMrwE4FDzxOzqSLzlkXhRUKPngEaUPcQsYG4NG_kmnWcxHQgYo7x792ldUQ-yF7bNBDAK0MQp7Pzgjb1lYM07aKtDwKa2RkVNvBQWgdcunj7Ep8fFTyd_Zjc6facSNBvSvpDztv3hHbRlYRVJnajmB-FE05SXObldOZ4H0YHF7we--yeV9N22_aEXfjoUpHq93DmQ9OpR36YJkEunrrKXn3F819eASedsv94B2hhdwXclfs-AL3-YZttjQv1_mi3edymxe52NF6V9eU1ZsKMZflTsrtpqCMLtSeUbbKKc3zdclWeUbZrpA7Jjas3NWUrsiKYseVzuLIzqxrFulDZJ_ndEPpQvMKtZ8_Xtw-DfZqaDxZUa188He7oILG_R8B3djxc_Vi03zq0fz5GV6s-7b0LXdp2lvbx88eeHHWNFDNHzWn58Nf58Xg9L4NoU9FZmfCzo0K7VBlwnaEnaPX6c-yd_YrikDYOYXuCTtP0V_37N8AAAD__-bnspI">