<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Weirdness resolving builtin <=> when overload is visible to template definition"
   href="https://bugs.llvm.org/show_bug.cgi?id=44786">44786</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Weirdness resolving builtin <=> when overload is visible to template definition
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>10.0
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++2a
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>Casey@Carter.net
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=23091" name="attach_23091" title="Repro">attachment 23091</a> <a href="attachment.cgi?id=23091&action=edit" title="Repro">[details]</a></span>
Repro

Compiling this TU (sorry so large, I wanted to make it library-free):

  namespace std {
      struct partial_ordering {
          static const partial_ordering less;
          static const partial_ordering equivalent;
          static const partial_ordering greater;
          static const partial_ordering unordered;

          int x;
      };

      inline constexpr partial_ordering partial_ordering::less{};
      inline constexpr partial_ordering partial_ordering::equivalent{};
      inline constexpr partial_ordering partial_ordering::greater{};
      inline constexpr partial_ordering partial_ordering::unordered{};

      struct weak_ordering {
          static const weak_ordering less;
          static const weak_ordering equivalent;
          static const weak_ordering greater;

          int x;
      };

      inline constexpr weak_ordering weak_ordering::less{};
      inline constexpr weak_ordering weak_ordering::equivalent{};
      inline constexpr weak_ordering weak_ordering::greater{};

      struct strong_ordering {
          static const strong_ordering less;
          static const strong_ordering equal;
          static const strong_ordering equivalent;
          static const strong_ordering greater;

          int x;
      };

      inline constexpr strong_ordering strong_ordering::less{};
      inline constexpr strong_ordering strong_ordering::equal{};
      inline constexpr strong_ordering strong_ordering::equivalent{};
      inline constexpr strong_ordering strong_ordering::greater{};
  } // namespace std

  struct S {};

  int operator<=>(S const&, S const&);

  template <class T>
  constexpr bool f() {
      using X = decltype(T{} <=> T{});
      return true;
  }

  static_assert(f<int>());

with "-std=c++2a" ICEs clang 10 (release/10.x at 8f19f984, but apparently not
trunk <a href="https://godbolt.org/z/fNK2jP">https://godbolt.org/z/fNK2jP</a>):

  <=> expressions not supported yet
  UNREACHABLE executed at D:\llvm\clang\lib\AST\StmtProfile.cpp:1539!
  Stack dump:
  0.      Program arguments: d:\clang10\bin\clang++ -std=c++2a test.cpp
  1.      test.cpp:49:36: current parser token ';'
  2.      test.cpp:48:20: parsing function body 'f'
  3.      test.cpp:48:20: in compound statement ('{}')
   #0 0x00007ff6bb7a131b (d:\clang10\bin\clang++.exe+0x10e131b)
   #1 0x00007ff84858cb6d (C:\WINDOWS\System32\ucrtbase.dll+0x6cb6d)
   #2 0x00007ff84858db71 (C:\WINDOWS\System32\ucrtbase.dll+0x6db71)
   #3 0x00007ff6bb73ae5e (d:\clang10\bin\clang++.exe+0x107ae5e)
   #4 0x00007ff6bdf269b7 (d:\clang10\bin\clang++.exe+0x38669b7)
   #5 0x00007ff6bdf21888 (d:\clang10\bin\clang++.exe+0x3861888)
   #6 0x00007ff6bdf2a95a (d:\clang10\bin\clang++.exe+0x386a95a)
   #7 0x00007ff6bdf1f224 (d:\clang10\bin\clang++.exe+0x385f224)
   #8 0x00007ff6bdcc532a (d:\clang10\bin\clang++.exe+0x360532a)
   #9 0x00007ff6bdd2475f (d:\clang10\bin\clang++.exe+0x366475f)
  #10 0x00007ff6bd873574 (d:\clang10\bin\clang++.exe+0x31b3574)
  #11 0x00007ff6bd87c48d (d:\clang10\bin\clang++.exe+0x31bc48d)
  #12 0x00007ff6bd87fce7 (d:\clang10\bin\clang++.exe+0x31bfce7)
  #13 0x00007ff6bd87111f (d:\clang10\bin\clang++.exe+0x31b111f)
  #14 0x00007ff6bd8714e3 (d:\clang10\bin\clang++.exe+0x31b14e3)
  #15 0x00007ff6bd1d4660 (d:\clang10\bin\clang++.exe+0x2b14660)
  #16 0x00007ff6bd2494c3 (d:\clang10\bin\clang++.exe+0x2b894c3)
  #17 0x00007ff6bd24895f (d:\clang10\bin\clang++.exe+0x2b8895f)
  #18 0x00007ff6bd247de4 (d:\clang10\bin\clang++.exe+0x2b87de4)
  #19 0x00007ff6bd1c7966 (d:\clang10\bin\clang++.exe+0x2b07966)
  #20 0x00007ff6bd231c44 (d:\clang10\bin\clang++.exe+0x2b71c44)
  #21 0x00007ff6bd2316ad (d:\clang10\bin\clang++.exe+0x2b716ad)
  #22 0x00007ff6bd234ab4 (d:\clang10\bin\clang++.exe+0x2b74ab4)
  #23 0x00007ff6bd23a67e (d:\clang10\bin\clang++.exe+0x2b7a67e)
  #24 0x00007ff6bd1a9009 (d:\clang10\bin\clang++.exe+0x2ae9009)
  #25 0x00007ff6bd1ef03c (d:\clang10\bin\clang++.exe+0x2b2f03c)
  #26 0x00007ff6bd1ee318 (d:\clang10\bin\clang++.exe+0x2b2e318)
  #27 0x00007ff6bd1edc7f (d:\clang10\bin\clang++.exe+0x2b2dc7f)
  #28 0x00007ff6bd1c7739 (d:\clang10\bin\clang++.exe+0x2b07739)
  #29 0x00007ff6bd1a6c79 (d:\clang10\bin\clang++.exe+0x2ae6c79)
  #30 0x00007ff6bd1a2332 (d:\clang10\bin\clang++.exe+0x2ae2332)
  #31 0x00007ff6bd19fa10 (d:\clang10\bin\clang++.exe+0x2adfa10)
  #32 0x00007ff6bc06a036 (d:\clang10\bin\clang++.exe+0x19aa036)
  #33 0x00007ff6be62bc7f (d:\clang10\bin\clang++.exe+0x3f6bc7f)
  #34 0x00007ff6bc069a55 (d:\clang10\bin\clang++.exe+0x19a9a55)
  #35 0x00007ff6bc022f6f (d:\clang10\bin\clang++.exe+0x1962f6f)
  #36 0x00007ff6bc11c7a1 (d:\clang10\bin\clang++.exe+0x1a5c7a1)
  #37 0x00007ff6ba728e2c (d:\clang10\bin\clang++.exe+0x68e2c)
  #38 0x00007ff6ba71de86 (d:\clang10\bin\clang++.exe+0x5de86)
  #39 0x00007ff6bbf6de71 (d:\clang10\bin\clang++.exe+0x18ade71)
  #40 0x00007ff6bbf6da03 (d:\clang10\bin\clang++.exe+0x18ada03)
  #41 0x00007ff6bb190cd9 (d:\clang10\bin\clang++.exe+0xad0cd9)
  #42 0x00007ff6bb7821ac (d:\clang10\bin\clang++.exe+0x10c21ac)
  #43 0x00007ff6bb781fbc (d:\clang10\bin\clang++.exe+0x10c1fbc)
  #44 0x00007ff6bbf6c2ab (d:\clang10\bin\clang++.exe+0x18ac2ab)
  #45 0x00007ff6bbef7c01 (d:\clang10\bin\clang++.exe+0x1837c01)
  #46 0x00007ff6bbef7de8 (d:\clang10\bin\clang++.exe+0x1837de8)
  #47 0x00007ff6bbed928d (d:\clang10\bin\clang++.exe+0x181928d)
  #48 0x00007ff6ba71f071 (d:\clang10\bin\clang++.exe+0x5f071)
  #49 0x00007ff6be35d024 (d:\clang10\bin\clang++.exe+0x3c9d024)
  #50 0x00007ff849947bd4 (C:\WINDOWS\System32\KERNEL32.DLL+0x17bd4)
  #51 0x00007ff84a62ced1 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x6ced1)
  clang++: error: clang frontend command failed due to signal (use -v to see
invocation)
  clang version 10.0.0 (<a href="https://github.com/llvm/llvm-project.git">https://github.com/llvm/llvm-project.git</a>
8f19f984f296c8ddbb16dc1623e8a4bd6bfed111)
  Target: x86_64-pc-windows-msvc
  Thread model: posix
  InstalledDir: d:\clang10\bin
  clang++: note: diagnostic msg: PLEASE submit a bug report to
<a href="https://bugs.llvm.org/">https://bugs.llvm.org/</a> and include the crash backtrace, preprocessed source,
and associated run script.
  clang++: note: diagnostic msg:
  ********************

  PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
  Preprocessed source(s) and associated run script(s) are located at:
  clang++: note: diagnostic msg:
C:\Users\cacarter\AppData\Local\Temp\test-49f509.cpp
  clang++: note: diagnostic msg:
C:\Users\cacarter\AppData\Local\Temp\test-49f509.sh
  clang++: note: diagnostic msg:

  ********************

"<=> expressions not supported yet" suggests a change on trunk didn't get
ported to release/10.x?</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>