<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/56605>56605</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Flang] (Semantic check?) Incorrect error message when using the same name in interfaces and external statements
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:frontend
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          UsmanNadeem
      </td>
    </tr>
</table>

<pre>
    The standard states:
```
Only one appearance of a name in all of the EXTERNAL statements in a scoping unit is permitted. A name that
appears in an EXTERNAL statement must not also appear as a specific procedure name in an interface block in
the scoping unit.
```

I was testing a piece of code (from NumPy) that works fine on Gfortran but did not compile with Flang. I have put a small test case here.
Consider the following two functions where we violate this constraint:


```
function foo1()
    external bar1

    interface
        function bar1(value) result (r)
            integer, intent(in) :: value
        end function bar1
    end interface
end function foo1

function foo2(bar2)
    external bar2

    interface
        function bar2(value) result (r)
            integer, intent(in) :: value
        end function bar2
    end interface
end function foo2
```

On flang the errors dont make much sense:
```
error: Semantic errors in /app/example.f90
/app/example.f90:5:18: error: 'bar1' was previously called as a subroutine
          function bar1(value) result (r)
                   ^^^^
/app/example.f90:2:14: Previous call of 'bar1'
      external bar1
               ^^^^
/app/example.f90:15:18: error: 'bar2' is already declared in this scoping unit
          function bar2(value) result (r)
                   ^^^^
/app/example.f90:11:15: Previous declaration of 'bar2'
  function foo2(bar2)
                ^^^^
Compiler returned: 1
```

Surprisingly, Gfortran is successfully able to compile the second file but we get an appropriate error `Error: Duplicate EXTERNAL attribute specified` for the first file: https://godbolt.org/z/oKq14a9Kz


Would it be possible to change the error message to something appropriate? Doing so will make debugging much easier.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Vktz4zYM_jXyBVOPTMevgw9uHp3MdrI73e20V4qCbDYUqfIRb_bXF6Bsy0mTdJJDNbIsCiTw4SMerFz9uP62QwhR2lr6ml8ihmK6KcqrotwU8_Jw5-Fnax7BWQTZdSi9tArBNSDByhZBW5DG8IdIKq___Hb9293m115lizaGPAOCcp22W0hWR9ABOvStjhHrMWx6RXEnY2-wt9MvtC-ohDaFCNZFshzcARbIwGY6VLrRCjrvFNbJ44DS0jOibyThr4xT9zTuDTLyc4DjF3non7ewJ0tEV-TZEjqNPR_K1QiFWDbetXCX2i-PhVhlr2Dv_H2ARhOHzsIvjfORaIQqRah1nT1Rru20QdjruIMbI-12DLewkw8IHU0jz1qmme2CkgFhhx4POC-dDbpGn3egcca4PWOLewdNsipqksOeF8Ae4UE7Q0TSZNoGRSLCQsQMu3_-fMrAURsZcRNylRzsBUAXfidyrTRQST85V8LCE_PDJ75OCvMasXyQJiHT5jEkE5lO_8TI8WJ9WyTZZX4l-GJJu0kr2Y_pBnpNT9ahrZ8ZHLCT6BnEJ7Ozv2cunQsEmSZt4lUyxAfIEP83GeJdZIg3EuQzzeD4zdGI3jvK5Npx1sp7pNRVOwhoA75WbvISRv0VW2kj5fJBCeVwIW4o2-mJ32XbGRw3q6PtlyTTzYx-kyVrO6ktxKKPtkXO5M4jZUQKVOMUZRjWh0KSKu8S5Tg-5_vDMXu4itn1cL-FXTD2C4b85YAxI-RaM_hwbuaFDPyo7cmrxAkmjiqHNB5l_Qg1KiM9csj0JeW8kL7F3btC_N34J0cnBvJ6pDLbP3Eozjj8z6x-G8plX8I9OROTt1iz9ckbmfI1-c7rQGSZR07eU2NgFpNSGEKTDAWmrKgzRHdqErlfIdVuykoecyOhyr7FyF2O-PCOFHORz5sHZPf6uItXqTNasezUWGWMXpMOPLZPgj4viYVDR9Gemg4b4vW7GLt8VBA3dG9dXTkTx85vafSDfu7T35MLufr049_d5A-XDMVJhIqamgtBH93aUbnAoV5AS57LbZYF1yKFFbfawa1iegNXjj9S-99ryolcW2qs0nbLn3OVQRk0-vGoXk_r1XQlR1FHg-ti9nPur8XsiuPtVGXUDtU9aeZwvLXKeY8qPgNETdRCCvpQ3QIfLY7ni1PJpNygjTkl43ASGiVv1s_4o3afqjFtLA2MeTj-_US-_kX2aahDSHQ4Ezez-bycjXbrOc6VIIcWQi0XTaMWTSknVYlTpeZSysXIyApNYEcLIXItJnt0LOHeUNMn8nyk16IUolxMVuV0sixnY7msq-YCZyspGzFdlsVFScxoM2Y4vL8jv87IiONAQqNDDINQ0nZuLWZ6Wb9Mcef8-nc6ttg7WSO2o-zIOnvxD-IJPpw">