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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] Incorrect treatment of header guards in modular builds
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            clang:modules
      </td>
    </tr>

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

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

<pre>
    Command:

```
$(CLANG) -fmodule-name=foo -fmodule-map-file=foo.cppmap -xc++ -Xclang=-emit-module -fmodules -std=gnu++20 -c foo.cppmap -o foo.pcm
```

foo.cppmap:

```
module "foo" {
 export *
 header "foo.h"
  module "bar" {
  header "bar.h"
 }
}
```

foo.h:

```
#include "baz.h"
```

baz.h:

```
#ifndef BAZ_H_
#define BAZ_H_
#include "bar.h"
namespace  {
 struct Baz {};
}
#endif
```

bar.h:

```
#include "baz.h"
```

Error:

```
While building module 'foo':
In file included from <module-includes>:1:
In file included from ./foo.h:1:
./baz.h:5:8: error: redefinition of 'Baz'
    5 | struct Baz {};
      |        ^
./bar.h:1:10: note: './baz.h' included multiple times, additional include site in header from module 'foo.bar'
    1 | #include "baz.h"
      |          ^
foo.cppmap:4:10: note: foo.bar defined here
 4 |   module "bar" {
      |          ^
./foo.h:1:10: note: './baz.h' included multiple times, additional include site in header from module 'foo'
    1 | #include "baz.h"
      |          ^
foo.cppmap:1:8: note: foo defined here
    1 | module "foo" {
      |        ^
1 error generated.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VU2vqzYQ_TXDxgJhGy65CxYkuWmfVL1lW3XzZPAArgAj2zy93l9fGUyS-5FuWhWhIE9m5pwzM7aFtaqbEEvIj8DYr8qJr4sGxiA_R2JxvTZlMEa1ln-VJz2OYpLAK0jX9ykNb1oBy4AdTr9UX38C9kzidtRyGTCexIjAz63WN9so5rhVQ7AnzTyPYibxjwbYEdiRxL83g5g64OcYR-XiLewab0lsnQR-7qZli2ApiRtyn0uvq7kZ39NMq5vbp0ICGDDWal8MAsUR0orgj1kbR4D5ANKjkGiCV9L7oqUVIbfgWpi74Dv_WpirPxRnj779fmTZP6g0V1MzLDLgvO7p3mXY_nmUoZ0ktuRY_fHt52-bSWKrJnxjeoNzpe1bamfRINnlWWeWxpGjeF0txRn48SaMcZykaj9jaP6lxhdjtPk0w2-9GpDUixqkmrpbY4q1q8UW82Uifg5JwJKkNXokwE9hUIPdAn8BXtF_CkqAXfaeBUdv2puQA68OwCuCgTExuBZcOaUnoltP7ShePTU_L4TkBIrTo8qS9fEO4YH85YporiRo6pEm7dB_gRU3Sqy4CRiXwal5QOLUiBbYiQgpV2Ji2L2IVc5r3id5Ff2mqsk68jt9urJ72McPAnYJb3Zn9kFDwCHbsErSo0GfLgu5Hm7AB3Dv2_a_Vuw_rhbdZ-yuWB8KdQV7dM59Pll0G1zS4YRGOJTJ_X6LZMnlM38WEZa0yA48y4qcRn1JWY1C5LLmNE05b-oGsTk0bd3Uh6cnJiNVspTlac4KSukzpUkm21wgZxktRI6UQpbiKNSQDMP3MdGmi5S1C5Y0o_khjQZR42DDDbbdGowBO11XPBzoNtxrpvSJ4nrpLGTpoKyzt9ROuWG9Dk9rbH4mX6ZGG4ONI86gcCNOzm_W0NJuEUZa3-MVRJjtwLHRYoayd262_iRgF2CXTrl-qZNGj8AuHjB84tnoP7FxwC6rMAvsErR9L9nfAQAA__9CgSya">