<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141504>141504</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Should diagnose discard of Objective-C++ method returning nodiscard type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
halbi2
</td>
</tr>
</table>
<pre>
```
struct [[nodiscard("Expected")]] expected {};
struct A {
expected f();
};
@interface B
-(expected) f;
@end
void test(A* a, B* b) {
a->f(); // warn
[b f]; // no warn
}
```
Clang 20 correctly diagnoses the discarded result in `a->f()` but erroneously does not diagnose the discarded result in `[b f]`.
https://godbolt.org/z/Gvx94Kcja
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8UsuOozoQ_ZpiU0pkivBasIBO5y7uYhbzBTYUwS3HjmyT7p6vH0HopGcWIyGB7POqQ8kQ9NkyN5B3kB8TOcfJ-WaSRmlKlBs-GyjE9og2RD_3EVdwZ92gQy_9AFQB0evHlfvIAxAB1ZAfIT8ib4cIZQflEbIORPsUatdz0eITOK5q9YZ8UA5C28h-lD3jnbEDqvjhWeP4QLId7i43pweMHCJQ1QK1KIFesFu-1EL5Mpc7yF6fxohAJ6ATvktvVwDkncJxmenbrXVfgCWmaL8X9WKkPSMJ7J333EfziYOWZ-sCB4wT41YdD-g5zCaitgiF-CNJIVDNEdl7Z9nNYRFxHNC6-FD7l9gzdSH290amGK8BsvY-wtkNypm4d_4MdPoFdPrv9lEf_u_fZDI02VBntUy4SctDRWVRlmkyNYIlZ4LHtBzHspZFSRXnKqvkkImsHstENyQoFzkVaUFFmu656kUqe6WoUv2Yj8sfukht9sbcLot3okOYuUkPaS4OiZGKTVgXksjyO663y1blx8Q3C2mn5nOAgzA6xPCUiToabn5ObjbDs6CtHHQj_lBv3Ed9490LUAfU4YXj5Jba4uyttmd8LDXGzysnszfNX53pOM1q37sL0Gmx3l67q3eLOtBpDRyATttEt4Z-BwAA___ipAYm">