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

    <tr>
        <th>Summary</th>
        <td>
            Error about declaration in module following declaration in the global module
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    I found this while trying to use the `kqueue` API on macOS, but here is a minimal example that shows the same thing, I think, without needing the include. 

There seems to a weird situation in C++ where you have to write `struct kevent` instead of just `kevent`, in order to declare a variable, because the C library has a struct and function with the same name. 

`minimal.ccm`
```
module;
// #include <sys/event.h>
struct kevent { };      // <-- something like this is in that header on macOS
void kevent(int x);     // <--
export module my_mod;
struct kevent evt;
```

And in my shell:
```console
/Dev/llvm-project/build/bin/clang++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -std=c++2b --precompile minimal.ccm -o minimal.pcm
minimal.ccm:6:8: error: declaration of 'kevent' in module my_mod follows declaration in the global module
    6 | struct kevent evt;
      |        ^
minimal.ccm:3:8: note: previous declaration is here
    3 | struct kevent { };
      | ^
1 error generated.

```

This seems like a workaround...

```c++
module;
#include <sys/event.h>
using Renamed = struct kevent;
export module my_mod;
Renamed my_event; 
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVUuv2zgP_TXKhojhSLl2vPAijwYoPnyYYtpFd4VsMbEaWfLokdz8-4FkJ7k3vZ0ahh8yRfIcHtLcOXnUiDV52ZCX3YwH3xlbWy1PXAu0s8aIa_0ZDiZoAb6TDi6dVAjeXqU-gjcQHILvEEiRn_4JGJAUOay_fAajoeftX18J3UITPHRoEaQDDr3UsucK8JX3Q3TWcQ-uMxeXPDnexzWpj3Hr5_R4io8X6TsTPGhEkaJ3CFK3KgjMgOQ7kq_H67cUyyH2LqbI4YLSCnDSB-6l0SA1bAndELqBS7K9mgAdP2M0v1jpEx7nbWg9nPCM2kdYUjuPXIA5wM_gfMJ8-xgTlBqMFWijF4Gt4haBw5lbyRuFiQhs-Y2xLSjZWG6v0PFIyxSOawGHoNuUaIT8IEXz_gkpKfKJzaxt-5jGbXk602tvRFBI2Gb6SveE7oFQNrEHhG3d1RG6T2iyjrBPo-k7CoCUGyDljrANpOPmiG3nc3Cmx1Q1UPKEo1jiqcf6dsgjM3dVJPdnI8WNX7qS2sMrodXN_1v3oz2-DsZ6GPFAf_3RG3GH9T5XPPsH4Pd0jNe1FjG5_gquQ6UIWz8Zt0Y7o_DO2Q7PhO6VOvfzwZqf2HpC902QSsS71ITuW8WjapOw5tJdnTXGRxzrYVCyTeKLNH9vjcCMDwOh-63RHrV3YwRUZkBL6P6L4v5gbB_X_x8Z-54N09KT5dfd_x5Gi2WWZ06cYO68IGzXjtnQBubzwWJr-iH27xvRwNzcX4e2nxTzRlRsXRC2XhG2BrTW2PgwqntsJnMAQstbFctE6tsCwcEoFZv77aYkC4SjMg1Xk_0YOla-AFJu4fcFneRXbmE6yMunjxJnt8S18Rjvg8WzNOEpF5eG08M1-yD8Q_vPKdxjL0Z-4IgaLfcosqdW_VWE32KXjIMqdQ2Hi7EnbuO8zbKP908l_U1r_7mng4tN-jfGaSKAsN17pHdf_9lst-399cdtF3yIcyZqJipW8RnWi6KqSloUrJx1dYVNVZWYi4K1bd4sq6oqVi85siUr8mXJZrKmOWWLeKwW5aLMFmLZlFjS1WFRtSIXZJljz6XKYk9mxh5n0rmAdUlztpop3qBy6c9GqcYLpI-E0vijs3Xq4yYcHVnmSjrvHl689ArrT6mWvIl_nCflTpSMuo5k_knZs2BV3Xk_uDhm0lg7St-FJmtNPw2VX2dLSjhWMAH6NwAA__-4QmWg">