llvm / llvm/llvm-project

[Flang] Variable declarations in an interface body are not ignored

Open
#204,301 2 comments 0 reactions 1 assignee Claimed by @yus3710-fj View on GitHub
confirmed flang:frontend
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

## Summary

The Fortran 2023 standard specifies that variable declarations within an interface body should be ignored. However, Flang appears to violate this requirement.

* 15.4.3.2 Interface block
> An interface body specifies all of the characteristics of the explicit specific interface or abstract interface. The specification part of an interface body may specify attributes or define values for data entities that do not determine characteristics of the procedure. Such specifications have no effect.

* 15.3.1 Characteristics of procedures
> The characteristics of a procedure are the classification of the procedure as a function or subroutine, whether it is pure, whether it is simple, whether it is elemental, whether it has the BIND attribute, the characteristics of its dummy arguments, and the characteristics of its function result if it is a function.

### Reproducer

* test.f90

```fortran
module m
interface
module subroutine sub
integer:: y=1
end subroutine
end interface
contains
module procedure sub
integer:: y=10
if (y/=10) print *,102
end procedure
end

use m
call sub
print *,'pass'
end
```

* commands

```console
$ flang --version
flang version 23.0.0git (https://github.com/llvm/llvm-project.git e84e480bb5a53c794f303683df6460ddb44bb7ac)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /path/to/llvm/build/bin
Build config: +assertions
$ flang test.f90 && ./a.out
error: Semantic errors in test.f90
test.f90:9:15: error: The type of 'y' has already been declared as INTEGER(4)
integer:: y=10
^
test.f90:4:17: Declaration of 'y'
integer:: y=1
^
```

## Non-problematic Conditions

The issue does not occur under the following conditions:
* Using a submodule for the procedure definition:
```diff
@@ -4,6 +4,9 @@
integer:: y=1
end subroutine
end interface
+end
+
+submodule (m) smod
contains
module procedure sub
integer:: y=10
```

## Other Compilers

* GFortran
```console
$ gfortran --version
GNU Fortran (GCC) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gfortran test.f90 && ./a.out
pass
```

* Intel Fortran
```console
$ ifx --version
ifx (IFX) 2025.3.2 20260112
Copyright (C) 1985-2026 Intel Corporation. All rights reserved.

$ ifx -O0 test.f90 && ./a.out
pass
```

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.