<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 - exhaustive switch with unreachable defaultdest should get cleaned up"
   href="https://bugs.llvm.org/show_bug.cgi?id=43129">43129</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>exhaustive switch with unreachable defaultdest should get cleaned up
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>Linux
          </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>Interprocedural Optimizations
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>ndesaulniers@google.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org, srhines@google.com
          </td>
        </tr>

        <tr>
          <th>Blocks</th>
          <td>4068
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=22437" name="attach_22437" title="x.c">attachment 22437</a> <a href="attachment.cgi?id=22437&action=edit" title="x.c">[details]</a></span>
x.c

Consider the following test case: <a href="https://godbolt.org/z/xLKkbK">https://godbolt.org/z/xLKkbK</a>

There's a switch that LLVM deduces to be exhaustive.  During SimplifyCFG, LLVM
transforms the default case to a label with an unreachable IR instruction. 
This never gets removed, which gets lowered to jump to an empty basic block
(usually off the end of the function with no return).  This isn't a bug per se,
but it leaves behind garbage in the object file which confuses the Linux
kernel's object file validator, objtool.

It seems this is only an issue when the case is exhaustive.  Adding additional
cases will just get removed at some point by opt.

It seems like the comparison that would have been used for the default case can
at least be skipped.</pre>
        </div>
      </p>

        <div id="referenced">
          <hr style="border: 1px dashed #969696">
          <b>Referenced Bugs:</b>
          <ul>
              <li>
                [<a class="bz_bug_link 
          bz_status_CONFIRMED "
   title="CONFIRMED - [Meta] Compiling the Linux kernel with clang"
   href="https://bugs.llvm.org/show_bug.cgi?id=4068">Bug 4068</a>] [Meta] Compiling the Linux kernel with clang
              </li>
          </ul>
        </div>
        <br>

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

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