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

    <tr>
        <th>Summary</th>
        <td>
            [C++23] [Modules] module before include will have a "redefinition of concept" error
        </td>
    </tr>

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

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

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

<pre>
    Similar to #87609.

LLVM: 18.1.5
OS: macOS Sonoma 14.4.1
CPU: Apple M1

Demo: https://github.com/ncihnegn/cpp-modules-demo

```
[1/8] Scanning /Users/foobar/Temp/cpp-modules-demo/foo.cxx for CXX dependencies
[2/8] Scanning /Users/foobar/Temp/cpp-modules-demo/main.cxx for CXX dependencies
[3/8] Generating CXX dyndep file CMakeFiles/foo.dir/CXX.dd
[4/8] Generating CXX dyndep file CMakeFiles/hello.dir/CXX.dd
[5/8] Building CXX object CMakeFiles/foo.dir/foo.cxx.o
[6/8] Linking CXX static library libfoo.a
[7/8] Building CXX object CMakeFiles/hello.dir/main.cxx.o
FAILED: CMakeFiles/hello.dir/main.cxx.o 
/usr/local/Sither/Cellar/llvm/18.1.5/bin/clang++   -std=c++20 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk -MD -MT CMakeFiles/hello.dir/main.cxx.o -MF CMakeFiles/hello.dir/main.cxx.o.d @CMakeFiles/hello.dir/main.cxx.o.modmap -o CMakeFiles/hello.dir/main.cxx.o -c /Users/foobar/Temp/cpp-modules-demo/main.cxx
In file included from /Users/foobar/Temp/cpp-modules-demo/main.cxx:3:
In file included from /Users/foobar/Temp/cpp-modules-demo/bar.h:4:
/usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional:571:9: error: redefinition of concept '__is_derived_from_optional' with different template parameters or requirements
  571 | concept __is_derived_from_optional = requires(const _Tp& __t) { []<class _Up>(const optional<_Up>&) {}(__t); };
      | ^
/Users/foobar/Temp/cpp-modules-demo/foo.cxx:3:10: note: '/usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional' included multiple times, additional include site in header from module 'foo.<global>'
    3 | #include <optional>
      | ^
/Users/foobar/Temp/cpp-modules-demo/foo.cxx:2:1: note: foo.<global> defined here
    2 | module;
      | ^
/Users/foobar/Temp/cpp-modules-demo/bar.h:4:10: note: '/usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional' included multiple times, additional include site here
    4 | #include <optional>
      |          ^
In file included from /Users/foobar/Temp/cpp-modules-demo/main.cxx:3:
In file included from /Users/foobar/Temp/cpp-modules-demo/bar.h:4:
/usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional:1240:13: error: use of undeclared identifier '__is_derived_from_optional'
 1240 | requires(!__is_derived_from_optional<_Up>) && three_way_comparable_with<_Tp, _Up>
      |             ^
2 errors generated.
ninja: build stopped: subcommand failed.
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsV11v27gS_TX0y8CCRFmW_eAHf0QXxY3RAmkv8mZQ4thmS5G6JJU0_34xkqy4waZNu92HBdYIYoscnpk5czgihffqZBBXLNuwbDcRbThbtzKVOhs8mUlp5dPqTtVKCwfBAuPpIp_Hy4jFOxav-_-3t__bs3QNySJKoqwfe39HI7Wo3t_BnTW2FpDMolmU9NPbD59oft00GmGfXKPtsLY0dw6h8SxdM14wXpxUOLdlVNma8eISHuNF1TTT2spWo59KWnmFxObx8Nc_ZpuE8WLBsh3cVcIYZU7AePHJo_OMF0drS-EYLz5i3fwZdGcSVV-_wtE62N7fg8QGjURTKfSjE_4XndRCmR97SS9e_oMGnQjkpzN-MhIbOCqNsN2LL1gojYPnSCpyvb2_j6QckWY_i3RGrV_Byi5Ym1ZpeUGy5WeswmvhDKRGdkSZX1BulflyAfFBBFWBVqUT7om-aaEYF-Vvdn0d_4Xsi_di_e72Zkf6e8MSGJzzovU0o20lNOPFnQpn7NhBrbtqa_1Awh12CC9K1YlXC3NifMP4BgCmPkiW7qp-gMcwFa46g3D1fAZT5Z-8szaQmGjbqEoEZQ0Fd19ZiZFoSE9bawKaQMM7fEBtmy6QD1qEo3U1je9pU95HzTD0wvJu999no27LevkFpvsdTPcf30TKdF-8xS6SwGbxWwxrK2vRwNS-zX31i_utL-Y70ytemUq3EiUcna1_FTFdp9TBfhtwKVx0Zul6NqL-svaiiPFiiIWc9apjvHigJmkbEpfQLF1necLS9ZK2BDpnHf1wKPGojCIjsEeorKmwIW3mh4PyB4lOPaA8UIqHEYvn8KjCGaQ6HtGhCRCwJhkiNMKJGgM6D9aBw_-3ymHdCblLEyDLE2D5dnT1uh9g6e4C4RlfVNb4AIePDeNzOBwC40tg-Qb6Vx5Lt5UW3sPhU8PSm9H-mYHtZWY-rGT5jvFFj8TSDdBzurkESh8KlGU3Y4l-_hUzSCeJiW5jA9I34_nfXW-ePwu0bnVQ9IIOqiYmtyCkVAPJgxV4FUjTcEYh0fWi7lOicCkblm5P2pZE5Q1lMPKU9jzx9ILF0u0z7Te_nVBOhF7z-TI66FSNEs7o8Nk979z3sL-v0Nd7-R9S5m9pmf1c-cbPyNe_rfZFq034jISQpN8029Yj9djWSKy0cChBSTRBHRW6H3bcoQqE3FXhqi8ynnxn6XPbW0LX-uYQzg7x8CieDpWtqWOXGg_U0cmY2uv20kRfK_119XmfoYdTf-xEOVwqjDKfBSVe0kEOfLBNg5IGfFtWtq6FkXAUSo8rXhz0J3KVymW6FBNcJXkyWyxncTqfnFfzBa9kkh-XAlNxjOUcl0kpqjyjoVTIiVrxmM_iLM7inOfJPJJZliQxVvkM53yeLdgsxlooHVGlI-tOE-V9i6tlkiTJRIsSte_uUpwbfIRuknFOVyu3ojXTsj15Nou18sE_owQVdHcJ2w6nv5ROsizb7HtV0tPQVUs8WjdqGx6V1nAWDwgCGOevvJkZH-ietE6vvnO1GhTchdo4S4dnEi_lQRuny_OPAAAA__8a02X-">