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

    <tr>
        <th>Summary</th>
        <td>
            Clang wrongly allows overriding method to vary its return type
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    The following code generates no warnings in Clang despite the override's return type being incorrect:
```
struct S {
  virtual const void* f() = 0;
  virtual ~S() = default;  // Silence -Wnon-virtual-dtor
};

struct T : S {
  void* f() override;  // Should warn or error
};
```
Other compilers:
gcc: Warns
MSVC: Errors
Live example: https://godbolt.org/z/TjoxEzd7M

Larger example demonstrating dispatch in the presence of overloads: https://godbolt.org/z/orcfbrnGz
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMU0FvozwQ_TXmMkpkDClw4JA2zXdp9R1SfT0bewLu59hobGjTw_72lWnabbt7WAkJMYzfe34zT4ZgeofYss012-wyOcXBUzv-L0M0rs86r8_tw4Bw9Nb6Z-N6UF4j9OiQZMQAzsOzJGdcH8A4uLHS9aAxjCYixAHBz0hkNDJRBSCMEzmI5xGhwwRnnPJEqCIrtozvGN-yK355ls8QaVIRDsCq67cKwGwoTtKC8i5EmL3RTGzhyETNRAOs2AFnxW_dPw6fGjQe5WQjK64BmNgzsYeDsegUwurRebe6nFrp6OkirNp9oH7R9gCs2H5T-E3Thwuf-QY_Wb3YB54Aif7I9NWOf-OABMqfRmORwodrvVJJxKMkF94q94f_blLpNuFeandmRsAXeRotpn9DjOOCsSjqve68jWtPPRP7Vyb2D0_-5fZVV_efb30nqUd6hwGNpzQGkmljQJswyqiGtAxp_CNhWFz1x8UE66UOf0PtSR07cv-8ZrotdFM0MsM2r0S94VyUdTa0RcfzTYO8knxTctGoslFXcqO7Y1lLLHRmWsFFmXPe5PWmEvW6lseqa3hd51Vd6qZjJceTNHZt7XxK3JkJYcI2z_OqFJmVHdrwng1qU9eqm_rASm5NiOHXuWiixfZt-5_Ju96eQabIhPfRJ3NOGAevIXqYJZ3BxC-JyCay7TdbTBymbq38iYl9Iru8ViP5pxQasV8UByb2F9FzK34GAAD__-CNNA4">