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