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

    <tr>
        <th>Summary</th>
        <td>
            #pragma once applies to all headers in global module fragment
        </td>
    </tr>

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

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

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

<pre>
    Attempting to compile the following valid set of source files

```
// a.hpp
#pragma once
using a = int;
```

```
// b.hpp
#pragma once
#include "a.hpp"
a b;
```

```
// c.cpp
module;
#include "b.hpp"
export module c;
```

Causes clang to error with

```
In file included from c.cpp:3:
b.hpp:4:1: error: unknown type name 'a'
a b;
^
```

Changing from `#pragma once` to `#ifdnef FOO...`-style include-guards causes the code to compile as expected. It appears as though `#pragma once` is applied to the set of all headers that have that pragma collectively?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycU82uszgMfZqwsYog4addsOg3nUrf6nsGkxjITEhQEtrbtx-lcHVvpasuRqpKsPE5x_YJhqBHS9Sx-herLxmucXK-U3jTKkRnKeudenTnGGleorYjRAfSzYs2BHEiGJwx7p4SNzRaQaAIboDgVi8JBm0osOLCivP-3xT7b3vlV8avgPm0LJ8RsXgcZwRnJW2xNSR8BCYuoG1k4tfPYG8Y-vcMjAttpVkVAeN8k8P5lkPo_w-jzOUn4-zUaugL5IWsfyGjj8X5CFsFyPfEf-EaKIA0uO2FvHce7jpOb-T9ts-twC5BweDdvKsVZ8HEXrbpEueKiXPJxHlDT4fV_mvd3UJ8LAQW59RGi4y3P8yr_vud_gntmFb7lJCSr6tpitTVFteDsjTA9c-fPM9ZUxxCfHx1cRhX9CqA3CaSjCmdou9mxQD0sZCMpHL4HQGXhdCHFI-TW8fpZwE6pC-NJpXAEvDucDQGJkJFPgFghAlvtJ12COmMIRn1jcyDiWumOqFO4oQZdWXT8qJtq1ZkU1f1ZS-pHKSoCiyH4lSVqjhVio6IshGY6Y4XnJecN2Vbt7XI61PTSt7LoT82zVEQqwqaUZvcmNucOz9mOoSVuvrUFsfMYE8mPG8455bu8Ewmy9WXzHep5tCvY2BVYXSI4Qsl6mioex3KPo6QxvF9BtrCaFyP5tO8Q6ohG7PVm26KcQnJW8_LMeo4rX0u3cz4NbHtj8Pi3T8kI-PXp8bA-PXZw38BAAD__6UOZUI">