llvm / llvm/llvm-project

[flang] Issue with save-temps and labels in certain columns and long procedure names

Open
#184,802 12 comments 0 reactions 1 assignee Claimed by @tarunprabhu View on GitHub
flang
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

## Summary

In testing some code with Flang 22, I encountered an issue with `-save-temps`. Well, first I found #119624 (fixing #58587) telling me I had to also add `-fno-integrated-as` to use it. But after that, the compiler kept randomly failing on valid Fortran.

Essentially, when compiling free-form Fortran code with `flang`, enabling `-save-temps` (or `-save-temps=obj` / `-save-temps=cwd`) can cause an indented statement label to be lost *depending on the number of spaces in the indent*, producing:

```
error: Label '101' was not found
```

The same source compiles successfully without `-save-temps`.

---

## Compiler Version

```
> flang --version
flang version 22.1.0 (git@github.com:GEOS-ESM/build-llvm-flang.git 337c2cab67836c0beb2910664cf02d1df1e27609)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /gpfsm/dnb10/projects/p50/comp/SLES-15/llvm-flang/22.1.0/bin
```

---

## Minimal Reproducer

```fortran
write(*, fmt=101) 12
101 format(i0)
end
```

Note that the label `101` is indented (four leading spaces), which is valid in free-form Fortran.

---

## Commands

Baseline (works):

```
flang -O0 -g -c repro.F90
```

With `-save-temps` (fails):

```
flang -O0 -g -fno-integrated-as -save-temps -c repro.F90
```

Error:

```
> flang -O0 -g -fno-integrated-as -save-temps repro.F90
error: Semantic errors in repro.i
./repro.F90:1:7: error: Label '101' was not found
write(*, fmt=101) 12
^^^^^^^^^^^^^^^^^^^^
```

---

## Additional Observations

The failure depends on the indentation of the statement label. Using a small script (see https://gist.github.com/mathomp4/b073a15ca4eaea4bdcc0cad00266cadb) to generate different indent levels produced the following results:

```
> ./run_indent_matrix.sh
spaces | label_col | rc | result
-------+------------+------+------------------------------
0 | 1 | 0 | OK
1 | 2 | 0 | OK
2 | 3 | 0 | OK
3 | 4 | 1 | FAIL: label 101 not found
4 | 5 | 1 | FAIL: label 101 not found
5 | 6 | 1 | FAIL: error: Could not parse obj/repro_indent_5.i
6 | 7 | 0 | OK
7 | 8 | 0 | OK
8 | 9 | 0 | OK

Wrote:
Sources/logs: obj/repro_indent_*.F90 / .log
Table TSV: obj/results.tsv
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.