<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">